利用dbstart和dbshut腳本自動啟動和停止數據庫的問題

客戶的兩臺IBM Power 740小型機使用HACMP軟件創建互備關系的數據庫服務器,每臺小型機運行一個數據庫,任何一臺服務器出現故障宕機,另一臺小型機應該立即接管,且要一并接管數據庫,這時在一臺小型機上就運行了兩個數據庫,故障服務器恢復正常之后,相應的數據庫會自動切換回主機。

? ? ? ? 在出現故障和恢復時,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用戶下面的腳本:
##############################################################

## 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

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

EOF

echo "Stop Oracle DataBase typt End"

以上是自動停止Oracle數據庫的腳本,HACMP通過root用戶下的腳本調用a_stop.sh腳本自動停止Oracle數據庫,兩個腳本都是通過設置ORACLE_SID環境變量來明確的啟動、停止數據庫。

--end--

? ? ? ?感謝同事老譚對我的幫助!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457327.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457327.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457327.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在Windows下不使用密碼遠程登陸Linux

在登陸Linux進行管理的時候我們通常會使用用戶名和密碼進行登陸&#xff0c;這樣一來是比較麻煩&#xff0c;二來是不安全&#xff0c;為了解決這個問題&#xff0c;我們可以使用公私鑰 (public keys和private keys)進行認證。簡單來說公鑰存放在服務器上&#xff0c;私鑰存放在…

dto 是只給前端需要的數據嗎_DO、VO、DTO...XXOO,你弄明白了么

技術公眾號&#xff1a;Java In Mind(Java_In_Mind),歡迎關注&#xff01;背景我相信&#xff0c;剛開始學習接觸企業代碼的時候&#xff0c;一定會發現&#xff0c;工程中充斥著各種XO&#xff1a;DO、VO、DTO、DAO&#xff0c;還有各種名詞&#xff1a;POJO&#xff0c;JavaB…

Javascript判斷object還是list/array的類型(包含javascript的數據類型研究)

前提&#xff1a;先研究javascript中的變量有幾種&#xff0c;參考&#xff1a; http://www.w3school.com.cn/js/js_datatypes.asp http://glzaction.iteye.com/blog/1285147 測試1&#xff1a; typeof關鍵字 var obj {test:test}; typeof obj;//輸出object var list [{test:t…

Core Data

簡介 Core Data是iOS5之后才出現的一個框架&#xff0c;它提供了對象-關系映射(ORM)的功能&#xff0c;即能夠將OC對象轉化成數據&#xff0c;保存在SQLite數據庫文件中&#xff0c;也能夠將保存在數據庫中的數據還原成OC對象。在此數據操作期間&#xff0c;我們不需要編寫任何…

tbase同步mysql_mysql主從同步

MySQL主從介紹MySQL主從叫做Replication、AB復制&#xff0c;A和B做主從后&#xff0c;在A上寫數據。B上也會同步A的數據&#xff0c;兩者實現實時同步MySQL是基于binlog日志來同步的&#xff0c;主上必須開啟binlog才能進行主從同步&#xff0c;同步過程大概有三個步驟(1)主將…

2017將轉行進行到底

2016 年說著轉行&#xff0c;最后還是在匆匆中找了一份老本行&#xff0c;此刻的心情還是無愛&#xff0c;畢竟螺絲一直分不清啊&#xff0c;不喜歡就是不喜歡。看了django的教程&#xff0c;不得不感嘆國外的書寫的相對優秀一點&#xff0c;《learning django web development…

mysql中函數是否可以返回多個值_是否可以從mysql函數返回多個值?

我的臟解決方案是&#xff1a;1.連接字符串中的值. 2返回字符串. 3 Splits將字符串返回值.我認為它不優雅,我確信這有局限性,但它適用于簡單的情況還有必要創建分裂函數,因為Mysql沒有這個函數&#xff1a;首先編輯你的功能.CREATE FUNCTION yourFunctionWith2valuesForReturni…

lua自定義迭代器

迭代器 http://www.tutorialspoint.com/lua/lua_iterators.htm 迭代器能夠讓你遍歷某個集合或者容器中的每一個元素。 對于lua來說&#xff0c; 集合通常指代 table&#xff0c; 用于創建變化的數據結構&#xff0c; 類似數組。 Iterator is a construct that enables you to t…

mysql非主鍵索引_主鍵索引和非主鍵索引的區別

