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

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Duncan MacLeod
Сообщения: 25

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

Сообщение Duncan MacLeod »

Есть 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 машине.
У носорога плохое зрение, но при его массе - это не его проблемы!
Спасибо сказали:
Аватара пользователя
vr13
Сообщения: 887
ОС: gentoo

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

Сообщение vr13 »

1. в вашем скрипте нужно определить $ORACLE_HOME (только $ORACLE_SID недостаточно)
2. выполнять пользователем, который в группе dba (запрашивалась при инсталяции)
Спасибо сказали:
VladimirP
Сообщения: 164

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

Сообщение VladimirP »

Сделай файл crontab для пользователя oracle, чтобы запускать от рута. Одной из первых строк в скрипте подключи среду:
. /home/oracle/.bash_profile
Рекомендую потратить время на изучение горячего резервирования или RMAN. Гасить базу ради бэкапа -- как-то оно не совсем правильно.

И еще. В таком виде, как у вас, работать не будет. Надо вынести часть, выполняемую пользователем oracle, в отдельный скрипт, и командой su его запускать. А здесь получается так: запустили su, дождались, когда она выйдет, и продолжили (начиная со строки export ORACLE_SID=itest9i и далее) опять пользователем root.
Спасибо сказали:
Duncan MacLeod
Сообщения: 25

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

Сообщение Duncan MacLeod »

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

Это задание для 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


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

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

PS: vr13
Ваш совет только сейчас прочитал (уведомления не приходят :( ). Попробую использовать.
У носорога плохое зрение, но при его массе - это не его проблемы!
Спасибо сказали: