Как быстро запустить / выключить Oracle 11?

9

Мне интересно, какой самый быстрый способ правильно запустить / выключить демон БД Oracle (Oracle 11.2, установленный на тестовой машине).

Мне это нужно для программ на C / C ++, использующих OCI / Pro * C API.

Я хочу этого, потому что я привык к скорости запуска PostgreSQL и потому, что демон работает на виртуальной машине, которая запускается (по требованию) только для тестовых случаев.

В настоящее время я пишу это так: запуск:

sqlplus /nolog <<EOF
connect / as sysdba
startup
quit
EOF
lsnrctl start
emctl start dbconsole

И выключение:

emctl stop dbconsole
lsnrctl stop
sqlplus /nolog <<EOF
connect / as sysdba
shutdown
quit
EOF

Это работает - программы работают как положено - но эта процедура довольно медленная.

БД Oracle работает на CentOS 6.3, это бесплатная «стандартная версия».

maxschlepzig
источник

Ответы:

8

Вы можете использовать скрипты dbstart/, dbshutкоторые поставляются с установкой Oracle. Они доступны под $ORACLE_HOME/bin.

После новой установки вы должны отредактировать /etc/oratabфайл:

# cat /etc/oratab
# format: $ORACLE_SID:$ORACLE_HOME:N|Y
my_sid:/home/juser/app/juser/product/11.2.0/dbhome_1:N
# sed -i 's/:N$/:Y/' /etc/oratab
# grep my_sid /etc/oratab
my_sid:/home/juser/app/juser/product/11.2.0/dbhome_1:Y

Тогда вы можете использовать сценарии, как это:

$ whoami
juser
$ dbstart $ORACLE_HOME
$ # execute DB jobs ...
$ dbshut $ORACLE_HOME

dbstart выводит все, что необходимо для программ Pro * C / OCI.

Использование dbstart/ dbshutявляется улучшением по сравнению с пользовательским методом, упомянутым в вопросе:

method                time    called tools
―――――――――――――――――――――――――――――――――――――――――――――――――――――
dbstart              5.7 s    lsnrctl, sqlplus
dbshut               5.7 s    lsnrctl, sqlplus
custom startup      27.9 s    lsnrctl, sqlplus, emctl
custom shutdown     31.0 s    lsnrctl, sqlplus, emctl

(раз в системе Core i7 / 2,8 ГГц, жесткий диск медленно вращается.)

Как работает dbstart / dbshut

dbstart $ORACLE_HOME$Вызов в основном эквивалентен:

$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog

А в dbshut $ORACLE_HOME$основном эквивалентно:

$ lsnrctl stop
$ echo -e 'connect / as sysdba\nshutdown\nquit'| sqlplus /nolog

(Вы можете проверить, все ли выключено через ps aux | grep 'tnsl\|ora')

Обратите внимание, что порядок команд важен. Это означает, что когда lsnrctl startвыполняется после команды sqlplus-startup, тогда программа Pro * C / OCI все еще жалуется на недоступного TNS-слушателя.

И это как раз та проблема с последовательностью команд в вопросе - где emctl startпросто обходится неправильный порядок, потому что это исправляет часть настройки TNS-слушателя.

Также обратите внимание, что для выполнения программ Pro * C / OCI служба EMCTL не требуется.

maxschlepzig
источник
1

Зачем тебе это вообще нужно? Какова причина? Для отключения у вас есть 3 варианта:

  • обычный shutdown- ждет окончания сессии
  • shutdown immediate - откат и завершение сеансов (ждет окончания отката)
  • shutdown abort - убивает все - обычно база данных должна выполнить восстановление при запуске.

PS: вам, вероятно, не нужен Enterprise Manager для запуска, если вам нужна база данных только для тестов. Используйте Oracle dbstart/ dbshutскрипты. Если вам действительно нужен EM, запустите его в фоновом режиме.

ibre5041
источник
0

yasir-arsanukaev : Вы можете просто приостановить (приостановить) свою виртуальную машину, сохранив ее состояние на диск?

colin-t-hart : если это тестовая машина, создайте снимок. Запустите машину и начните использовать Oracledbstart. Просто сделайте принудительное отключение машины и сделайте откат до снимка.

user126897
источник