12.服務器管理恢復--RMAN配置(練習19)
恢復管理器(Recovery Manager,RMAN)是Oracle的一個工具,該工具用來備份、還原以及恢復Oracle數據庫,自從 Oracle8.0版本引入RMAN改變了DBA手工備份、恢復數據庫的方法。RMAN是一個將用戶命令解釋為PL/SQL命令行的解釋器,通過解釋這些PL/SQL命令進行數據庫的備份、還原以及恢復操作。RMAN稱之為服務器管理的恢復是因為它負責處理絕大多數備份、還原以及恢復的工作。
在本練習之前,首先介紹RMAN的體系結構以及各組件之間如何交換:
- RMAN執行體:用于備份、還原和恢復數據庫的命令工具。該程序在安裝Oracle服務器時自動安裝,并可以從數據庫備份的服務器上進行調用或者被其他服務器調用;
- Recover.bsp:組成RMAN執行體的一個獨立文件,該文件駐留在$ORACLE_HOME/rdbms/admin目錄下,該目錄必須對RMAN可見,該文件包含了結構信息及其他RMAN使用的數據;
- 目標數據庫:被備份、還原或恢復數據庫;
- 目標數據庫控制文件:被備份、還原或恢復數據庫的控制文件,只要在數據庫上進行RMAN備份,備份的信息都要保存在目標數據庫控制文件中;
- 通道:允許RMAN執行體從目標數據庫向備份介質傳送數據的通信信道。當通道打開時,就創建一個到服務器的服務會話進程,然后在執行RMAN命令時,利用該通道處理數據庫向內、向外的數據傳輸;
- 恢復目錄:存儲在其他數據(非目標數據庫)包含RMAN信息的集合。
以下特性是RMAN在處理備份和恢復方面比前面講述的用戶管理技術更合適:
- 自動備份、還原與恢復:由增加數據文件、增加表控件或創建更多的歸檔日志文件等引起物理數據結構的變化, RMAN將自動備份最新生成的結構。每次備份數據庫時,RMAN都要讀取控制文件以確保備份正確的結構內容(數據文件、控制文件和歸檔日志文件);
- 自動備份記錄:RMAN自動將每次備份都記錄在目標數據庫控制文件和可選的恢復目錄中,即RMAN知道哪個備份需要還原以及在恢復時需要哪些日志文件,可以減輕DBA保留備份記錄的負擔;
- 增量備份:用戶管理備份數據文件,整個文件都必須拷貝到其他位置上,即數據庫占用200G的磁盤空間則數據庫備份也需要占用200G的空間。由RMAN提供的增量備份可以值備份使用的數據塊或者只備份上次增量備份以來改變的數據塊,這樣可以減少備份的數量并提供恢復的性能;
- 損壞檢查:RMAN可以在備份期間檢查每個數據塊的損壞類型(介質損壞、校驗非法以及邏輯結構損壞),該損壞檢查也可以在恢復過程中執行。任何在備份期間發生的損壞塊都在目標數據塊的alert.log給出報告,而且也可以在目標數據庫的V$BACKUP_CORRUPTION和V$COPY_CORRUPTION視圖中找到;
- 智能的打開數據庫備份:在打開數據庫備份期間,RMAN不需要設置每個表空間為熱備份模式,因此打開數據庫備份不需要類似用戶管理打開數據庫備份那樣增加重做生成的數量,這樣RMAN打開數據庫備份速度比較快,而且不需要額外的重做動作;
- 性能調整提高:RMAN允許調整備份、還原和恢復操作的性能,可以并行方式操作數據庫、服用讀寫磁帶或磁盤設備、限制備份文件的讀取速度等方式減少I/O系統的工作;
- 簡易的歸檔日志備份:與數據庫文件類似,歸檔重做日志文件可以通過RMAN輕松備份,沒有必要手工生成一系列備份所需要的歸檔日志文件,然后又刪除—RMAN能夠輕松完成這一切工作;
對于DBA保護Oracle數據庫是首要的任務,經常進行備份操作已經成為習慣。使用用戶管理恢復,必須了解備份存儲在什么位置以及備份包含的內容,當需要恢復數據時,DBA必須迅速找到并還原正確的備份、找到恢復所需要的歸檔日志文件。而使用服務器管理恢復的最大有點就是,備份的記錄存放在控制文件或可選的恢復目錄中,因此在還原與恢復過程中,只要掌握了正確的RMAN命令,RMAN就能夠將這些命令解釋執行為一系列數據庫恢復所需要的數據文件和歸檔日志文件。
既然所有的RMAN信息都存儲在目標數據庫的日志文件,那為什么還要額外努力維護RMAN的目錄呢?下表羅列了應用RMAN目錄的優點:
|
只有目標控制文件 |
目標控制文件與目錄 |
|
如果所有的目標數據庫控制文件都丟失,可以恢復但非常困難 |
所有控制的目標數據庫控制文件都丟失了,則只需要幾個簡單命令就可以恢復,最新的目錄包含了控制文件備份的位置 |
|
控制文件包含了備份信息的時間控制量 |
目錄包含了所有RMAN備份操作的無限制歷史記錄 |
|
控制文件只保留了當前數據庫結構模式信息,例如,控制文件只知道數據庫文件的名稱以及所在的表空間 |
目錄存儲了所有模式信息并隨著目標日志文件信息的更新而更新,因此可以報告任務以前存在的結構模式 |
|
RMAN命令可以在 RMAN提示符下或通過腳本運行 |
RMAN命令可以在 RMAN提示符或者存儲腳本運行 |
|
沒有目錄的情況,目標控制文件備份必須發生在每次RMAN備份之后,同樣DBA必須保留詳細的控制文件備份的路徑和細節 |
目錄包括了所有類似于包含在目標控制文件中的關于備份需要的信息,因此,目錄提供了一個備份記錄保存功能并且可以用于從RMAN備份還原控制文件 |
目標數據庫控制文件在某個極大日期范圍內存儲值得保留的備份與歸檔日志信息,而這一范圍由init.ora文件中 CONTROL_FILE_RECORD_TIME參數確定,默認情況下該參數設定為7天,即在第8天時最陳舊的信息(從第1天開始)可以覆蓋。
恢復管理目錄包含了關于數據庫的信息(表空間、數據文件以及日志文件等),這些信息都是從目標的控制文件中拷貝的。RMAN使用目錄信息來執行備份、還原、恢復以及維護操作,例如目錄存儲了所有目標數據文件和歸檔日志文件的文件名以及位置。RMAN提供報告機制,這樣就可以查詢目錄瀏覽關于RMAN在目標數據庫上執行備份的信息,目錄可以有選擇性地包含成組的RMAN命令,即存儲腳本。
當使用RMAN部署一個恢復目錄時,應該注意如下事項:
- 將目錄保存在與注冊在其中任何一個目標數據庫都不同的數據庫和機器上,也可以使用產品數據庫作為其他產品數據庫的目錄數據庫,反之亦然。例如,可以在數據庫PRD1上成成一個目錄以管理PRD2動作,而在PRD2生成一個目錄來管理PRD1的RMAN動作;
- 為避免在不同目標數據庫版本上使用不同RMAN版本而引起的升級和兼容性問題,應該為每一個準備使用RMAN的 Oracle數據庫版本應用一個獨立的目錄所有者,為每個需要備份的不同版本的數據庫創建不同的用戶模式。對于一個 10.1.0數據庫,創建一個名稱為rman1010的模式并使用10.1.0創建一個目錄,當備份10.1.0數據庫時,應該使用 10.1.0RMAN執行體;而對于一個10.2.1數據庫創建一個名稱為RMAN1021模式并使用創建目錄命令創建一個10.2.1恢復目錄,對于該備份,應該使用10.2.1的RMAN執行體。一個RMAN目錄可以管理多個目標數據庫,需要注意,Oracle確實支持一個版本的目錄保存多個版本的目標數據庫,例如,可以創建一個10.2.1目錄并保存來自10.1.0、10.2.0、10.2.1版本數據庫的備份。通過為每個版本建立一個目錄用戶,可以避免必須進行的繁瑣的配置步驟以便RMAN可以在舊版本的數據庫上工作;
- 應該確保備份目錄數據庫或至少目錄數據庫中的任何目錄用戶安全,在恢復目錄中包含的信息對于數據庫備份至關重要。
練習19:創建恢復管理器目錄
本章練習講述如何創建一個恢復管理器目錄,并在新創建的目錄中注冊PRACTICE數據庫,一旦完成這些任務,就可以在RMAN命令和SQL*PLUS查詢語句來分析該目錄。
步驟一:準備目錄數據庫
回顧第2練習中我們為RMAN目錄創建了一個名為RCAT的數據庫,在實際情況中,保存恢復目錄的數據庫應該保存在于目錄中注冊的任何一個數據庫都不同的服務器上。當創建一個目錄用戶時,需要表、索引、視圖以及PL/SQL對象等的存儲控件,盡管目錄模式可以在任何表空間上創建,但最好在RCAT數據庫中創建一個獨立的表空間。

