利用dbstart和dbshut指令碼自動啟動和停止資料庫的問題
客戶的兩臺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--
感謝同事老譚對我的幫助!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-2131674/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux下開機使用dbstart和dbshut自動啟動和關閉db!Linux
- LINUX下開機使用dbstart和dbshut自動啟動和關閉dbLinux
- linux下dbstart,dbshut無法執行和自動啟動Oracle的辦法LinuxOracle
- 在linux下使用dbstart和dbshut啟動和關閉db!Linux
- 配置solaris 10_oracle10g_dbstart_dbshut自動啟停庫Oracle
- 啟動和停止資料庫.資料庫
- 手寫linux下oracle的dbstart和dbshut指令碼LinuxOracle指令碼
- dbstart&dbshut指令碼中的錯誤指令碼
- LINUX開機自動啟動ORACLE資料庫和監聽指令碼LinuxOracle資料庫指令碼
- centos 自動啟動指令碼和自啟動服務CentOS指令碼
- 關於dbstart指令碼啟動資料庫後無法使用sqlplus /nolog連線的問題指令碼資料庫SQL
- 【指令碼】快速啟動和關閉Windows上的資料庫指令碼Windows資料庫
- Oracle TNSListener服務啟動後自動停止問題Oracle
- 資料庫啟動問題資料庫
- AIX下自動啟動/停止Oracle資料庫AIOracle資料庫
- Linux 下Oracle 開機自啟動 與 oratab, dbstart 指令碼 說明LinuxOracle指令碼
- storm叢集啟動停止指令碼ORM指令碼
- informix 資料庫啟動關閉指令碼ORM資料庫指令碼
- Oracle xe 手工建立新資料庫後,更改啟動停止指令碼,監聽 for windowsOracle資料庫指令碼Windows
- 啟動和停止任務
- Oracle之 服務啟動&停止指令碼與開機自啟動(單例項)Oracle指令碼單例
- 再談用指令碼自動啟動關閉LINUX下的ORACLE資料庫指令碼LinuxOracle資料庫
- rhel as3下自動啟動和關閉oracle的指令碼S3Oracle指令碼
- 推薦系統中的冷啟動問題和探索利用問題
- 資料庫啟動和關閉資料庫
- Ubuntu自動啟動配置指令碼Ubuntu指令碼
- 網路卡自動啟動指令碼指令碼
- nginx啟動命令和停止命令。Nginx
- 資料庫自動啟動關閉資料庫
- Oracle資料庫的啟動和關閉Oracle資料庫
- redis的安裝和啟動和檢測和停止Redis
- 3.1.5.8 隨系統啟動自動啟動資料庫資料庫
- 配置作業系統重啟後,Oracle資料庫和監聽自動啟動作業系統Oracle資料庫
- 處理Oracle 11gR2 RAC資料庫資源不能自動啟動的問題Oracle資料庫
- MySQL資料庫叢集自動安裝指令碼!MySql資料庫指令碼
- RedHat Linux下Oracle啟動指令碼的建立 dbstart oracle8.1.6 (轉)RedhatLinuxOracle指令碼
- windows下oracle自動啟動指令碼WindowsOracle指令碼
- linux平臺下監聽器和Oracle的自動啟動與停止LinuxOracle