1. 什么是最左前綴原則&#xff1f;以下回答全部是基于MySQL的InnoDB引擎例如對于下面這一張表如果我們按照 name 字段來建立索引的話&#xff0c;采用B樹的結構&#xff0c;大概的索引結構如下如果我們要進行模糊查找&#xff0c;查找name 以“張"開頭的所有人的ID&#…

優美的配色方案設計

2019獨角獸企業重金招聘Python工程師標準>>> 怎么做好設計配色一直是個難題&#xff0c;雖然網站上有各種各樣的色庫&#xff0c;但配色仍然至關重要&#xff0c;不得已的話可以親自動手&#xff0c;況且樂趣滿滿。 這個沒有一套標準&#xff0c;所以看自己怎么喜歡…

It's a start!

開始博客之旅轉載于:https://www.cnblogs.com/catchingdream/p/5843172.html

mysql死鎖釋放時間參數_【Mysql】mysql 事務未提交導致死鎖 Lock wait timeout exceeded; try restarting transaction 解決辦法...

問題場景問題出現環境&#xff1a;1、在同一事務內先后對同一條數據進行插入和更新操作&#xff1b;2、多臺服務器操作同一數據庫&#xff1b;3、瞬時出現高并發現象&#xff1b;不斷的有一下異常拋出&#xff0c;異常信息&#xff1a;org.springframework.dao.CannotAcquireLo…

ORACLE sqlplus設置行數和寬度

1) 查看目前的pagesize,默認是14:Sqlplus代碼show pagesize; 2) 將pagesize設置好100,則可以一次顯示夠多行記錄了:Sqlplus代碼set pagesize 100; 2. 設置行的寬度1) 查看目前的linesize,默認是80:Sqlplus代碼show linesize; 2) 設置成100或者更寬都可以:Sqlplus代碼set li…

mysql關系模式怎么畫_關系數據庫與mysql

表下面是阿里的mysql設計原則&#xff0c;可以參考&#xff0c;不一定按照阿里規則&#xff0c;但一個團隊一定要有規則&#xff0c;如果現在沒有規則&#xff0c;從現在開始&#xff0c;慢慢推廣&#xff0c;適應1.【強制】表達是與否概念的字段&#xff0c;必須使用 is_xxx的…

Javascript 構造函數模式、原型模式

前兩天寫完組合繼承&#xff0c;打算總結一下原型繼承的&#xff0c;不過今天看了一下工廠模式、構造函數模式和原型模式&#xff0c;覺得有必要總結一下以加深印象。 ———————————————————————————————————————————————————…

2016年CCF第七次測試 俄羅斯方塊

1 //2016年CCF第七次測試 俄羅斯方塊2 // 這道小模擬題還是不錯3 // 思路&#xff1a;處理出輸入矩陣中含1格子的行數和列數4 // 再判是否有一個格子碰到底部&#xff0c;否則整體再往下移動一步&#xff0c;如果有一個格子不能移動&#xff0c;要返回到前一步5 6 #include <…

springmvc視圖解析器_SpringMVC視圖及REST風格

什么是視圖解析器&#xff1f;springMVC用于處理視圖最重要的兩個接口是ViewResolver和View。ViewResolver的主要作用是把一個邏輯上的視圖名稱解析成一個真的的視圖&#xff0c;而SpringMVC中用于把View對象呈現給客戶端的是View對象本身&#xff0c;而ViewResolver只是把邏輯…

mysql5.7.x 1251_MySql-8.0.x免安裝版下載與配置,Navicat打開數據庫鏈接報錯1251的解決辦法...

概述MySQL從5.7一下子跳到了MySQL8.0, 其中的變化必然是很大的, 這里就不說了, 本文主要講解最新版MySQL安裝的事情.實際上5.7版本后的mysql免安裝版都是沒有data文件和my.ini文件的&#xff0c;下面再具體說明怎么生成&#xff0c;注意不能自己手動新建.下載下載程序必然去官網…

To install 64-bit ODBC drivers

為了更充分的利用硬件資源&#xff0c;我想很多人都開使用64位操作系統了&#xff0c;同時你可以也發現了在64位操作系統上ODBC的驅動找不到了&#xff0c;所以ODBC的東西都沒法用了。 因為2007以前版本的Office只有32位版本&#xff0c;所以我們不能在64位系統上使用ODBC。使用…

【Qt開發】QTableWidget設置根據內容調整列寬和行高

QTableWidget要調整表格行寬主要涉及以下一個函數 1.resizeColumnsToContents(); 根據內容調整列寬 2.resizeColumnToContents(int col); 根據內容自動調整給定列寬 3.horizontalHeader()->setResizeMode 把給定列…