將目錄存放在獨立的表空間中,可以遷移目錄空間,導出它并從其他表空間分別備份,下一步用SQL語句創建一個包含目錄模式的用戶:
2 SQL>CREATE USER rman1010 IDENTIFIED BY rman
3 TEMPORARY TABLESPACE temp
4 DEFAULT TABLESPACE cattbs
5 QUOTA UNLIMITED ON cattbs;
6 SQL>GRANT connect, recovery_catalog_owner to rman1010;
RECOVERY_CATALOG_OWNERE是一個特殊的角色,應該只看做恢復目錄的所有者,該角色間接地向被選擇的用戶賦予許多系統特權,該用戶必須在恢復管理器創建目錄之前就存在。
步驟二:創建恢復管理器目錄
在創建該目錄之前,首先介紹幾個從操作系統提示符下運行RMAN時的命令行選項,輸入rman可以啟動RMAN,當執行RMAN時可以增加命令行參數,下表列舉了一些有用的命令行參數:
|
命令行參數 |
描 述 |
|
target |
為目標數據庫定義一個連接字符串,當連接到一個目標數據庫時,該連接是SYSDBA連接。應用戶擁有啟動和關閉數據庫的權利,必須屬于OS DBA組,必須建立一個口令文件允許SYSDBA連接 |
|
Catalog |
為一個恢復目錄用戶管理的一個連接字符串,當連接到一個目標數據庫時,該連接不是一個SYSDBA連接 |
|
Nocatalog |
特殊用法,RMAN將不應用恢復目錄,該參數與catalog參數互斥 |
|
Log/msglog |
定義包含RMAN輸出信息的文件的字符串、Log參數只能特別運行在命令行中,不能在RMAN中啟動spooling,而在SQL*PLUS的spool命令可以執行,當應用日志時,輸出的信息不再屏幕上顯示 |
|
trace |
類似log/msglog參數,將產生一個顯示RMAN輸出信息的文件,使用trace能在屏幕上顯示信息 |
|
Append |
特殊用戶,如果消息日志文件存在則將消息追加到該文件中,該參數經常和log參數聯合使用 |
當在命令行中向RMAN傳送參數時,參數值可以是引號的字符串或者是沒有引號的字符串。例如,當通過命令行定義數據庫時,下面每個命令都是一樣的:
2 SQL>rman target 'system/system@practice' #enclosed in '
3 SQL>rman target "system/system@practice" #enclosed in quotes
4 SQL>rman
5 RMAN>connect target system/system@practice
在RMAN提示符下創建一個目錄:
2 RMAN>connect catalog rman1010/rman@rcat
3 RMAN>CREATE CATALOG TABLESPACE cattbs;
在創建過程中,將創建表、索引、視圖和PL/SQL包來存儲目標數據庫的元數據,以一個目錄所有者身份通過 SQL*Plus連接可以查詢這些對象的列表
2 SQL>CONNECT rman1010/rman@rcat
3 SQL>SELECT object_name, object_type FROM user_objects;
步驟三:注冊PRACTICE數據庫
在RMAN可以對一個有目錄的數據庫操作之前,必須在該目錄中注冊該目標數據庫,在注冊期間RMAN從目標數據庫的控制文件得到目標數據庫結構信息并組裝目錄的表,例如數據庫ID、數據庫名稱、表控件、數據文件、重做日志文件以及歸檔日志文件等都保存在目錄中。
當注冊PRACTICE數據庫時,將要在同樣的RMAN會話中連接到目錄數據庫和目標數據庫,可以在RMAN提示符下應用連接命令建立這些連接,然后在目錄中注冊連接的數據庫:
2 RMAN>connect catalog rman1010/rman@rcat
3 RMAN>connect target sys/system@practice
4 RMAN>register database;
完成注冊后,rman1010目錄用戶將包括備份PRACTICE數據庫所需的所有PRACTICE數據的信息。
在RMAN提示符下,執行兩個命令可以可以提供有關當前目標數據庫狀態的信息,可以用LIST INCARNATION命令查看已經注冊的數據庫。如果多個數據庫在該目錄中注冊,則下面的命令將顯示所有這些數據庫:
使用REPORT命令可以查找當前存儲在目錄中的PRACTICE數據庫的注冊信息。
如果得到類似上面的PRACTICE數據庫,則表明已經成功將PRACTICE數據庫注冊到RCAT數據庫的目錄中了。
步驟四:為目錄再同步控制文件
當將RMAN應用到恢復目錄時,必須保持目錄信息與目標數據庫控制文件的同步,RMAN使用兩種類型的同步方式:全部和部分。
- 全部再同步將以控制文件中左右已經改變的非重用的記錄來更新目錄,非重用記錄包括數據文件、表空間以及聯機重做日志文件;
- 部分再將用控制文件中的重用記錄來更新目錄,重用記錄包括日志歷史、歸檔日志信息以及任何RMAN備份記錄。
可以用RESYNC CATALOG命令重新通過控制文件,為了進行全部再同步,RMAN將提取當前目標控制文件的一個快照拷貝。該快照控制文件確??刂莆募男畔⒃谀夸浉聲r沒有改變。該快照控制文件命名為SNCF%ORACLE_HOME%.ORA (SNCFPRACTICE.ORA是PRACTICE對應的名稱),位于%ORACLE_HOME%/database下,可以使用那個如下命令在下次再同步時將該文件轉移到其他目錄下:
2 RMAN>connect catalog rman1010/rman@rcat
3 RMAN>connect target sys/system@practice
4 RMAN> set snapshot controlfile name to 'D:\oracle\PRACTICE\snap_PRACTICE.ctl';
5 RMAN> resync catalog;
該resync命令是一個再同步的實例,一些RMAN操作會自動為目錄同步數據庫控制文件,RMAN將檢測是需要再同步還是部分再同步。如果只需要部分再同步,就不應用快照控制文件,也可以應用RESNC CATALOG命令,在這個命令中,目錄表將使用全部再同步的機制更新最新的控制文件信息。能觸發目錄部分或全部再同步的命令包括BackUp、Copy、Crosscheck 、List、Report、Delete Expired Backup Set、Dulicate、Restore、Recover和Switch。
為了解釋控制文件與目錄的同步,再打開一個命令提示并執行以下命令,重新命名一個數據文件(當完成這個測試后,可以再將該數據文件的名稱復原):
2 SQL>ALTER DATABASE DATAFILE 7 OFFLINE;
3 SQL>host move D:\oracle\PRACTICE\TS4DROP01.DBF D:\oracle\PRACTICE\TS4DROP1.DBF;
4 SQL>ALTER DATABASE RENAME FILE 'D:\oracle\PRACTICE\TS4DROP01.DBF' TO 'D:\oracle\PRACTICE\TS4DROP1.DBF';
5 SQL>ALTER DATABASE DATAFILE 7 ONLINE;
(在設置TS4DROP01數據文件為脫機時,修改其名稱為TS4DROP1)
PRACTICE數據庫的控制文件知道TS4DROP表控件數據文件的真實位置,但目錄并不知道準確的位置。當在RMAN提示符下運行report模式時,將會執行全部再同步。在report命令運行之前,RMAN自動執行目錄的再同步:
注意REPORT SCHEMA命令輸出的信息,在REPORT SCHEMA命令執行過程中,RMAN自動用目標文件檢查當前的目錄。因此,一個全部再同步就會執行,同時需要注意的是最新的信息包含在目標控制文件中,同步時將從目標控制文件向目錄傳送信息。步驟五:備份目錄用戶
要保護Oracle數據庫還應該保護目錄數據庫的內容,可以通過用戶管理或者服務器管理方法備份整個目錄數據庫,還可以經常導出目錄用戶,使用導出參數文件如下:
2 FILE = D:\oracle\CODE\chap12 \export_user_rman1010.dmp
3 LOG = D:\oracle\CODE\chap12 \export_user_rman1010.log
4 OWNER = rman1010
該應用參數文件執行導出時,可以創建一個二進制導出文件以便后來用于還原恢復目錄。

浙公網安備 33010602011771號