Oracle
如何快速啟動/關閉 Oracle 11?
我想知道正確啟動/關閉 Oracle DB 守護程序(Oracle 11.2,安裝在測試機器上)的最快方法是什麼。
對於使用 OCI/Pro*C API 的 C/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 上執行,它是免費(如啤酒一樣)可用的“標準版本”。
您可以使用Oracle 安裝附帶的
dbstart
/腳本。dbshut
它們在 下可用$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
a
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 服務。