重建控制檔案的恢復(noresetlogs)

football2006發表於2008-07-16

一、
create table test (a int);
insert into test values(1);
insert into test values(2);
insert into test values(3);
commit;

select * from test1;
A
1 2
2 3
3 1

二、
alter database backup controlfile to trace;
udump 目錄下,最後一個檔案裡面

三、關閉資料庫、刪除控制檔案


四、建立控制檔案

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "WY" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:ORACLEPRODUCT10.2.0ORADATAWYREDO01.LOG' SIZE 50M,
GROUP 2 'D:ORACLEPRODUCT10.2.0ORADATAWYREDO02.LOG' SIZE 50M,
GROUP 3 'D:ORACLEPRODUCT10.2.0ORADATAWYREDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'D:ORACLEPRODUCT10.2.0ORADATAWYSYSTEM01.DBF',
'D:ORACLEPRODUCT10.2.0ORADATAWYUNDOTBS01.DBF',
'D:ORACLEPRODUCT10.2.0ORADATAWYSYSAUX01.DBF',
'D:ORACLEPRODUCT10.2.0ORADATAWYUSERS01.DBF',
'D:ORACLEPRODUCT10.2.0ORADATAWYXYGDATA.DBF'
CHARACTER SET ZHS16GBK

五、
SQL> alter database open;
資料庫已更改。
SQL>

六、檢查
select * from test1;
A
1 2
2 3
3 1

七、
select checkpoint_change# from v$database
select name,checkpoint_change# from v$datafile
select name,checkpoint_change# from v$datafile_header
查詢都是一樣的

八、
但是 rman的備份資訊都丟失了。
list backup為空
(確實這個試驗和rman沒有關係,不用 rman備份也行 )

九、
ORA-25153: Temporary Tablespace is Empty
select name from v$tempfile;
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:ORACLEPRODUCT10.2.0ORADATAtemp.dbf' SIZE 200M REUSE ;

十、
在create controlfiles時有用noresetlogs和resetlogs,區別:
是否重新生成日誌序列,重置聯機重做日誌

結論:

1 Noresetlogs重建控制檔案時,控制檔案中的各資料檔案的Checkpoint來自Online logs中的Current log頭。(可以用Alter session set events ‘immediate trace name redohdr level 3’;來驗證)

2 Resetlogs重建控制檔案時,控制檔案中的各資料檔案的Checkpoint來自各資料檔案頭。

其實這也比較好理解,不Resetlogs的話,當前Online log中肯定是含有最新的Checkpoint,一旦Resetlogs,說明當前Online log 不可用,也就只好從各資料檔案頭來讀取相應的Checkpoint

[@more@]

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

相關文章