控制檔案快照和rman利用快照恢復

shilei1發表於2015-09-09

Oracle中有對控制檔案快照,windows中預設的儲存在oracle_homedatabasesncf.oralinux下預設的儲存在oracle_home/dbs/snapcf.ora,這個控制檔案快照可以用於資料庫恢復。

rman需要同步控制檔案資訊或者備份當前控制檔案時,控制檔案快照會自動備份。

Rman target /

Rman>backup current controlfile format ‘d:control.ctl’;

可以檢視具體的控制檔案和控制檔案快照備份資訊

Windows下直接可以直接檢視備份的控制檔案屬性檢視和控制檔案快照的預設位置查詢。Linux下可以ls檢視具體的控制檔案備份集和會控制檔案快照的檔案資訊,由於是在我的windows伺服器下測試,發現此時控制檔案快照的修改時間比控制檔案備份的時間早,也正好驗證:在rman備份控制檔案後,rman進行更新控制檔案的快照。(循序漸進中提到備份控制檔案之前更新快照資訊,但是測試發現快照的更新時間是在備份控制檔案之後的。)

快照的生成還和rman設定有關,當configure controlfile autobackup off開啟時

Rman>backup database;

。。。

Including current controlfile in backupset

Including current spfile in backupset

。。。

此時全備份資料庫會把當前controlfilespfile自動備份,由於controlfile的備份發生在備份集中,rman又會更新控制檔案的快照,此時這個快照優先與備份集產生,因此無法作用於最後一次備份集的恢復。

Rman>Restore controlfile to ‘d:test.ctl’ from ‘oracle_homedatabasesncf.ora’

我們可以透過控制檔案快照恢復一個控制檔案,由於此時恢復的控制檔案不包含上次的備份資訊,因為快照的備份發生在全備份之前,沒有記錄資料庫的全備份到快照中。

Rman>Restore database;

此時如果恢復的controlfile中有備份資訊是可以恢復之前的備份集,如果沒有當前rman什麼都做不了了。

如果開啟oracle的控制檔案自動備份功能。此時當資料庫發生變化,例如增加 刪除表空間 資料檔案等,發生資料庫備份等oracle都會更新控制檔案資訊,此時又會發生控制檔案自動備份。

Rman>configure controlfile autobackup on

Rman>backup database;

。。。

Finish backup at 2011-8-30 10:50:49

Starting controlfile file and spfile autobackup

。。。

Finish backup at 2011-8-30 10:50:56

此時如果檢視rman中的備份資訊是可以發現oracle先對資料庫進行全備份,但是此時並沒有包括當前的控制檔案和spfile。然後全庫備份完畢後oracle又會對控制檔案和spfile進行備份,此時備份的控制檔案中就包含此次全庫備份的資訊。同樣控制檔案的備份又會觸發控制檔案快照的備份,且都是來自備份集之後,所以包含此次備份資訊。

下面測試一下快照用於資料庫的恢復。一下測試基本是按照eygle循序漸進中進行,經個人試驗確實成功

1 首先建立測試表,編寫儲存過程insert ashuang

Sql>begin

for i in 1..4 loop

insert into ashuang values(i,sysdate,dbms_flashback.get_system_change_number);

commit;

execute immediate 'alter system switch logfile';

dbms_lock.sleep(3);

end loop;

end;

/*dbms_lock.sleep(n)程式暫停3秒,一般grant execute on dbms_lock to USERNAME讓使用者擁有此許可權才能使用*/

2 檢視ashuang中的scn用於以後不完全恢復

Select * from ashuang.;

Id edate escn

1 2011-8-30 13:51:00 344115

1 2011-8-30 13:51:47 344134

2 2011-8-30 13:51:50 344138

3 2011-8-30 13:51:53 344142

4 2011-8-30 13:52:01 344149

1 2011-8-30 13:50:01 344086

3 意外關閉資料庫

Rman>Shutdown abort

然後刪除所有的控制檔案和資料檔案

4 開始資料庫恢復

Rman>startup nomount

如果連spfile也不見了,可以用rman target / 啟動預設例項到nomount然後restore spfile from ‘X’指定備份集恢復spfile

Rman>restore controlfile from ‘d:oracleproduct10.1.0databasesncf.ora’;

指定快照用於恢復控制檔案,當然也可以指定控制檔案備份集restore controlfile from ‘Y’

Rman>alter database mount;

Rman>run{

Allocate channel d1 device type disk;

Set until scn 344145

Restore database;

Recover database;

}

5 resetlogs 開啟資料庫

因為使用備份的控制檔案快照用於恢復控制檔案

Rman>alter database open resetlogs

Select * from ashuang;

此次就完成了資料庫的一次不完整恢復,當然如果當前log redo沒有丟失,資料庫是可以指定完成恢復的。也可以指定until time ‘2011-8-30 10:00:00’讓資料庫恢復到某個時間點。

[@more@]

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

相關文章