Перейти к содержанию

Oracle, Crontab - автоматический останов базы и архивирование, помогите со скриптом


Рекомендуемые сообщения

Есть SLES9. На нем работает база Oracle.

Цель:

По расписанию.

1. Остановить базу

2. Поместить в архив

3. Переписать на другой сервер

4. Запустить базу

Для этого хочу использовать crontab + скрипт, по аналогии с тем, как делалось на Windows машине.

Проблема в том, что все администрирование баз Oracle производится пользователем oracle, а crontab запускает задания как root (если я правильно понял описание работы crontab).

Написал скрипт (пока только пытаюсь остановить базу), пытался протестировать (просто запуская из командной строки).

Цитата:

#su oracle

export ORACLE_SID=itest9i

/opt/oracle/product/9iR2/bin/sqlplus /nolog < /home/oracle/orashut.sql > /home/oracle/orashutlog.txt

export ORACLE_SID=itest9i

/opt/oracle/product/9iR2/bin/sqlplus /nolog < /home/oracle/orastart.sql > /home/oracle/orastartlog.txt

1. Под пользователем root не работает.

2. Если раскомментировать строку с su тоже не работает.

Результат почти одинаков. Лог файл:

Цитата:

SQL> ERROR:

ORA-09925: Unable to create audit trail file

Linux Error: 13: Permission denied

Additional information: 9925

ORA-01017: invalid username/password; logon denied

SQL> ORA-01012: not logged on

3. Если сначала вручную переключится к пользователю oracle, то скрипт работает.

Помогите пожалуйста со скриптом. Я Linux очень плохо знаю, но надо сделать.

ЗЫ: Я знаю, что есть rman (утилита архивирования от oracle), но разбираться мне с ним дольше и "польза от него/затраты на настройку и использование" для нас минимальна. Поэтому просто хочется сделать, как было на Windows машине.

Ссылка на комментарий
Поделиться на другие сайты

Вам нужно выполнять команды через su с опцией -c. Например, делаете скрипт в файле /home/oracle/backup-script, а в кроне будет sudo - oracle -c /home/oracle/backup-script.

Ссылка на комментарий
Поделиться на другие сайты

ЗЫ: сам не практикую это (ибо просто нет нужды), но могу порекомендовать

не остановку службы, а лок таблиц/базы и ее дамп куда надо. При таком

подходе, даже не обязительно будет иметь доступ к шелу сервака и

выполнять все операции уже с бэкапной машины.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Сделал задание через пользовательский CRONTAB, только вот проблема. Не работает так как надо.

Это задание для CRONTAB

Цитата:

#Backup ITEST

1 1 * * 1,3,5 /opt/oracle/admin/itest9i1.sh

#Backup INSTR

1 2 * * 1 /opt/oracle/admin/instr9i1.sh

Вот пример скрипта, которым останавливаю и архивирую базу.

Цитата:

#Shutdown database

export ORACLE_SID=instr9i

/opt/oracle/product/9iR2/bin/sqlplus /nolog < /opt/oracle/admin/orashut.sql > /opt/oracle/admin/shut1.log

#Mount drive

sudo mount -t smbfs -o codepage=866,iocharset=koi8-r,username=linux,password=linux, rw //thunder/DBBackup /opt/oracle/thunder

#Removing old file

sudo rm /opt/oracle/thunder/instr9i/instr9i1.tar.gz

#Archieving database

