利用Shell指令碼驗證RMAN備份組和做定期恢複實驗

來源:互聯網
上載者:User

內容簡介:

兩種Shell指令碼詳解

驗證RMAN備份組有效性的操作實戰

RMAN備份恢複實驗操作戰技


經常聽一些大師說,要定期做Oracle資料庫的備份恢複實驗,那非要等到資料庫出了問題的話,說什麼也晚了。當然,這個東西要落地的話,每家公司的做法和業務情境都有所不同。其實,這個問題也困擾了我好久,後來正好學了點Shell知識,我就想著能不能用Shell指令碼編寫一些RMAN相關的日常維護操作。於是,從今年3月開始,用了將近一個月時間,“驗證RMAN備份組的有效性”和“用RMAN備份組做定期恢複實驗”這兩種Shell指令碼就出爐了。最後反覆進行了測試,正常運行。今天借社群這個平台,和大家一起分享。


一、兩種Shell指令碼詳解


首先,是第一種Shell指令碼,“rman_validate_v2.sh”用來驗證Oracle RMAN備份組的有效性。


指令碼內容介紹


指令碼注釋部分,見下圖:



這部分都是一些注釋性的內容,第一個紅框是個人姓名,EMAIL郵箱和我的技術blog地址;第二個紅框是資料庫類型、作業系統類型、指令檔名、指令碼類型以及指令碼的用途;第三個紅框是注意事項,是說這個指令檔首先要在測試環境測試通過以後再到生產環境運行。


指令碼變數定義部分,看下圖:



第一個紅框是匯入.bash_profile檔案的環境變數;第二個紅框是定義SHELL外部變數的絕對路徑;第三個紅框是定義一些常用字串變數,比如RMAN備份組的位置、RMAN日誌的位置等。


指令碼“查詢RMAN備份組的BS_KEY值”部分,見下圖所示:



具體解釋一下上面紅框代表的內容,通過SQLPLUS命令串連到資料庫,用SQL語句查出前一天產生的RMAN備份組的BS_KEY值存到一個變數BSKEY_LIST,這個值可不止一個喲,所以又用一個變數BSKEY_LIST_WITH_COMMA將這些值用逗號串連起來。


指令碼“VALIDATE校正”部分,如下圖所示:



這也是整個Shell指令碼當中最為關鍵的內容,即用“validate backupset BS_KEY值列表 check logical;”(形如validate backupset 6197,6198,6199,6200,6201,6202……6210 check logical;)這條命令依次校正前一天產生的所有RMAN備份組的有效性。由於我們的RMAN備份採用的冗餘策略是一周,即周五做全備,周六到下周的周四作增量1級備份,這是RMAN的整個備份周期。所以,我都是當天晚上校正前一天產生的RMAN備份。如果大家所在公司資料量大的話,也可以進行1周的校正,那麼這種情況的話,指令碼內容就要進行相應的修改。


上面就是“驗證RMAN備份組有效性”這個SHELL指令碼的所有內容。


接下來,是第二種SHELL指令碼,用來進行RMAN恢複實驗的。嚴格地說,它不是一個SHELL指令碼就能搞定的,根據整個恢複實驗的情況來看,需要5個SHELL指令碼,見下圖所示:



為了讓大家更好地瞭解這5個SHELL指令檔,我專門寫了2個README的TXT檔案,一個中文版的,一個英文版的,見下圖:



SHELL指令碼的說明檔案介紹


README_CN.TXT介紹,見下圖:



REAMDME_EN.TXT介紹,見下圖:



各個SHELL指令檔的介紹


(1) “ssh_mutual_trust_linux_for_source.sh”的內容,見下圖:



第一個紅框是定義一些SHELL外部命令的絕對路徑;第二個紅框是將遠程主機的主機名稱和對應的IP地址應添加到root使用者下的/etc/hosts檔案裡;添加的格式放在了#的注釋For example下面四行內容;第三個紅框是設定SSH互信功能時產生的記錄檔名。


下面是PING遠程主機(也就是要進行RMAN恢複的主機)的部分提示代碼,如下圖所示:



如何能PING通遠程主機,就會輸出“Proceeding further…”,否則會輸出“Exiting now…”而直接退出該SHELL指令碼的運行,下面是能PING通遠程主機以後,將在源主機上產生一個RSA演算法的公私金鑰組,並將公開金鑰檔案傳送到遠程主機上,見下圖的代碼所示:



紅框裡的兩條命令操作就是產生金鑰組和傳公開金鑰的情況。


 (2)“ssh_mutual_trust_linux_for_target.sh”的內容,見下圖:



前面的代碼部分和指令檔“ssh_mutual_trust_linux_for_source.sh”的內容都一樣,唯一不同的就是上圖的在檔案/etc/hosts中增加的內容。


 (3)“collect_info_from_source_oracle.sh”的內容。由於這個SHELL指令檔的代碼有694行,所以只截取其中最為關鍵的部分,見下圖所示:



就是從源Oracle資料庫取得上面那28個變數的值,比如“主機名稱、作業系統名、資料庫名、歸檔日誌路徑、RMAN備份的路徑、RMAN備份的總大小(單位是MB)、監聽檔案和口令檔案的路徑等等”。


(4) “scp_log_file_to_target.sh”的內容,如下圖:



第一個紅框是定義了在源Oracle資料庫上執行了“collect_info_from_source_oracle.sh”這個指令碼產生的log檔案所在的位置,第二個紅框是用SCP命令將該log檔案遠程複製到要進行RMAN恢複的主機上。


 (5)“rman_restore_and_recover_to_target_oracle.sh”的內容。由於這個SHELL指令檔的內容有536行,也是只截取我覺得最為重要一部分,見下圖:



紅框圈住的內容表示要在目標主機上用“mkdir –p”命令建立這8個基本目錄,當然,在目標主機上所需的磁碟空間一定要比源主機所給的空間要大,這個毋庸置疑。只要做了這一步,後面才能遠程複製RMAN備份組和其它的檔案等等,所以這個操作步驟很關鍵。最後就是依次還原出SPFILE和控制檔案,將資料庫啟動到mount狀態,用RMAN的restore和recover命令將資料庫還原和恢複出來。


二、驗證RMAN備份組有效性操作實戰


一周的RMAN備份內容,見下圖:



“2017-05-05”這一天是周五,“2017-05-11”這一天是周四,這段時間正好是一份完整的RMAN備份。其中05-05是完全備份,資料量為11G,其餘的六天為增量備份,所以資料量較小。在日期後面的是自動備份的控制檔案,也是保留了一周的,不過要在哪天進行RMAN恢複實驗,可是要用哪一天的喲。


一周的RMAN校正記錄檔,見下圖:



周五RMAN完全備份的檔案內容,見下圖:



周五RMAN校正產生的記錄檔內容,見下圖:



第一個紅框是校正日誌的檔案名稱(周六晚上校正的昨天,也就是周五的RMAN備份),後面三個紅框是依次進行校正的3個RMAN備份組檔案(0級增量備份的資料檔案),下面是校正備份的歸檔日誌和自動備份的控制檔案內容,見下圖:



周六RMAN增量備份的檔案內容,見下圖:



周六RMAN校正產生的記錄檔內容,見下圖:


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.