Oracle資料庫備份與恢復之RMAN
4.7 高階主題
4.7.1 使用RMAN備份集恢復DB到其他機器 (1常規方法)
用途:利用生產 DB的備份集建立測試環境或備用資料庫( 設定成相同的 DBID,不需要連線原始 DB,只需要利用 Catalog)
步驟:
1.準備工作,配置目標DB環境
在目標 DB上設定 ORACLE相關的環境變數:記下生產 DB的 ORACLE_SID,DBID $set ORACLE_SID=ming? 在目標 DB建立與生產 DB相同的目錄,將生產 DB的 pfile 檔案 FTP到目標DB,或者,在第二步中可以從備份集中進行恢復得到 PFILE.? 在目標 DB 上建立生產 DB 的 RMAN 備份集存放的目錄,沒有使用 catalog情況時這點必然保持一樣? 移植備份集(確定包含控制檔案,資料檔案,歸檔檔案)到目標 DB? 配置網路連線
2.目標DB在nomount狀態下恢復pfile 和controlfile
連線恢復目錄和目標資料庫:$ RMAN target / catalog rman/rman@rcdb RMAN > set DBID= 3324789823 RMAN > startup nomount RMAN> restore spfile to pfile ‘/home/oracle/pfile’ [from ‘backupset name’]; RMAN> restore controlfile [to 'xx '] from '/xx/ ORADB_ctl_20070111_c-xx';(控制檔案的恢復可以參考 4.4.4.6 中其他方法)
3.啟動目標DB 到 mount,在目標DB上Restore 和Recover
RMAN> alter database mount; ——可能會提示找不到密碼檔案,不用理會 如果備份集的位置改變了,需要先進行交叉校驗:RMAN> catalog start with '/newdir'; RMAN> crosscheck backup; RMAN> report schema;然後 restore / recover :RMAN> run { allocate channel ch_disk_db_1 device type disk;restore database;recover database until sequence=2412 thread=1;——最後一個 arachivelog的 sequence release channel ch_disk_db_1;
}
4.Resetlogs 開啟目標 DB
聯機日誌檔案並沒有恢復,所以需要 resetlogs SQL> alter database open resetlogs;
5.重建臨時表空間,重建密碼檔案,立即備份資料庫
重建臨時表空間:因為備份時不備份臨時檔案,v$tempfile 中查詢為空,所以可以增加一個檔案即可:SQL> alter tablespace temp add tempfile '/u05/oracle/oradata/crm/temp01.dbf' size 10M;重建密碼檔案可以通過 orapwd命令重建密碼檔案
備註:恢復時有時遇到的一個問題RMAN-03002 ORA-27064 錯誤解決辦法: 把資料檔案 resize 到 oracle 的 block size 的整數倍SQL> alter database datafile 'xxx' resize n MB;
4.7.2 使用RMAN備份集恢復DB到其他機器 (2複製方法)
使用 RMAN DUPLICATE 命令可 以在保 留目 標數 據庫 的基礎上 依靠目標 資料庫(Target Database)的備份建立一個副本資料庫(Duplicate Database) .該副本即可與目標數 據庫完全相同,也可僅包含目標資料庫表空間的一部子集。目標站點(Target Site)以及副 本站點(Duplicate Site)甚至可以在同一臺機器上。
( 生成新的唯一的 DBID,如果控制檔案中仍儲存有備份資訊,可以不連線 Catalog )
步驟:
1.準備工作,配置副本DB環境
1. 備份主資料庫(包括資料檔案、控制檔案以及所有歸檔),並把該備份集拷貝到副本 資料庫機器同樣的目錄下。
2. 拷貝主資料庫的初始化引數檔案 pfile 到副本資料庫機器上,並根據需要作相應修改,建立密碼檔案。
3. 配置主資料庫到副本資料庫的連線。
2.啟動副本資料庫到 nomount下,目錄資料庫必須MOUNT (或OPEN)
$ sqlplus /nolog SQL> conn / as sysdba SQL> startup nomount
3.執行RMAN,分別連線主資料庫與副本資料庫例項
控制檔案中儲存有備份資訊,可以不連線 Catalog
在副本資料庫上:$ rman target sys/change_on_install@MING auxiliary /
4.執行復制命令
如果沒有配置自動分配通道的話,需要手工指定至少 1 條輔助通道。
DUPLICATE命令將自動完成:將還原所有資料檔案,重新建立控制檔案,並利 用新的引數檔案啟動恢復資料庫到一致狀態,最後用 resetlog 方式開啟資料庫,並 重建 redolog
RMAN> RUN { ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;duplicate target database tocrmnofilenamecheck; RELEASE CHANNEL aux1;}
5.重建臨時表空間,立即備份資料庫
SQL> alter tablespace temp add tempfile '/u05/oracle/oradata/crm/temp01.dbf' size 10M;
附:Duplicate 複製命令的一些高階用法:
1.NOFILENAMECHECK異機恢復需要指定 NOFILENAMECHECK,可以跳過檔名檢測,避免 oracle 錯 誤的領會你的操作意圖。
2.指定PFILE如果輔助例項不是用 SPFILE啟動,需要指定 PFILE 引數,PFILE檔案必須放在執行 RMAN 的客戶端上。
3.跳過不需要複製的表空間要跳過只讀表空間,在執行 duplicate 命令時指定 SKIP READONLY 子句即可。
要跳過離線表空間,在執行 duplicate 命令之前將其置為 OFFLINE NORMAL 狀態即可,RMAN 複製時會跳過只讀或離線表空間的資料檔案。
要跳過正常的表空間,指定 SKIP TABLESPACE ts_name, …
4.恢復到以前的時間點要恢復到以前的時間點,在 duplicate 命令中指定 UNTIL TIME 'SYSDATE-1' 5.建立過程中重新命名控制檔案可以使用 restore controlfile from …;或者 dbms_backup_restore 包恢復出控制元件檔案,然後在初始化引數檔案 PFILE 中進行正確的設定。
6.建立過程中重新命名線上日誌檔案1.執行 duplicate 命名時指定 LOGFILE子句,手工設定 redo logs 檔名。 例:LOGFILE GROUP 1 ('?/oradata/newdb/redo01_1.log',
'?/oradata/newdb/redo01_2. log') SIZE 200K,)
2.副本資料庫初始化引數檔案 PFILE中設定 LOG_FILE_NAME_CONVERT LOG_FILE_NAME_CONVERT = 'string1' , 'string2' , 'string3' , 'string4' , ……;將 strin1 替換為 string2,string3 替換為 string4 7.建立過程中重新命名資料檔案,或改變資料庫檔案的新的路徑1.在初始化引數中重新命名:DB_FILE_NAME_CONVERT=‘xxxx’,‘yyyy’2.在 Duplicate Duplicate Duplicate 命令中重新命名資料檔案: duplicate target database to newdb DB_FILE_NAME_CONVERT=('xxxx', 'yyyyy ');3.使用 SET NEWNAME 命令重新命名資料檔案SET NEWNAME FOR DATAFILE 1 TO '/xxx/xxx.dbf';4.使用 CONFIGURE AUXNAME 命令重新命名資料檔案CONFIGURE AUXNAME FOR DATAFILE 1 TO '/xxxx/xxx.dbf';5.重新命名臨時檔案路徑SET NEWNAME FOR TEMPFILE '/xxx/xxx.dbf' TO '/yyy/xxx.dbf';
例:一個比較複雜的複製命令如下:
RMAN> RUN {
allocate auxiliary channel newdb1 device type sbt;
duplicate target database to newdb
DB_FILE_NAME_CONVERT=('/h1/oracle/dbs/trgt/','/h2/oracle/oradata/newdb/')
UNTIL TIME 'SYSDATE-1' # specifies incomplete recovery
SKIP TABLESPACE cmwlite, drsys, example # skip desired tablespaces
PFILE = ?/dbs/initNEWDB.ora
LOGFILE
GROUP 1 ('?/oradata/newdb/redo01_1.log',
'?/oradata/newdb/redo01_2. log') SIZE 200K,
GROUP 2 ('?/oradata/newdb/redo02_1. log'',
'?/oradata/newdb/redo02_2. log'') SIZE 200K
GROUP 3 ('?/oradata/newdb/redo03_1. log'',
'?/oradata/newdb/redo03_2. log'') SIZE 200K REUSE;
}
4.7.3 表空間時間點恢復(TSPITR)
使用者可能錯誤的刪除了幾個表,而且還截斷了幾個表,如果進行整庫恢復可能代價比較
高,這時,我們可以執行表空間時間點恢復(tablespace point-in-time recovery, TSPITR)。
為了掌握如何執行 TSPITR,應該理解下面這些術語:輔助例項(auxiliary instance): 這是我們建立的臨時例項,RMAN 使用這個例項執行TSPITR.完成 TSPITR 後,這個例項可以刪除。
輔助集(auxiliary set): 輔助例項上的檔案集。包括控制檔案、回滾段或者重做段的表空間、系統表空間、聯機日誌檔案等,還可以選擇輔助例項的臨時表空間。
恢復集(recovery set): 要執行 TSPITR 的表空間/資料檔案集目標資料庫: 實際執行 TSPITR 的資料庫
TSPITR 的本質是,RMAN 將要進行時間點恢復的表空間按照設定的條件恢復到輔助例項上,然後再從輔助例項將表空間傳到目標資料庫,從而避免整個資料庫的恢復,減少恢 復時間,而且這期間其他表空間仍然可用。( 使用者管理的備份與恢復也可以使用 TSPITR)
檢查TSPITR之後丟失的物件,被丟失物件資訊的獲取:SQL> Select owner, name From TS_PITR_OBJECTS_TO_BE_DROPPED Where tablespace_name = 'USER01' And creation_time > to_date( '2004-09-27 11:25:21', 'yyyy-mm-dd hh24:mi:ss' );進行TSPITR 的基本步驟是(與有些書上的步驟略有不同):(0) 檢查需要恢復的表空間的資料檔案備份和控制檔案備份是否存在(1) 驗證表空間的可傳輸性(2) 準備輔助例項(3) 執行實際的 TSPITR(4) 在目標資料庫上執行 TSPITR 後的操作。
1.驗證表空間的可傳輸性
RMAN 使用 Oracle 可傳送的表空間特性來執行 TSPITR,因此表空間本身必須是可傳送的。許多因素都導致表空間不可傳送。
TSPITR 限制不能還原包含 SYS 使用者物件不能執行 TSPITR 恢復具有複製主表的表空間 不支援使用快照日誌的表空間 不能還原含有回滾段的表空間不能還原含有分割槽物件(該物件的分割槽跨越多個表空間)的表空間表空間中不能含有 VARRAY、巢狀表、外部表物件TSPITR 不能用於恢復刪除的表空間。
可以通過 TS_PITR_CHECK 檢視來判斷表空間是否可傳送。如果表空間不可傳送,那 麼執行 TSPITR 時就會失敗。下面是查詢 USERS 表空間是否可傳送的語句:SQL> SELECT OBJ1_NAME "Object Owner",obj1_name "Object Name", obj1_type "Object Type",ts1_name "Tablespace Name",reason FROM TS_PITR_CHECK WHERE ts1_name='USERS';如果未選定行,說明 USERS 表空間可傳輸。
2.準備TSPITR 的輔助例項 (AUXILIARY INSTANCE)
啟動 TSPITR 之前,需要準備輔助例項。這是一個不需要 RMAN 參與的手工過程。執行下面的步驟來建立輔助例項:u 建立口令檔案u 建立輔助例項的引數檔案: 編輯輔助例項引數檔案的一個簡單方法是把目標資料庫的引數檔案改一下即可。如果目標資料庫用的是 SPFILE,那麼在 SQLPLUS 中執行 CREATE PFILE FROM SPFILE 就可以生成引數檔案。
注意:control_files 設定為輔助例項上的檔名db_name = 目標例項lock_name_space 如果輔助例項與目標資料庫同一主機,必須設定 instance_name service_names 取一新名,如 AUX db_file_name_convert 資料檔名的轉換log_file_name_convert 日誌檔名的轉換註釋掉 log_archive_start 引數u 如果在 Windows NT 上執行 Oracle,需要使用 oradim 來新增資料庫服務u 啟動輔助例項,如有必要,配置 tnsnames.ora,測試是否連通。
3.執行實際的TSPITR
例子: 恢復使用者誤刪除的某個重要的表。將例項 MING 的 USERS 表空間恢復到 SCN是 3818161 的時候。
啟動輔助例項:C:\>SET ORACLE_SID=AUX1 C:\>SQLPLUS /NOLOG SQL> CONNECT / AS SYSDBA SQL> STARTUP NOMOUNT;請注意,SET ORACLE_SID=AUX1 很重要,這樣就可以不用配置 TNSNAMES.ORA執行實際的TSPITR 首先要連到目標資料庫和輔助例項。可以聯到恢復目錄,也可以不連到恢復目錄: C:\> SET ORACLE_SID=AUX1 C:\> RMAN TARGET /@MING CATALOG RMAN/RMAN@RECO AUXILIARY / RMAN> RECOVER TAB LESPACE USERS UNTIL SCN 233646;…
等待完成表空間的恢復。當然也可以用 UNTIL TIME 或者 UNTIL SEQUENCE 子句,例:RMAN> run { allocate auxiliary channel c1 device type disk;recover tablespace user02 until logseq 9;}
( 這裡有些版本有一個 ORACLE的 BUG,執行到最後可能會報錯,需要打補丁 ?? )
可以改變輔助集/恢復集資料檔案的位置和名稱:set newname for datafile 5 to 'c:\demo\user01.dbf';configure auxname for datafile 1 to '/backup/xxx.dbf‘;在初始化引數檔案中用 DB_FILE_NAME_CONVERT 進行轉換
10g 中增加了auxiliary destination ,更方便RMAN> recover tablespace user01 until logseq 19 auxiliary destination 'd:\auxiliary';
4.執行TSPITR 後的操作首先應該重新連線 RMAN與目標資料庫,並且備份剛恢復的表空間。完成備份後,需要將表空間聯機(RMAN 在 TSPITR 後使表空間離線)。最後,我們還要關閉或刪除輔 助資料庫。
4.7.4 塊媒體恢復 Block Media Recovery (BMR)
產生塊損壞的原因一般是間斷或隨機的 I/O 錯誤或者是記憶體的塊錯誤。要恢復的壞塊 資訊可以從報警與跟蹤檔案,表與索引的分析,DBV 工具或第三方媒體管理工具以及具體 的查詢語句中獲得。
1. DBV 工具 dbv file=EYGLE.DBF blocksize=8192 2. RMAN> backup validatedatafile 4; —— 或者 BACKUP VALIDATE DATABASE備份的 壞 塊 資訊 儲存在 V$BACKUP_CORRUPTION 、 V$COPY_CORRUPTION 和V$DATABASE_BLOCK_CORRUPTION 檢視中。
V$BACKUP_CORRUPTION 顯示歷史訛誤的檢視 V$DATABASE_BLOCK_CORRUPTION 顯示當前資料塊訛誤的檢視。 一旦修正了資料庫的塊訛誤,就需要重新執行 BACKUP VALIDATE DATABASE 命令,然後確認 V$DATABASE_BLOCK_CORRUPTION 中沒有其他訛誤。
RMAN 可以備份包含損壞資料塊的資料檔案,通過設定 set maxcorrupt 可以跳過指定個數的壞塊來避免備份失敗。
RMAN> set maxcorrupt for datafile 1 to 0;在 Oracle9i中可以用 RMAN來執行塊級的恢復,而且恢復期間資料檔案可以是聯機狀 態。RMAN通過 Block Media Recovery(簡稱 BMR)來執行塊級恢復操作。假設我們在查詢一個 Oracle 表的時候接收到下面的錯誤:ERROR 位於第 1 行:ORA-01578: ORACLE 資料塊損壞(檔案號 5,塊號 97)
ORA-01110: 資料檔案 5: 'E:\xxxx.dbf'那麼我們就可以在 RMAN中用 BLOCKRECOVER 命令來修復:RMAN> BLOCKRECOVER DATAFILE 5 BLOCK97; 啟動 blockrecover 於 03-9月 -06 正在啟動全部恢復目錄的 resync完成全部 resync使用通道 ORA_DISK_1通道 ORA_DISK_1: 正在從資料檔案副本 E:\xxxx.bak 恢復塊
正在開始介質的恢復完成介質的恢復完成 blockrecover 於 03-9月 -06
恢復V$DATABASE_BLOCK_CORRUPTION 檢視中列出的壞塊:RMAN> blockrecover corruption list [ restore until time 'sysdate - 10' ];恢復指定壞塊:RMAN> blockrecover datafile 2 block 12,13 datafile 9 block 19;RMAN> blockrecover tablespace system dba 44404,44405 from tag "weekly_backup"; RMAN> blockrecover tablespace system dba 44404,44405 restore until time 'sysdate-2';
4.7.5 使用恢復目錄恢復前一個對應物
在不完全恢復完成之後,通常需要使用 resetlogs 選項來開啟資料庫。resetlogs 表示 一個資料庫邏輯生存期的結束和另一個資料庫邏輯生存期的開始。資料庫的邏輯生存期 也被稱為一個對應物(incarnation)。每次使用 resetlogs 選項來開啟資料庫後都會建立一個 新的資料庫對應物。
使用 RMAN可以進行穿越 resetlogs 的恢復,即可以恢復到前一個對應物。10g 版本 增強了這方面的功能。
(1) 使用恢復目錄的情況使用恢復目錄的情況下,恢復前一個對應物是非常簡單的。首先,用list incarnation;來顯示有哪些對應物:RMAN> list incarnation;
資料庫&nbs
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16486600/viewspace-522838/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫備份與恢復之RMAN2Oracle資料庫
- rman資料庫全庫備份與恢復資料庫
- RMAN備份與恢復之加密備份加密
- oracle資料庫的備份與恢復Oracle資料庫
- 備份與恢復:polardb資料庫備份與恢復資料庫
- Oracle備份與恢復系列(四)續 RMAN Duplicate複製資料庫Oracle資料庫
- oracle之rman恢復資料庫Oracle資料庫
- ORACLE DG從庫 Rman備份恢復Oracle
- Oracle資料庫的備份與恢復(轉)Oracle資料庫
- Oracle 資料庫的備份與恢復(轉)Oracle資料庫
- 【備份恢復】RMAN catalog 恢復目錄資料庫資料庫
- 【備份恢復】Oracle 資料備份與恢復微實踐Oracle
- RMAN備份恢復典型案例——資料庫卡頓資料庫
- 非RMAN熱備份資料庫和恢復資料庫
- Oracle資料庫備份與恢復之三:OS備份/使用者管理的備份與恢復Oracle資料庫
- 【備份恢復】從備份恢復資料庫資料庫
- 循序漸進oracle第7章:備份與恢復之RMAN的簡單備份與恢復Oracle
- ORACLE RAC資料庫的備份與恢復(6)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(5)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(4)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(3)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(2)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(1)Oracle資料庫
- RMAN備份恢復——RAC環境資料庫的備份(zt)資料庫
- RMAN備份恢復--RAC環境資料庫的備份(十)資料庫
- RMAN備份恢復——RAC環境資料庫的備份(一)資料庫
- rman備份恢復-rman恢復資料檔案測試
- Oracle 備份恢復篇之RMAN catalogOracle
- postgresql備份與恢復資料庫SQL資料庫
- mongo資料庫備份與恢復Go資料庫
- 資料庫的備份與恢復資料庫
- Informix資料庫備份與恢復ORM資料庫
- Oracle資料庫的備份與恢復方式比較Oracle資料庫
- Oracle資料庫備份與恢復的三種方法Oracle資料庫
- oracle資料庫備份與恢復 a piece of cake (4)(轉)Oracle資料庫
- Oracle DG從庫 Rman備份恢復測試Oracle
- Oracle資料庫備份與恢復之匯出/匯入(EXP/IMP)、熱備份和冷備份Oracle資料庫
- 資料庫備份恢復資料庫