sudo tar -czvf /opt/oracle/thunder/instr9i/instr9i1.tar.gz /opt/oracle/oradata/instr9i/*

#Unmount drive

sudo umount -l /opt/oracle/thunder

#Startup database

export ORACLE_SID=instr9i

/opt/oracle/product/9iR2/bin/sqlplus /nolog < /opt/oracle/admin/orastart.sql > /opt/oracle/admin/start1.log

Вот файлы, для остановки базы:

Цитата:

orashut.sql

conn sys/oracle as sysdba

shutdown immediate

exit

orastart.sql

conn sys/oracle as sysdba

startup

exit

База попадает в архив не остановленная. Логи пустые. Если запускать скрипт просто из под пользователя oracle, т.е.

Цитата:

./instr9i1.sh

То все работает как надо, и база останавливается и логи создаются.

Поясните пожалуйста, в чем может быть дело?

Ссылка на комментарий
Поделиться на другие сайты

Так, я вообще из под пользователя Oracle все делал. В доке сказано, что ничего указывать не надо в таком случае.

Ссылка на комментарий
Поделиться на другие сайты

Byte писал(а) Mon, 11 February 2008 13:26

А что в /vat/log/messages ?

и root должны письма идти...

Это /var/log/messages

Цитата:

Feb 11 00:59:00 Alcapone /USR/SBIN/CRON[29822]: (root) CMD ( rm -f /var/spool/cron/lastrun/cron.hourly)

Feb 11 01:01:00 Alcapone /USR/SBIN/CRON[29842]: (oracle) CMD (/opt/oracle/admin/itest9i1.sh)

Feb 11 01:01:01 Alcapone sudo: oracle : TTY=unknown ; PWD=/opt/oracle ; USER=root ; COMMAND=/bin/mount -t smbfs -o codepage=866,iocharset=koi8-r,username=linux,password=linux, rw //thunder/DBBackup /opt/oracle/thunder

Feb 11 01:01:01 Alcapone kernel: Unable to load NLS charset 866

Feb 11 01:01:01 Alcapone kernel: smbfs: failed to load nls '866'

Feb 11 01:01:01 Alcapone sudo: oracle : TTY=unknown ; PWD=/opt/oracle ; USER=root ; COMMAND=/bin/rm /opt/oracle/thunder/itest9i/itest9i1.tar.gz

Feb 11 01:01:01 Alcapone sudo: oracle : TTY=unknown ; PWD=/opt/oracle ; USER=root ; COMMAND=/bin/tar -czvf /opt/oracle/thunder/itest9i/itest9i1.tar.gz /opt/oracle/oradata/itest9i/admin /opt/oracle/oradata/itest9i/ctl1ncc.dbf /opt/oracle/oradata/itest9i/ctl2ncc.dbf /opt/oracle/oradata/itest9i/ixusr1ncc.dbf /opt/oracle/oradata/itest9i/log1ncc.dbf /opt/oracle/oradata/itest9i/log2ncc.dbf /opt/oracle/oradata/itest9i/log3ncc.dbf /opt/oracle/oradata/itest9i/log4ncc.dbf /opt/oracle/oradata/itest9i/log5ncc.dbf /opt/oracle/oradata/itest9i/systncc.dbf /opt/oracle/oradata/itest9i/tlsncc.dbf /opt/oracle/oradata/itest9i/tmpncc.dbf /opt/oracle/oradata/itest9i/undotbs.dbf /opt/oracle/oradata/itest9i/usr1ncc.dbf

Feb 11 01:02:02 Alcapone sudo: oracle : TTY=unknown ; PWD=/opt/oracle ; USER=root ; COMMAND=/bin/umount -l /opt/oracle/thunder

А почему в логе нет записей о том, что выполнялись команды по останову и запуску базы?

А вот еще ошибка с codepage? Как от нее избавиться?

А вот mail, я не знаю как правильно настроить. Sad Поэтому не знаю где письма смотреть. Если для его работы требуется дополнительная настройка SMTP или еще чего, то точно не работает.

Еще раз повторюсь. Мои знания о Linux очень-очень маленькие.

Ссылка на комментарий
Поделиться на другие сайты

Цитата:

Feb 11 01:01:01 Alcapone kernel: Unable to load NLS charset 866

Feb 11 01:01:01 Alcapone kernel: smbfs: failed to load nls '866'

Проверьте опции монтирования.

По поводу останова и запуска базы посмотрите в логах самой базы, если такие ведуться.

И всё же, имхо, правильнее в кроне указать, от чьего имени стартовать скрипты.

Ссылка на комментарий
Поделиться на другие сайты

Duncan MacLeod писал(а) Mon, 11 February 2008 13:13

А вот mail, я не знаю как правильно настроить. Sad Поэтому не знаю где письма смотреть. Если для его работы требуется дополнительная настройка SMTP или еще чего, то точно не работает.

mail -u root

выполните

Ссылка на комментарий
Поделиться на другие сайты

cppmm писал(а) Mon, 11 February 2008 14:23

Цитата:

Feb 11 01:01:01 Alcapone kernel: Unable to load NLS charset 866

Feb 11 01:01:01 Alcapone kernel: smbfs: failed to load nls '866'

Проверьте опции монтирования.

По поводу останова и запуска базы посмотрите в логах самой базы, если такие ведуться.

И всё же, имхо, правильнее в кроне указать, от чьего имени стартовать скрипты.

Опции монтирования в скрипте выше. Монтирую диск с NTFS.

Хорошо, попробую имя указать. Посмотрю, что будет.

Ссылка на комментарий
Поделиться на другие сайты

Вроде бы с русским языком там работать не приходится.

Попробоуйте вообще убрать опции codepage и iocharset при монтировании.

Ссылка на комментарий
Поделиться на другие сайты

Byte писал(а) Mon, 11 February 2008 14:30

Duncan MacLeod писал(а) Mon, 11 February 2008 13:13

А вот mail, я не знаю как правильно настроить. Sad Поэтому не знаю где письма смотреть. Если для его работы требуется дополнительная настройка SMTP или еще чего, то точно не работает.

mail -u root

выполните

Свежих писем нет.

/etc/crontab

Цитата:

SHELL=/bin/sh

PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin

MAILTO=root

#

# check scripts in cron.hourly, cron.daily, cron.weekly, and cron.monthly

#

-*/15 * * * * root test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1

59 * * * * root rm -f /var/spool/cron/lastrun/cron.hourly

14 4 * * * root rm -f /var/spool/cron/lastrun/cron.daily

29 4 * * 6 root rm -f /var/spool/cron/lastrun/cron.weekly

44 4 1 * * root rm -f /var/spool/cron/lastrun/cron.monthly

Вроде правильно? Должны идти письма ведь? Или это только для crontab, который для root?

Ссылка на комментарий
Поделиться на другие сайты

Byte писал(а) Mon, 11 February 2008 16:46

1. Нда... скоре всего

mail -u oracle

2. Кстати, а как вы для oracle cron настраивали

crontab -u oracle -e

?

Нет, без имени. Я почему-то посчитал, что по умолчанию будет от пользователя создавшего его. Попробую изменить.

Ссылка на комментарий
Поделиться на другие сайты

Да, если делать из-под пользователя crontab -e

то создается пользовательский crontab

Насколько я понял по логам идет попытка запуска от oracl, но затем затыкается на монтировании

Попробуйте монтировать от root, а необходимые действия выполнять от oracl

Ссылка на комментарий
Поделиться на другие сайты

Спасибо за помощь. Справился с проблемой. Все запускался от oracle, но для останова базы надо было добавить еще переменные ORA_HOME. И тогда все заработало.

А монтирую я под пользователем root, там sudo стоит в скрипте.

Спасибо за полезные команды. Теперь ими регулярно пользуюсь.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...