第十二章、RMAN 高階恢復主題 + 第13 章、從使用者錯誤中恢復,閃回技術

紅葉DBA發表於2011-02-27

第十二章、RMAN 高階恢復主題

1.          Resetlogs 表示一個邏輯生存期的結束和另一個邏輯生存期的開始,每次使用resetlogs 時,SCN 不會被重置,不過會重置其他計數器,如日誌序列,同時還會重置聯機重做日誌的內容(如果必要,還可以重新建立聯機日誌)。

2.        基於時間點的不完全恢復:

Run{

Set until  time to_date( date ,format );

Restore database;

Recover database;

Alter database open resetlogs;

}

Startup mount;

Restore database until time  to_date( date ,format );

recover database until time  to_date( date ,format );

alter database open resetlogs;

3.        基於SCN 的不完全恢復(不包含指定的SCN ):

Restore database until scn 10000;

Recover database until scn 10000;

4.        基於日誌序列的不完全恢復:

Restore database until sequence 111 thread 1;

Recover database until sequence 111 thread 1;

5.        只讀表空間的恢復:

預設情況下,RMAN restore 時不會還原只讀的資料檔案,要想恢復,必須指定:

Restore database check readonly;

Recover tablespace recover datafile 時,不管是否是隻讀的,都會執行恢復。

6.        歸檔日誌還原:

Restore archivelog all;

Restore archivelog from logseq=22 thread=1;

Restore archivelog from logseq=22 until logseq=33 thread=1;

Run{

Set archivelog destination to  location ;      (將歸檔日誌還原到新位置)

Restore archivelog all;

}

如果RMAN 認為一個歸檔重做日誌已經存在,則不管是否指定了新的位置,都不會在磁碟上還原這個歸檔日誌檔案。

7.        從資料檔案副本的還原:

Sql  alter database datafile 5/ xxx  offline ;

Restore (datafile 5) from datafilecopy;  (圓括號很重要!)

Recover datafile 5;

Sql  alter database datafile 5/ xxx  online ;

8.        塊介質恢復(Block Media Recover BMR ):

u  Blockrecover datafile 19 block 44;

u  Blockrecover datafile 19 block 44,55,66;

u  Blockrecover datafile 19 block 44 datafile 20 block 55 datafile 21 block 66;

9.        Backup validate database 命令會在v$backup_corruption v$database_block_corruption 檢視中留下壞塊記錄,v$backup_corruption 記錄的是歷史錯誤資訊,v$database_block_corruption 記錄的是當前錯誤資訊,如果塊錯誤發生在複製期間,則在v$copy_corruption 檢視中留下記錄。

10.     批量修改壞塊(還原最近天的所有壞塊):

blockrecover corruption list restore until time  sysdate-5 ;

11.        恢復到resetlogs 之前(incarnation 恢復):

u  檢視歷史incarnation 記錄:list incarnation;

u  使用catalog 恢復到resetlogs 之前:

Startup force nomount;

Reset database to incarnation 2;

Restore controlfile;

Restore database until scn xxx; xxx 為恢復到的resetlog scn-1 

Recover database until scn xxx;

Alter database open resetlogs;

u  不使用catalog 恢復到resetlogs 之前(步驟類似,但是要確保當前控制檔案中,包含要恢復到的incarnation 的資訊)。

12.     表空間時間點恢復(TSPITR ):

n  確定要恢復到的時間點:這是非常重要的,在nocatalog 中,表空間的恢復是一次性的過程,如果恢復了錯誤的時間點,則不能重新來過,但是在catalog 中就沒有這個限制。

n  確保表空間中的物件是自包含的:可以從ts_pitr_check 檢視是否和其他表空間有關聯,或者某些限制,如果沒有返回任何行,則不存在衝突。

n  儲存可能在恢復中丟失的物件或者資料:可以從ts_pitr_objects_to_be_dropped 檢視檢視可能在恢復期間丟失的物件。

n  執行實際的TSPITR

Recover tablespace xxx until time  to_date( date ,format ) auxiliary destination  location ;

Sql  alter tablespace xxx online ;

刪除輔助例項:

SQL*Plus 中:exec dbms_backup_recovery.manageauxinstance( aux_sid ,1);

n  自定義選項:

Set newname 設定單個檔案的新位置和名稱。

Configure auxname 定義輔助例項的名稱。

Set auxiliary instance parameter file 指示輔助例項的引數檔案路徑,或者通過在/rdbms/admin 中建立parms_auxint.ora 檔案來實現同樣的功能。

n  手工執行的TSPITR

