重建控制檔案時,與資料檔案相關的Checkpoint資訊來自何處
背景: 關閉資料庫,啟動資料庫到Mount狀態,查詢此時資料檔案頭,控制檔案中記錄的各資料檔案的Checkpoint; 再次關閉資料庫,備份所有資料檔案; 然後開啟資料庫,執行各種操作,如:強制執行檢查點; 再次關閉資料庫,用備份的資料檔案恢復現在的資料檔案,重建控制檔案(重建控制檔案分為兩種情況 1. Noresetlogs ——> 檢視此時的資料檔案頭,控制檔案記錄的各資料檔案的Checkpoint) 2. Resetlogs ——> 檢視此時的資料檔案頭,控制檔案記錄的各資料檔案的Checkpoint) 與之前的Checkpoint比較。 問題: 1. Noresetlogs 重建控制檔案,此時控制檔案中記錄的Checkpoint資訊由何處得來? 2. Resetlogs 重建控制檔案,此時控制檔案中記錄的Checkpoint資訊由何處得來? 實驗步驟: Resetlogs的情況: SQL> shutdown immediate 資料庫已經關閉。 已經解除安裝資料庫。 ORACLE 例程已經關閉。 SQL> startup mount ORACLE 例程已經啟動。 Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 資料庫裝載完畢。 SQL> select checkpoint_change# 2 from v$datafile; CHECKPOINT_CHANGE# ------------------ 306219 306219 306219 306219 SQL> select checkpoint_change# 2 from v$datafile_header; CHECKPOINT_CHANGE# ------------------ 306219 306219 306219 306219 SQL> shutdown immediate ORA-01109: 資料庫未開啟 已經解除安裝資料庫。 ORACLE 例程已經關閉。 ——備份所有資料檔案 SQL> startup ORACLE 例程已經啟動。 Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes 資料庫裝載完畢。 資料庫已經開啟。 SQL> alter system checkpoint; 系統已更改。 SQL> alter system checkpoint; 系統已更改。 SQL> alter system checkpoint; 系統已更改。 SQL> alter system checkpoint; 系統已更改。 SQL> shutdown immediate 資料庫已經關閉。 已經解除安裝資料庫。 ORACLE 例程已經關閉。 ——用備份的資料檔案代替當前的資料檔案。 SQL> startup nomount ORACLE 例程已經啟動。 Total System Global Area 101784276 bytes Fixed Size 453332 bytes Variable Size 75497472 bytes Database Buffers 25165824 bytes Redo Buffers 667648 bytes ——重建控制檔案Resetlogs情況: SQL> @d:ora90adminiceudumpcontrol.sql 控制檔案已建立 SQL> select checkpoint_change# 2 from v$datafile; CHECKPOINT_CHANGE# ------------------ 306219 306219 306219 306219 SQL> select checkpoint_change# 2 from v$datafile_header; CHECKPOINT_CHANGE# ------------------ 306219 306219 306219 306219 SQL> alter database open; alter database open * ERROR 位於第 1 行: ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ?? SQL> alter database open resetlogs; 資料庫已更改。 ——由於此時控制檔案中記錄的各資料檔案的Checkpoint和各資料檔案頭記錄的Checkpoint一致, ——且各資料檔案的Checkpoint和其Stop Checkpoint一致,故可以直接開啟資料庫,不用Recover。 ——只不過Open的時候要Resetlogs而已。 SQL> alter system checkpoint; 系統已更改。 SQL> alter system checkpoint; 系統已更改。 SQL> alter system checkpoint; 系統已更改。 |
Noresetlogs的情況:
SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
SQL> select checkpoint_change#
2 from v$datafile;
CHECKPOINT_CHANGE#
------------------
306340
306340
306340
306340
SQL> select checkpoint_change#
2 from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
306340
306340
306340
306340
SQL> alter database backup controlfile to trace;
——備份控制檔案
資料庫已更改。
SQL> shutdown immediate
ORA-01109: 資料庫未開啟
已經解除安裝資料庫。
ORACLE 例程已經關閉。
——備份所有的資料檔案
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> alter system checkpoint;
系統已更改。
SQL> alter system checkpoint;
系統已更改。
SQL> alter system checkpoint;
系統已更改。
SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
——用備份的資料檔案恢復當前的所有資料檔案
SQL> startup nomount
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> @d:ora90adminiceudumpcontrol.sql
——重建控制檔案,用Noresetlogs
控制檔案已建立
SQL> select checkpoint_change#
2 from v$datafile;
CHECKPOINT_CHANGE#
------------------
306454
306454
306454
306454
——當前控制檔案中記錄的各資料檔案的Checkpoint。
SQL> select checkpoint_change#
2 from v$datafile_header;
CHECKPOINT_CHANGE#
------------------
306340
306340
306340
306340
——當前各資料檔案頭記錄的各自的Checkpoint,與備份時的Checkpoint相等.
——但是與當前控制檔案記錄的Checkpoint不等。
SQL> alter session set nls_language=american;
Session altered.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: 'D:ORA90ORADATAICESYSTEM01.DBF'
——控制檔案記錄的各資料檔案的Checkpoint與各資料檔案頭記錄的Checkpoint不等,故要恢復。
SQL> recove datafile 1;
SP2-0734: unknown command beginning "recove dat..." - rest of line ignored.
SQL> recover datafile 1;
Media recovery complete.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 2 needs media recovery
ORA-01110: data file 2: 'D:ORA90ORADATAICEUNDOTBS01.DBF'
SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.
結論:
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/18921899/viewspace-1016842/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 重建控制檔案, 資料檔案檢查點SCN到底來自哪裡?
- 關於控制檔案與資料檔案頭資訊的說明(zt)
- 重建Oracle資料庫控制檔案Oracle資料庫
- 重建控制檔案
- 重建控制檔案--
- 用重建控制檔案的方法修改oracle資料檔案路徑Oracle
- oracle 控制檔案及引數檔案何時自動備份Oracle
- 備份與恢復--重建控制檔案後資料檔案損壞的恢復
- Oracle 控制檔案的重建Oracle
- 同時丟失控制檔案與資料檔案的恢復
- 請教關於利用跟蹤檔案重建控制檔案
- Oracle重建控制檔案Oracle
- DataGuard重建控制檔案
- oracle 重建控制檔案Oracle
- 如何重建RAC的控制檔案
- ORACLE控制檔案的重建 (轉)Oracle
- 備份與恢復--重建控制檔案
- 利用trace重建控制檔案
- 檢視錶空間及資料檔案的checkpoint資訊
- 重建控制檔案時resetlogs與noresetlogs的使用情況
- 重建控制檔案,並且不乾淨的關閉資料庫測試資料庫
- 與 RMAN 相關的檔案
- 重建控制檔案後將備份資訊註冊
- Oracle控制檔案相關的其他(五)Oracle
- 使用NORESETLOGS重建控制檔案恢復資料庫資料庫
- 使用RESETLOGS重建控制檔案恢復資料庫資料庫
- RAC環境重建控制檔案
- 控制檔案重建以及備份
- oracle控制檔案與資料庫啟動的關係Oracle資料庫
- 恢復之重建資料檔案
- oracle10g_備份控制檔案_得到重建控制檔案的指令碼Oracle指令碼
- 重建控制檔案的恢復(noresetlogs)
- 使用RESETLOGS重建控制檔案恢復資料庫(二)資料庫
- oracle之 利用 controlfile trace檔案重建控制檔案Oracle
- 重建控制檔案後某些檔案被命名為MISSINGnnnnnGNN
- checkpoint時的SCN寫檔案動作
- [20121105]重建控制檔案少一個資料檔案的情況.txt
- css檔案與資源路徑相關CSS