重建控制檔案, 資料檔案檢查點SCN到底來自哪裡?
Oracle 10.2.0.4 , windows 2003
關於重建控制檔案後, 控制檔案中的資料檔案檢查點SCN來自哪裡, 有下面兩種說法 :
1. 用noresetlogs重建控制檔案時,控制檔案中datafile checkpoint SCN來自online logs 中的current log頭部,選擇noresetlogs重建使得控制檔案最新。 如記錄了最新的聯機日誌和日誌序號。
2. 用noresetlogs重建控制檔案後,這時查詢v$log中的current redo log的first_change# 及v$database中的系統檢查點SCN, 發現重建的控制檔案中的系統檢查點SCN從當前redo log的low SCN獲得, 而控制檔案裡記錄的資料檔案檢查點SCN(v$datafile)從資料檔案頭部(v$datafile_header)獲得.
測試發現重建控制檔案後, 更新到新建控制檔案中的系統檢查點SCN及資料檔案檢查點SCN 好象都是來自於資料檔案頭的scn .
測試 :
SQL> insert into tony.test values (11,'CMM');
SQL> insert into tony.test values (12,'CMM');
SQL> commit;
提交完成。
SQL> alter database backup controlfile to trace ;
資料庫已更改。
SQL> insert into tony.test values (13,'CMM');
SQL> insert into tony.test values (14,'CMM');
SQL> commit;
提交完成。
SQL> alter system switch logfile;
SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
正常關閉資料庫後,模擬手工刪除控制檔案。
SQL> host del D:\oracle\product\10.2.0\oradata\test01\CONTROL01.CTL
SQL> host del D:\oracle\product\10.2.0\oradata\test01\CONTROL02.CTL
SQL> host del D:\oracle\product\10.2.0\oradata\test01\CONTROL03.CTL
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 524288000 bytes
Fixed Size 1249920 bytes
Variable Size 159387008 bytes
Database Buffers 356515840 bytes
Redo Buffers 7135232 bytes
ORA-00205: ?????????, ??????, ???????
從tracefile中提出指令碼重建控制檔案。
SQL> CREATE CONTROLFILE REUSE DATABASE "TEST01" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\REDO01.LOG' SIZE 50M,
9 GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\REDO02.LOG' SIZE 50M,
10 GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\REDO03.LOG' SIZE 50M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\SYSTEM01.DBF',
14 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\UNDOTBS01.DBF',
15 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\SYSAUX01.DBF',
16 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\USERS01.DBF'
17 CHARACTER SET AL32UTF8
18 ;
控制檔案已建立。
SQL> select group#, first_change# from v$log where status='CURRENT' ;
GROUP# FIRST_CHANGE#
---------- -------------
1 902875 -- 在current redo log中的 LOW SCN
SQL> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
903181 -- 更新到新建控制檔案中的系統檢查點SCN
這時控制檔案中的資料檔案檢查點SCN 如下 CHECKPOINT_CHANGE# :
SQL> select file# , CHECKPOINT_CHANGE#, LAST_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
1 903181 903181
2 903181 903181
3 903181 903181
4 903181 903181
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 903181 -- 資料檔案頭中的檢查點SCN
2 903181
3 903181
4 903181
SQL> alter database mount;
SQL> select group#, first_change# from v$log where status='CURRENT' ;
GROUP# FIRST_CHANGE#
---------- -------------
3 903182
SQL> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
903565
SQL> select file# , CHECKPOINT_CHANGE#, LAST_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
1 903565 903565
2 903565 903565
3 903565 903565
4 903565 903565
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 903565
2 903565
3 903565
4 903565
SQL> recover database using backup controlfile;
ORA-00279: 更改 903565 (在 04/27/2011 11:56:24 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00003_0749482512.001
ORA-00280: 更改 903565 (用於執行緒 1) 在序列 #3 中
指定日誌: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 無法開啟歸檔日誌
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00003_0749482512.001'
ORA-27041: 無法開啟檔案
OSD-04002: ???????
O/S-Error: (OS 2) ????????????????
ORA-00308: 無法開啟歸檔日誌
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00003_0749482512.001'
ORA-27041: 無法開啟檔案
OSD-04002: ???????
O/S-Error: (OS 2) ????????????????
SQL> select group#, first_change# from v$log where status='CURRENT' ;
GROUP# FIRST_CHANGE#
---------- -------------
3 903182
SQL> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
903565
SQL> select file# , CHECKPOINT_CHANGE#, LAST_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
1 903565
2 903565
3 903565
4 903565
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 903565
2 903565
3 903565
4 903565
SQL>
SQL> recover database using backup controlfile;
ORA-00279: 更改 903565 (在 04/27/2011 11:56:24 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00003_0749482512.001
ORA-00280: 更改 903565 (用於執行緒 1) 在序列 #3 中
指定日誌: {=suggested | filename | AUTO | CANCEL}
D:\oracle\product\10.2.0\oradata\test01\REDO03.LOG
已應用的日誌。
完成介質恢復。
SQL>
SQL> select group#, first_change# from v$log where status='CURRENT' ;
GROUP# FIRST_CHANGE#
---------- -------------
3 903182
SQL> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
903565
SQL> select file# , CHECKPOINT_CHANGE#, LAST_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
1 903566 903566
2 903566 903566
3 903566 903566
4 903566 903566
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 903566
2 903566
3 903566
4 903566
SQL> alter database open resetlogs ;
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\TEMP01.DBF'
2 SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
關於重建控制檔案後, 控制檔案中的資料檔案檢查點SCN來自哪裡, 有下面兩種說法 :
1. 用noresetlogs重建控制檔案時,控制檔案中datafile checkpoint SCN來自online logs 中的current log頭部,選擇noresetlogs重建使得控制檔案最新。 如記錄了最新的聯機日誌和日誌序號。
2. 用noresetlogs重建控制檔案後,這時查詢v$log中的current redo log的first_change# 及v$database中的系統檢查點SCN, 發現重建的控制檔案中的系統檢查點SCN從當前redo log的low SCN獲得, 而控制檔案裡記錄的資料檔案檢查點SCN(v$datafile)從資料檔案頭部(v$datafile_header)獲得.
測試發現重建控制檔案後, 更新到新建控制檔案中的系統檢查點SCN及資料檔案檢查點SCN 好象都是來自於資料檔案頭的scn .
測試 :
SQL> insert into tony.test values (11,'CMM');
SQL> insert into tony.test values (12,'CMM');
SQL> commit;
提交完成。
SQL> alter database backup controlfile to trace ;
資料庫已更改。
SQL> insert into tony.test values (13,'CMM');
SQL> insert into tony.test values (14,'CMM');
SQL> commit;
提交完成。
SQL> alter system switch logfile;
SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
正常關閉資料庫後,模擬手工刪除控制檔案。
SQL> host del D:\oracle\product\10.2.0\oradata\test01\CONTROL01.CTL
SQL> host del D:\oracle\product\10.2.0\oradata\test01\CONTROL02.CTL
SQL> host del D:\oracle\product\10.2.0\oradata\test01\CONTROL03.CTL
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 524288000 bytes
Fixed Size 1249920 bytes
Variable Size 159387008 bytes
Database Buffers 356515840 bytes
Redo Buffers 7135232 bytes
ORA-00205: ?????????, ??????, ???????
從tracefile中提出指令碼重建控制檔案。
SQL> CREATE CONTROLFILE REUSE DATABASE "TEST01" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\REDO01.LOG' SIZE 50M,
9 GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\REDO02.LOG' SIZE 50M,
10 GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\REDO03.LOG' SIZE 50M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\SYSTEM01.DBF',
14 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\UNDOTBS01.DBF',
15 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\SYSAUX01.DBF',
16 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\USERS01.DBF'
17 CHARACTER SET AL32UTF8
18 ;
控制檔案已建立。
SQL> select group#, first_change# from v$log where status='CURRENT' ;
GROUP# FIRST_CHANGE#
---------- -------------
1 902875 -- 在current redo log中的 LOW SCN
SQL> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
903181 -- 更新到新建控制檔案中的系統檢查點SCN
這時控制檔案中的資料檔案檢查點SCN 如下 CHECKPOINT_CHANGE# :
SQL> select file# , CHECKPOINT_CHANGE#, LAST_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
1 903181 903181
2 903181 903181
3 903181 903181
4 903181 903181
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 903181 -- 資料檔案頭中的檢查點SCN
2 903181
3 903181
4 903181
SQL> alter database mount;
SQL> select group#, first_change# from v$log where status='CURRENT' ;
GROUP# FIRST_CHANGE#
---------- -------------
3 903182
SQL> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
903565
SQL> select file# , CHECKPOINT_CHANGE#, LAST_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
1 903565 903565
2 903565 903565
3 903565 903565
4 903565 903565
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 903565
2 903565
3 903565
4 903565
SQL> recover database using backup controlfile;
ORA-00279: 更改 903565 (在 04/27/2011 11:56:24 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00003_0749482512.001
ORA-00280: 更改 903565 (用於執行緒 1) 在序列 #3 中
指定日誌: {
auto
ORA-00308: 無法開啟歸檔日誌
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00003_0749482512.001'
ORA-27041: 無法開啟檔案
OSD-04002: ???????
O/S-Error: (OS 2) ????????????????
ORA-00308: 無法開啟歸檔日誌
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00003_0749482512.001'
ORA-27041: 無法開啟檔案
OSD-04002: ???????
O/S-Error: (OS 2) ????????????????
SQL> select group#, first_change# from v$log where status='CURRENT' ;
GROUP# FIRST_CHANGE#
---------- -------------
3 903182
SQL> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
903565
SQL> select file# , CHECKPOINT_CHANGE#, LAST_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
1 903565
2 903565
3 903565
4 903565
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 903565
2 903565
3 903565
4 903565
SQL>
SQL> recover database using backup controlfile;
ORA-00279: 更改 903565 (在 04/27/2011 11:56:24 生成) 對於執行緒 1 是必需的
ORA-00289: 建議:
D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00003_0749482512.001
ORA-00280: 更改 903565 (用於執行緒 1) 在序列 #3 中
指定日誌: {
D:\oracle\product\10.2.0\oradata\test01\REDO03.LOG
已應用的日誌。
完成介質恢復。
SQL>
SQL> select group#, first_change# from v$log where status='CURRENT' ;
GROUP# FIRST_CHANGE#
---------- -------------
3 903182
SQL> select CHECKPOINT_CHANGE# from v$database;
CHECKPOINT_CHANGE#
------------------
903565
SQL> select file# , CHECKPOINT_CHANGE#, LAST_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
1 903566 903566
2 903566 903566
3 903566 903566
4 903566 903566
SQL> select file# , CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 903566
2 903566
3 903566
4 903566
SQL> alter database open resetlogs ;
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST01\TEMP01.DBF'
2 SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-693880/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於資料檔案頭的檢查點SCN
- 關於資料檔案頭的檢查點SCN知識
- 重建控制檔案時,與資料檔案相關的Checkpoint資訊來自何處
- 重建Oracle資料庫控制檔案Oracle資料庫
- 重建控制檔案
- 重建控制檔案--
- 透過修改控制檔案scn推進資料庫scn資料庫
- Oracle重建控制檔案Oracle
- DataGuard重建控制檔案
- oracle 重建控制檔案Oracle
- 用重建控制檔案的方法修改oracle資料檔案路徑Oracle
- 資料庫控制檔案中的SCN詳解資料庫
- Oracle 控制檔案的重建Oracle
- 利用trace重建控制檔案
- 使用NORESETLOGS重建控制檔案恢復資料庫資料庫
- 使用RESETLOGS重建控制檔案恢復資料庫資料庫
- 如何重建RAC的控制檔案
- RAC環境重建控制檔案
- ORACLE控制檔案的重建 (轉)Oracle
- 控制檔案重建以及備份
- 備份與恢復--重建控制檔案後資料檔案損壞的恢復
- 恢復之重建資料檔案
- 使用RESETLOGS重建控制檔案恢復資料庫(二)資料庫
- oracle之 利用 controlfile trace檔案重建控制檔案Oracle
- 重建控制檔案後某些檔案被命名為MISSINGnnnnnGNN
- 請教關於利用跟蹤檔案重建控制檔案
- 【TABLESPACE】通過重建控制檔案調整表空間資料檔案位置及名稱
- 使用DBMS_BACKUP_RESTORE來還原控制檔案和資料檔案REST
- 通過Xtrabackup日誌來恢復檢查點檔案
- oracle資料庫移動資料檔案、日誌檔案和控制檔案Oracle資料庫
- 資料檔案重建,從歸檔日誌中回退資料
- Oracle 11g重建控制檔案——如何獲取建立控制檔案指令碼Oracle指令碼
- oracle10g_備份控制檔案_得到重建控制檔案的指令碼Oracle指令碼
- 資料庫引數檔案控制檔案日誌檔案資料檔案跟蹤檔案等8大檔案的字典資料庫
- [20121105]重建控制檔案少一個資料檔案的情況.txt
- 在RFT中新增檔案檢查點
- oracle中移動控制檔案、資料檔案、日誌檔案Oracle
- Oracle 11g 通過 RMAN 檢查資料檔案、控制檔案、引數檔案的狀態和是否存在壞塊Oracle