客戶的兩臺IBM Power 740小型機使用HACMP軟件創建互備關系的數據庫服務器,每臺小型機運行一個數據庫,任何一臺服務器出現故障宕機,另一臺小型機應該立即接管,且要一并接管數據庫,這時在一臺小型機上就運行了兩個數據庫,故障服務器恢復正常之后,相應的數據庫會自動切換回主機。
? ? ? ? 在出現故障和恢復時,HACMP必須在兩臺小型機上調用啟動和停止Oracle數據庫的腳本完成切換過程,大部分的朋友應該和我一樣應該會考慮使用Oracle的dbstart和dbshut腳本來生成相應的腳本。
? ? ? ? 我也是這么做的,但這么做了之后在測試過程中發現了如下一個問題:
? ? ? ? 1).正常啟動HACMP之后,兩個數據庫正常的在兩個小型機上運行。
? ? ? ? 2).小型機A出現故障,數據庫A被正常的切換到了小型機B上運行。
? ? ? ? 3).小型機A恢復正常,原有數據庫正常的切換了回來,但這時運行在小型機B上的數據庫宕機了。
? ? ? ? ?上面的現象是什么原因喃,我查看了相關的文檔,下面是一段很重要的文字描述:
? ? ? ? ?Oracle推薦配置在系統啟動的時候自動啟動Oracle數據庫,當系統關閉的時候自動關閉數據庫,自動化數據庫的啟動和關閉是為了防止不正確的數據庫關閉。
oracle用戶下的腳本:
a_stop.sh
以上是自動停止Oracle數據庫的腳本,HACMP通過root用戶下的腳本調用a_stop.sh腳本自動停止Oracle數據庫,兩個腳本都是通過設置ORACLE_SID環境變量來明確的啟動、停止數據庫。
--end--
? ? ? ?感謝同事老譚對我的幫助!
? ? ? ? 在出現故障和恢復時,HACMP必須在兩臺小型機上調用啟動和停止Oracle數據庫的腳本完成切換過程,大部分的朋友應該和我一樣應該會考慮使用Oracle的dbstart和dbshut腳本來生成相應的腳本。
? ? ? ? 我也是這么做的,但這么做了之后在測試過程中發現了如下一個問題:
? ? ? ? 1).正常啟動HACMP之后,兩個數據庫正常的在兩個小型機上運行。
? ? ? ? 2).小型機A出現故障,數據庫A被正常的切換到了小型機B上運行。
? ? ? ? 3).小型機A恢復正常,原有數據庫正常的切換了回來,但這時運行在小型機B上的數據庫宕機了。
? ? ? ? ?上面的現象是什么原因喃,我查看了相關的文檔,下面是一段很重要的文字描述:
Oracle recommends that you configure your system to automatically start Oracle Database when the system starts up, and to automatically shut it down when the system shuts down. Automating database startup and shutdown guards against incorrect database shutdown.
? ? ? ? ?Oracle推薦配置在系統啟動的時候自動啟動Oracle數據庫,當系統關閉的時候自動關閉數據庫,自動化數據庫的啟動和關閉是為了防止不正確的數據庫關閉。
To automate database startup and shutdown, use the dbstart and dbshut scripts, which are located in the $ORACLE_HOME/bin directory. The scripts refer to the same entries in the oratab file, which are applied on the same set of databases. You cannot, for example, have the dbstart script. automatically start sid1, sid2, and sid3, and have the dbshut script. shut down only sid1. However, you can specify that the dbshut script. shuts down a set of databases while the dbstart script. is not used at all. To do this, include a dbshut entry in the system shutdown file, but do not include the dbstart entry from the system startup files.
? ? ? ? 為了實現自動化啟動和關閉數據庫,需要使用存放在$ORACLE_HOME/bin目錄下的dbstart和dbshut腳本,這兩個腳本引用/etc/oratab文件中的相同條目,應用于在相同的數據庫集。不能有如下的情況,例如,使用dbstart腳本自動的開始sid1,sid2和sid3數據庫,同時只使用dbshut腳本停止sid1數據庫,這是做不到的。然而可以在不使用dbstart腳本啟動數據庫的情況下,指定使用dbshut腳本來停止數據庫集。如果你想這么做,將包含dbshut腳本的條目寫入操作系統停止文件,但是不要將包含dbstart腳本的條目寫入操作系統的啟動文件中。
? ? ? ?在使用dbstart和dbshut腳本啟動和停止數據庫之前需要先將存儲在/etc/oratab配置文件中的數據庫屬性修改為Y,格式如下:sid:oracle_home_directory:[Y|N],然后就可以在系統啟動配置文件和系統停止配置文件中加入dbstart和dbshut腳本使得系統在啟動和異常關閉的情況下先啟動和正常關閉數據庫,避免數據庫不正常的關閉帶來的損失。腳本標準的用法是:
dbstart $ORACLE_HOME
dbshut $ORACLE_HOME
? ? ? ? 從上面的描述我們可以了解到,如果一臺服務器上有多套Oracle數據庫,那么沒法控制使用dbstart和dbshut腳本啟動和停止某一個數據庫,兩個腳本會將/etc/oratab配置文件中屬性修改為Y的數據庫都啟動和停止,這就是出現最開始描述的問題的原因。
? ? ? ? 為了解決這個問題,只有手動寫腳本來固定啟動和停止某個數據庫,下面是一個例子:
1).自動啟動腳本。
root用戶下面的腳本:
? ? ? ? HACMP通過root用戶下的腳本調用a_start.sh腳本完成對監聽器和數據庫的自動啟動。
2).自動停止腳本。
root用戶下的腳本:
? ? ? ? 為了實現自動化啟動和關閉數據庫,需要使用存放在$ORACLE_HOME/bin目錄下的dbstart和dbshut腳本,這兩個腳本引用/etc/oratab文件中的相同條目,應用于在相同的數據庫集。不能有如下的情況,例如,使用dbstart腳本自動的開始sid1,sid2和sid3數據庫,同時只使用dbshut腳本停止sid1數據庫,這是做不到的。然而可以在不使用dbstart腳本啟動數據庫的情況下,指定使用dbshut腳本來停止數據庫集。如果你想這么做,將包含dbshut腳本的條目寫入操作系統停止文件,但是不要將包含dbstart腳本的條目寫入操作系統的啟動文件中。
? ? ? ?在使用dbstart和dbshut腳本啟動和停止數據庫之前需要先將存儲在/etc/oratab配置文件中的數據庫屬性修改為Y,格式如下:sid:oracle_home_directory:[Y|N],然后就可以在系統啟動配置文件和系統停止配置文件中加入dbstart和dbshut腳本使得系統在啟動和異常關閉的情況下先啟動和正常關閉數據庫,避免數據庫不正常的關閉帶來的損失。腳本標準的用法是:
dbstart $ORACLE_HOME
dbshut $ORACLE_HOME
? ? ? ? 從上面的描述我們可以了解到,如果一臺服務器上有多套Oracle數據庫,那么沒法控制使用dbstart和dbshut腳本啟動和停止某一個數據庫,兩個腳本會將/etc/oratab配置文件中屬性修改為Y的數據庫都啟動和停止,這就是出現最開始描述的問題的原因。
? ? ? ? 為了解決這個問題,只有手動寫腳本來固定啟動和停止某個數據庫,下面是一個例子:
1).自動啟動腳本。
root用戶下面的腳本:
##############################################################
## start oracle server
echo "`hostname`:The ORACLE Server typt is starting,Please Waiting."
sleep 3
su - oracle -c "./a_start.sh"
sleep 3
echo "`hostname`:The ORACLE Server typt is started."
##############################################################
oracle用戶下面的腳本:
a_start.sh
oracle用戶下面的腳本:
a_start.sh
echo "Switch To typt"
export ORACLE_SID=typt
lsnrctl start
echo "Start Oracle DataBase typt Begin"
sqlplus /nolog ?<<EOF
connect /as sysdba
startup
exit
EOF
sleep 3
echo "Start Oracle DataBase typt End"
? ? ? ? HACMP通過root用戶下的腳本調用a_start.sh腳本完成對監聽器和數據庫的自動啟動。
2).自動停止腳本。
root用戶下的腳本:
##############################################################
## stop oracle server
echo "`hostname`:The ORACLE Server typt is stopping,Please Waiting."
su - oracle -c "./a_stop.sh"
sleep 5
echo "`hostname`:The ORACLE Server typt is stoped."
##############################################################
oracle用戶下的腳本:
a_stop.sh
echo "Switch To typt"
export ORACLE_SID=typt
echo "Stop Oracle DataBase typt Begin"
sleep 5
sqlplus /nolog <<EOF
connect /as sysdba
shutdown immediate
exit
lsnrctl stop
lsnrctl stop
EOF
echo "Stop Oracle DataBase typt End"
--end--
? ? ? ?感謝同事老譚對我的幫助!