u  建立輔助例項步驟:1、建立口令檔案;、建立引數檔案;NT OS 上新增服務,Linux/Unix 中跳過;、啟動例項,檢查網路。

u  Run{

Set until time  to_date( date ,format );

Restore clone controlfile;

Sql clone  alter database mount clone database ;

Sql  alter system archive log current ;

}

u  TSPITR 需要的相關檔案:1System 表空間;undo 表空間;temp 表空間;、將要還原的表空間。

u  將執行恢復的表空間離線:sql  alter tablespace xxx offline for recover ;

u  Run{

Set until time  to_date( date ,format );

Set newname for clone datafile 1 to new/xxx;     (如果是OMF ,則可使用new 

Set newname for clone tempfile 1 to xxx;

Set newname for clone datafile 7 to  location ;  (這裡用真檔名,用於恢復)

Switch clone tempfile all;

Restore datafile 1,2,7;

Switch clone datafile all;

Sql clone  alter database datafile 1 online ;

Sql clone  alter database datafile 2 online ;

Sql clone  alter database datafile 7 online ;

Sql clone  alter database mount clone database ;

}

u  Run{

Set until time  to_date( date ,format );

Recover clone database tablespace  xxx ,xxx ,xxx  delete archivelog;

Alter clone database open resetlogs;

}

u  將後設資料從副本資料庫中匯出:

exp  sys/pwd  as sysdba point_in_time_recover=y tablespace=xxx file=xxx

u  關閉副本資料庫,然後將後設資料匯入到目標資料庫:

Imp  sys/pwd  as sysdba point_in_time_recover=y file=xxx

u  最後,將目標資料庫中的還原表空間聯機,恢復完成:

Alter tablespace xxx online;

u  善後工作:刪除輔助資料庫,備份剛恢復的表空間。

13.     TSPITR 的限制:

l  不能恢復包含sys 使用者特有物件的表空間,即表空間中不能有sys 物件;

l  不能恢復含有複製主表的表空間;

l  不支援使用快照日誌的表空間;

l  不能還原含有回滾段的表空間;

l  不能回覆含有下面型別物件的表空間:varray 、巢狀表、外部檔案。

l  不能用於恢復刪除的表空間,也不能恢復舊的物件統計表;

l  若沒有使用catalog ,則回滾段在恢復期間不能發生變化;

l  若沒有使用catalog ,則TSPITR 後,前面的備份就不能使用了,需要再次備份,才能執行下一個TSPITR 操作。

14.     驗證備份的可恢復性:

l  Restore database preview [recall];

l  Restore database validate;

l  Restore database check logical validate;      (除了驗證可恢復性,還會檢查邏輯錯誤,並且填充v$database_block_corruption 檢視)

l  檢查特定的備份集:validate backupset 11 [check logical];

15.     跨平臺的資料庫移動:可通過v$transportable_platform 檢視來確定不同系統的尾數格式(endian format )。

l  源站點上轉換:convert tablespace  xxx to platform. platform_name 

Db_file_name_convert= C:\old_dir ,C:\new_dir ;

l  目標站點轉換“convert datafile= C:\xxx\*  from platform. platform_name 

Db_file_name_convert= c:\old_dir ,C:\new_dir ;

l  跨平臺移動步驟:

u  以只讀方式開啟資料庫:

startup mount;

alter database open read only;

u  檢查資料庫狀態:

declare

db_ready boolean;

begin

db_ready:=dbms_tdb.check_db('platform_name',dbms_tdb.skip_readonly);

end;

/

u  標識外部物件:

declare

db_external boolean;

begin

db_external:=dbms_tdb.check_external;

end;

/

u  使用RMAN convert database 命令產生指令碼

Convert database new database  xxx  transport script. script_dir  to platform.  planform_name ;

 

13 章、從使用者錯誤中恢復,閃回技術

16.     如果啟用表空間或資料檔案的自動擴充套件,那麼回收站物件空間就會在自動擴充套件之前被刪除,從而釋放空間。

17.     閃回資料庫需要一種新的型別的日誌,閃回日誌,必須要在FRA 中儲存閃回日誌,不能再其他別的地方建立閃回日誌。

18.     一旦啟動了flashback database Oracle 就會跟蹤閃回日誌,並在v$flashback_database_log 中留下記錄(該檢視中只有一條彙總的記錄),若要檢視閃回日誌的具體活動,可檢視v$flashback_database_stat 檢視,該檢視提供了一段時間內閃回日誌的相關資訊(一般是從sysdate 向後擴充套件一小時的記錄)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24465008/viewspace-688023/,如需轉載,請註明出處,否則將追究法律責任。

相關文章