標籤:利用shell指令碼來驗證oracle資料庫rman備份組的有效性
利用SHELL指令碼來驗證Oracle資料庫RMAN備份組的有效性
作者:趙全文 網名:guestart
我們生產環境的Oracle資料庫都做了RMAN備份,是採用了一周的RMAN備份保留原則;除了使用RMAN備份以外,我們還使用了愛數(Eisoo)備份軟體來進行備份,可以說是做到了有備無患。可是,如果有一天,Oracle資料庫由於主機層面硬體原因或是資料庫層面的原因不能對外提供高可用服務的時候,假設資料丟了一大部分,我們只有用RMAN備份來進行恢複,再如果發現,RMAN備份失效了,那就往地縫裡鑽和哭暈在廁所都於事無補了。
為了防止這一幕的出現,就需要對Oracle資料庫RMAN備份組的有效性進行驗證。為此,我專門寫了一個SHELL指令碼用來驗證RMAN備份組的有效性,將該指令檔放在了crontab的計劃任務裡,讓其在每天晚上21點自動運行,目的是驗證前一天產生的RMAN備份組的有效性。
現在,用線上的一套Oracle資料庫生產環境,來示範操作。
首先,查看最近的一次RMAN全備,如所示,
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M02/8E/47/wKiom1i7uI-Rkd13AABdXEDiUOI748.png-wh_500x0-wm_3-wmp_4-s_649140724.png" title="1.png" alt="wKiom1i7uI-Rkd13AABdXEDiUOI748.png-wh_50" />
接下來,查看一下產生的校正RMAN備份組有效性的LOG檔案,見,
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M00/8E/47/wKiom1i7uMuDnoy-AAAzvMetcmo211.png-wh_500x0-wm_3-wmp_4-s_3250530364.png" title="2.png" alt="wKiom1i7uMuDnoy-AAAzvMetcmo211.png-wh_50" />
我們就以查看2017年3月3日產生的LOG檔案為例,下面是執行SHELL指令碼驗證的結果,見所示,
一,
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M00/8E/47/wKiom1i7uQKAbnNjAADa4k8GgLQ401.png-wh_500x0-wm_3-wmp_4-s_2372537878.png" title="3.png" alt="wKiom1i7uQKAbnNjAADa4k8GgLQ401.png-wh_50" />
我們發現,上面首先校正的是3月2日產生的增量備份裡的歸檔記錄備份集,
二,
650) this.width=650;" src="https://s5.51cto.com/wyfs02/M01/8E/47/wKiom1i7uVTyo-qxAAEDwLQqStw781.png-wh_500x0-wm_3-wmp_4-s_1393828525.png" title="4.png" alt="wKiom1i7uVTyo-qxAAEDwLQqStw781.png-wh_50" />
緊接著,是校正增量1級備份產生的備份組和最後手動歸檔以及備份的歸檔記錄備份集,
三,
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M02/8E/45/wKioL1i7uZWAnWufAACMyuY4F0M887.png-wh_500x0-wm_3-wmp_4-s_1208161106.png" title="5.png" alt="wKioL1i7uZWAnWufAACMyuY4F0M887.png-wh_50" />
由於在RMAN的參數設定中開啟了控制檔案的自動備份功能,所以最後備份的是控制檔案,那麼最後校正的也是控制檔案了,嘿嘿!
俗話說的好,“工欲善其事,必先利其器”!最後著重介紹一下,rman_validate_v2.sh 這個驗證RMAN備份組有效性的SHELL指令碼的具體內容,
由於指令碼內容過多,下面分三個部分來說明,見圖1,
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M02/8E/45/wKioL1i7uhywXQS0AACXrftVMyQ962.png-wh_500x0-wm_3-wmp_4-s_878420220.png" title="6.png" alt="wKioL1i7uhywXQS0AACXrftVMyQ962.png-wh_50" />
依次解釋一下,幾個紅色方框標註的地方,
(1)簡歷,包括姓名,Emai郵箱,技術部落格網址;
(2) SHELL指令檔名;
(3) 最近修改日期;
(4)該SH指令碼使用的注意事項,當然是先確保在測試環境上測試通過以後,在放到生產環境中使用啦。
見圖2,
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M00/8E/47/wKiom1i7upui_BmhAAC1O5MJ_xk135.png-wh_500x0-wm_3-wmp_4-s_30459166.png" title="7.png" alt="wKiom1i7upui_BmhAAC1O5MJ_xk135.png-wh_50" />
圖2,有3個紅色方框,方框1是定義在指令碼中要使用的SHELL外部命令所在的絕對路徑,每種Linux作業系統上所在的路徑有可能不同,盡量要使用“which 想要使用的命令名”來尋找一下,然後寫到上面,通常把要使用的都要寫上去;方框2是定義了一些有關路徑的字串變數和一般字元串變數以及SHELL命令用一對反引號(鍵盤上ESC鍵下面和數字1鍵左邊的那個鍵)括起來的字串變數(注意:只有用反引號括起來才能產生SHELL命令的執行結果);方框3是使用SQLPLUS命令串連到Oracle資料庫以後,通過查詢檢視V$BACKUP_SET_DETAILS來找出前一天產生的RMAN備份組當中所有的BS_KEY值,然後儲存到一個字串變數BSKEY_LIST。
見圖3,
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M02/8E/45/wKioL1i7uwbgGWr0AABaxIZKnXE296.png-wh_500x0-wm_3-wmp_4-s_3299258518.png" title="8.png" alt="wKioL1i7uwbgGWr0AABaxIZKnXE296.png-wh_50" />
圖3有2個紅色方框需要特別說明,方框1是通過強大AWK命令將字串變數BSKEY_LIST的值“6046 6047 6048 6049 6050 6051 6052”的中間加一個逗號(所以我把方框1的字串變數命名為BSKEY_LIST_WITH_COMMA,意即帶逗號的BSKEY_LIST),形如這種格式,“6046,6047,6048,6049,6050,6051,6052”;方框2是在最後進入RMAN命令列,校正RMAN備份組有效性的語句,validate backupset 後面緊跟的就是帶逗號的BS_KEY值列表,形如這種格式,“validate backupset6046,6047,6048,6049,6050,6051,6052 check logical;”其實,也可以使用一個FOR循環來將字串變數BSKEY_LIST的值一個一個讀出,然後執行一次validate backupset 6046 check logical;再取一個值,再執行一次validatebackupset 6047 check logical;直到都把字元變數BSKEY_LIST的值取完為止,那樣的話,就不用定義前面那個字串變數BSKEY_LIST_WITH_COMMA了。看個人喜好,我覺得帶逗號這種方式,個人比較喜歡和推薦使用。
我把rman_validate_v2.sh這個指令碼放在了github上,網址為
https://github.com/guestart/rman_validate/blob/master/rman_validate_v2.sh,如果需要下載即可。
如您覺得此篇文章對您有協助,歡迎關注公眾號:guestart的DBA學習筆記,您的支援是對我最大的鼓勵!
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M02/8E/45/wKioL1i7u9HxNxeEAADnPdGUWRk240.jpg" title="訂閱號二維碼.jpg" alt="wKioL1i7u9HxNxeEAADnPdGUWRk240.jpg" />
本文出自 “藍色憂鬱” 部落格,轉載請與作者聯絡!
利用SHELL指令碼來驗證Oracle資料庫RMAN備份組的有效性