Duncan MacLeod Опубликовано 30 января, 2008 Жалоба Поделиться Опубликовано 30 января, 2008 Есть 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 машине. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Aceler Опубликовано 30 января, 2008 Жалоба Поделиться Опубликовано 30 января, 2008 Вам нужно выполнять команды через su с опцией -c. Например, делаете скрипт в файле /home/oracle/backup-script, а в кроне будет sudo - oracle -c /home/oracle/backup-script. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Byte Опубликовано 30 января, 2008 Жалоба Поделиться Опубликовано 30 января, 2008 а еще есть пользовательский crontab Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Hans R. Steiner Опубликовано 2 февраля, 2008 Жалоба Поделиться Опубликовано 2 февраля, 2008 ЗЫ: сам не практикую это (ибо просто нет нужды), но могу порекомендовать не остановку службы, а лок таблиц/базы и ее дамп куда надо. При таком подходе, даже не обязительно будет иметь доступ к шелу сервака и выполнять все операции уже с бэкапной машины. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Duncan MacLeod Опубликовано 11 февраля, 2008 Автор Жалоба Поделиться Опубликовано 11 февраля, 2008 Сделал задание через пользовательский 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 То все работает как надо, и база останавливается и логи создаются. Поясните пожалуйста, в чем может быть дело? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
cppmm Опубликовано 11 февраля, 2008 Жалоба Поделиться Опубликовано 11 февраля, 2008 Вообще-то в crontab'е указывается, из-под какого пользователя запускать скрипт... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Byte Опубликовано 11 февраля, 2008 Жалоба Поделиться Опубликовано 11 февраля, 2008 А что в /vat/log/messages ? и root должны письма идти... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Duncan MacLeod Опубликовано 11 февраля, 2008 Автор Жалоба Поделиться Опубликовано 11 февраля, 2008 Так, я вообще из под пользователя Oracle все делал. В доке сказано, что ничего указывать не надо в таком случае. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Duncan MacLeod Опубликовано 11 февраля, 2008 Автор Жалоба Поделиться Опубликовано 11 февраля, 2008 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, я не знаю как правильно настроить. Поэтому не знаю где письма смотреть. Если для его работы требуется дополнительная настройка SMTP или еще чего, то точно не работает. Еще раз повторюсь. Мои знания о Linux очень-очень маленькие. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
cppmm Опубликовано 11 февраля, 2008 Жалоба Поделиться Опубликовано 11 февраля, 2008 Цитата: 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' Проверьте опции монтирования. По поводу останова и запуска базы посмотрите в логах самой базы, если такие ведуться. И всё же, имхо, правильнее в кроне указать, от чьего имени стартовать скрипты. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Byte Опубликовано 11 февраля, 2008 Жалоба Поделиться Опубликовано 11 февраля, 2008 Duncan MacLeod писал(а) Mon, 11 February 2008 13:13 А вот mail, я не знаю как правильно настроить. Поэтому не знаю где письма смотреть. Если для его работы требуется дополнительная настройка SMTP или еще чего, то точно не работает. mail -u root выполните Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Duncan MacLeod Опубликовано 11 февраля, 2008 Автор Жалоба Поделиться Опубликовано 11 февраля, 2008 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. Хорошо, попробую имя указать. Посмотрю, что будет. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
cppmm Опубликовано 11 февраля, 2008 Жалоба Поделиться Опубликовано 11 февраля, 2008 Вроде бы с русским языком там работать не приходится. Попробоуйте вообще убрать опции codepage и iocharset при монтировании. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Duncan MacLeod Опубликовано 11 февраля, 2008 Автор Жалоба Поделиться Опубликовано 11 февраля, 2008 Byte писал(а) Mon, 11 February 2008 14:30 Duncan MacLeod писал(а) Mon, 11 February 2008 13:13 А вот mail, я не знаю как правильно настроить. Поэтому не знаю где письма смотреть. Если для его работы требуется дополнительная настройка 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 Опубликовано 11 февраля, 2008 Жалоба Поделиться Опубликовано 11 февраля, 2008 1. Нда... скоре всего mail -u oracle 2. Кстати, а как вы для oracle cron настраивали crontab -u oracle -e ? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Duncan MacLeod Опубликовано 11 февраля, 2008 Автор Жалоба Поделиться Опубликовано 11 февраля, 2008 Byte писал(а) Mon, 11 February 2008 16:46 1. Нда... скоре всего mail -u oracle 2. Кстати, а как вы для oracle cron настраивали crontab -u oracle -e ? Нет, без имени. Я почему-то посчитал, что по умолчанию будет от пользователя создавшего его. Попробую изменить. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Byte Опубликовано 11 февраля, 2008 Жалоба Поделиться Опубликовано 11 февраля, 2008 Да, если делать из-под пользователя crontab -e то создается пользовательский crontab Насколько я понял по логам идет попытка запуска от oracl, но затем затыкается на монтировании Попробуйте монтировать от root, а необходимые действия выполнять от oracl Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Duncan MacLeod Опубликовано 12 февраля, 2008 Автор Жалоба Поделиться Опубликовано 12 февраля, 2008 Спасибо за помощь. Справился с проблемой. Все запускался от oracle, но для останова базы надо было добавить еще переменные ORA_HOME. И тогда все заработало. А монтирую я под пользователем root, там sudo стоит в скрипте. Спасибо за полезные команды. Теперь ими регулярно пользуюсь. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.