Oracle

如何快速啟動/關閉 Oracle 11?

  • September 13, 2019

我想知道正確啟動/關閉 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

adbshut $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 服務。

引用自:https://dba.stackexchange.com/questions/42774