Як швидко запустити / вимкнути Oracle 11?


9

Мене цікавить, який найшвидший спосіб правильно запустити / вимкнути демон Oracle DB (Oracle 11.2, встановлений на тестовій машині).

Мені це потрібно для програм C / C ++, які використовують API OCI / Pro * C.

Я хочу цього, тому що я звик до швидкості запуску 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 DB працює на CentOS 6.3, це безкоштовна (стандартна версія).

Відповіді:


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.8GHz, повільний оберт жорсткого диска.)

Як працюють 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 не потрібна.


1

Навіщо вам це взагалі потрібно? В чому причина? Для відключення у вас є 3 варіанти:

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

PS: вам, певно, не потрібен Enterprise Manager для запуску, якщо вам потрібна база даних лише для тестів. Використовуйте сценарії Oracle dbstart/ dbshut. Якщо вам дуже потрібна ЕМ, почніть її у фоновому режимі.


0

yasir-arsanukaev : Чи можете ви просто призупинити (призупинити) свій VM, зберігаючи його стан на диску?

colin-t-hart : Якщо це тестова машина, створіть знімок. Запустіть машину та запустіть використання Oracledbstart. Просто закінчіть роботу машини та відкатіть до знімка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.