Jump to content
Sign in to follow this  
Duncan MacLeod

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

Recommended Posts

Есть 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 машине.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

Сделал задание через пользовательский 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

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

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

Share this post


Link to post
Share on other sites

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 очень-очень маленькие.

Share this post


Link to post
Share on other sites

Цитата:

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'

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

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

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

Share this post


Link to post
Share on other sites

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

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

mail -u root

выполните

Share this post


Link to post
Share on other sites

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.

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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

mail -u oracle

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

crontab -u oracle -e

?

Share this post


Link to post
Share on other sites

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

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

mail -u oracle

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

crontab -u oracle -e

?

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...