【RMAN】Oracle_rman中skip引發的血案
同學發過來的問題如下:
RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of switch command at 09/28/2014 07:59:23 RMAN-20230: datafile copy not found in the repository RMAN-06015: error while looking up datafile copy name: /oracle/FIRSOUL/datafile/test2.dbf |
這個懂得資料庫或者rman的人大多能看出來,switch失敗,找不到那個檔案副本,我就看了一下備份指令碼,指令碼如下:
RMAN> run 2> { 3> allocate channel C1 type disk maxpiecesize 2G format "/oracle/backup/0/%d_%Y_%M_%D_%U.BAK"; 4> allocate channel C2 type disk maxpiecesize 2G format "/oracle/backup/0/%d_%Y_%M_%D_%U.BAK"; 5> sql 'alter system archive log current'; 6> backup incremental level=0 database plus archivelog delete input; backup current controlfile format '/oracle/backup/0/ctl_%d_%Y_%M_%D.bak'; backup spfile format '/oracle/backup/0/spfile_%d_%Y_%M_%D.bak'; 7> 8> 9> delete noprompt obsolete REDUNDANCY=2 device type disk; 10> crosscheck backup; 11> release channel C1; 12> release channel C2; 13> } |
List backup檢視,並沒有發現備份檔案6、8,檢視備份指令碼沒有跳過該檔案,但備份日誌中出現一下資訊
file 6 is excluded from whole database backup file 8 is excluded from whole database backup |
說明這兩個檔案沒有備份,那麼在set newname時,也就不能寫。那麼他之前沒有寫,但是隻寫了一個restore database,報錯如下:
Starting recover at 28-SEP-14 using channel ORA_DISK_1 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of recover command at 09/28/2014 13:37:57 RMAN-06094: datafile 6 must be restored |
既然沒有備份,那麼我還原的時候應該可以啊,備份的時候也沒有skip,怎麼就不備份了呢,透過檢視下面檢視,發現test2、test4用rman時是不備份的。但是在控制檔案資訊中也記錄著沒有備份的表空間、資料檔案資訊,所以要用skip tablespace跳過沒備份的表空間。
sys@FIRSOUL> select * from v$tablespace;
TS# NAME INC BIG FLA ENC ---------- ----------- --- --- --- --- 0 SYSTEM YES NO YES 1 SYSAUX YES NO YES 2 UNDOTBS1 YES NO YES 3 TEMP NO NO YES 4 USERS YES NO YES 5 TEST1 YES NO YES 6 TEST2 NO NO YES 7 TEST3 YES NO YES 8 TEST4 NO NO YES 9 TEST5 YES NO YES |
官方解釋如下:
Indicates whether the tablespace is included in full database
backups using the BACKUP DATABASE RMAN command (YES) or not (NO). NO only if the CONFIGURE EXCLUDERMAN command was
used for this tablespace
提示:更改及取消更改表空間是否使用rman備份語句如下,透過rman命令
CONFIGURE EXCLUDE FOR TABLESPACE 'TEST4'; CONFIGURE EXCLUDE FOR TABLESPACE 'TEST4' clear; |
完整恢復命令:
RMAN> run 2> { 3> set newname for datafile 1 to '/oracle/FIRSOUL/datafile/system01.dbf'; 4> set newname for datafile 2 to '/oracle/FIRSOUL/datafile/sysaux01.dbf'; 5> set newname for datafile 3 to '/oracle/FIRSOUL/datafile/undotbs1.dbf'; 6> set newname for datafile 4 to '/oracle/FIRSOUL/datafile/users.dbf'; 7> set newname for datafile 5 to '/oracle/FIRSOUL/datafile/test1.dbf'; 8> set newname for datafile 7 to '/oracle/FIRSOUL/datafile/test3.dbf'; 9> set newname for datafile 9 to '/oracle/FIRSOUL/datafile/test5.dbf'; 10> restore database skip tablespace test2,test4; 11> switch datafile all; 12> recover database skip tablespace test2,test4; 13> } |
關於skip [forever] tablespace 說明
Use an optional SKIPTABLESPACE 'tablespace_name' argument to avoid restoring specified tablespaces, which is useful when you want to avoid restoring tablespaces containing temporary data. If you specify SKIP FOREVER TABLESPACE, then RMAN specifies the DROP option of ALTER DATABASE DATAFILE ... OFFLINE when taking the datafiles that belong to the tablespace offline before the restore. The DROP option indicates that RMAN does not intend to recover these files and intends to drop their tablespaces from the database after the database is opened again. In other words, FOREVER indicates that RMAN never intends to do anything with the skipped tablespaces again. |
開始由於無法看到原庫或者沒有仔細看備份日誌,導致我們在還原時有些盲目,網路上的資料對於細節類的東西介紹的比較少,所以好多時候我們就會鑽裡邊出不來。以上步驟是我在測試伺服器上還原的問題,由於原庫資料量較大,每做一次測試(例如restore操作)一個下午或者一天就沒了,為了提高效率,我們應該對相應的文件、日誌仔細檢視、步驟考慮周全。其實歸根結底還是rman不熟悉造成,還有就是有些時候我們盲目去動手,一句話,日誌是個好東西啊。就一個簡單問題,可能憋的太久了,感覺還是很有興趣的,繼續加油。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29487349/viewspace-1284163/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Flutter 中由 BuildContext 引發的血案FlutterUIContext
- .Net版本引發的血案
- RestTemplate超時引發的血案REST
- JDBC亂碼引發的"血案"JDBC
- SwipeRefreshLayout 引發的一場血案
- vue watch陣列引發的血案Vue陣列
- _nop_()函式引發的血案函式
- Maven依賴版本號引發的血案Maven
- 一個 Handler 面試題引發的血案!!!面試題
- 一個map函式引發的血案函式
- 一道面試題引發的“血案”面試題
- async,await與forEach引發的血案AI
- js正則全域性匹配引發的血案JS
- 一個ES設定操作引發的“血案”
- 實戰|一個表白牆引發的“血案”
- 一場由postcss-bem引發的血案CSS
- 一個全形空格引發Jquery取值的“血案”jQuery
- #iOS AF上傳圖片引發的血案iOS
- alter index rebuild online引發的血案IndexRebuild
- 一場 Kafka CRC 異常引發的血案Kafka
- 【原創】一對雙引號引發的goldengate血案Go
- MySQL 中一個雙引號的錯位引發的血案MySql
- 一個系統BUG引發的血案 -- FKDownloader
- 斷點除錯之壓縮引發的血案斷點除錯
- Mybatis+0+null,小問題引發的血案MyBatisNull
- [WCF]缺少一行程式碼引發的血案行程
- 控制檔案不一致引發的“血案”
- mysqldump中skip-tz-utc引數介紹MySql
- 事故現場:MySQL 中一個雙引號的錯位引發的血案MySql
- 一場版本升級引發的效能血案的追凶過程
- git merge使用不當引發的程式碼丟失血案Git
- 一個由line-height引發的血案與思考
- iOS土味兒講義(一)--一個Button引發的血案iOS
- 為什麼redux要返回一個新的state引發的血案Redux
- DataSet篩選資料然後新增到新的DataSet中引發的一系列血案
- 一場由AI引發的GPU血案,AMD還有機會嗎?AIGPU
- 一個微信面試題引發的血案 --[譯] 什麼阻塞了 DOM?面試題
- 白話tornado原始碼(1):一個指令碼引發的血案原始碼指令碼