All about control file in Oracle Database



--數據庫實例啓動的三個階段:
NOMOUNT(START):打開初始化參數文件
MOUNT:打開控制文件
OPEN:打開數據文件和日誌文件

--控制文件
控制文件的作用:管理數據庫的狀態和描述數據庫的物理結構信息。
控制文件主要包含如下信息:
數據庫名
數據庫標識符DBID
數據庫創建時間戳
數據庫字符集
數據文件信息
臨時文件信息
在線重做日誌信息
近期的歸檔日誌信息
表空間信息
RMAN 信息庫
檢查點信息
損壞的數據塊註冊表
還原點信息
RESET_SCN
髒數據塊的數量
                                         
                                                                    
-------------All about DBID
1. DBID 在數據庫創建時自動生成
2. Oracle 不保證兩個同名數據庫DBID一定唯一
3. DBID 在數據庫創建後永遠不變,除非使用 $ORACLE_HOME/bin/nid 修改數據庫名稱時自動生成新的 DBID
4. 在未使用 FRA 時,通過控制文件的自動備份 restore 控制文件時,會遇到 ORA-06495 錯誤(在11R2嘗試時未出現此錯誤)
5. DBID 和數據庫名一樣,不僅存在於控制文件,還存在於數據文件、日誌文件頭部,用於判斷控制文件、數據文件和日誌文件是否屬於同一數據庫

--獲取數據庫的 DBID
1. v$database.dbid

SQL> select dbid from v$database;

      DBID
----------
2127893003

2.控制文件的自動備份文件名(前提是自動備份沒有放在FRA上,FRA使用OMF管理方式不會顯式地顯示DBID信息)
[oracle@ora dbs]$ ls -lrt c*
-rw-r----- 1 oracle asmadmin 48005120 Oct 28 15:09 c-2127893003-20131028-00
--------------2127893003 即爲 DBID

3.執行轉儲命令查看各種數據文件的文件頭信息
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
         1          1          1   10485760        512          2 NO  CURRENT                 459088 28-OCT-13   2.8147E+14
         2          1          0   10485760        512          2 YES UNUSED                       0                      0
         3          1          0   10485760        512          2 YES UNUSED                       0                      0

SQL> alter system dump logfile '+DATA/test/onlinelog/group_1.266.829746583';

System altered.

SQL> select value from v$diag_info where name='Default Trace File';

VALUE
------------------------------------------------------------
/u01/app/oracle/diag/rdbms/test/test/trace/test_ora_7538.trc

[oracle@ora dbs]$ grep -i 'db id' /u01/app/oracle/diag/rdbms/test/test/trace/test_ora_7538.trc
        Db ID=2127893003=0x7ed5120b, Db Name='TEST'
 
4.如果使用了 catalog ,還可以在查詢 catalog 數據庫中的 DB 表

select * from catalog_user.DB;


-----------數據庫物理信息
在數據庫處於 mount 狀態(datafile和logfile均未open)時,可以查詢記錄在控制文件中的相應動態視圖獲取數據庫的物理結構

v$database
v$archive_log
v$datafile
v$tempfile
v$log
v$logfile
v$recover_file

-----------控制文件序列號
控制文件序列號用於判斷控制文件是否過時的因素“之一”,在控制文件被更新後就會增長。控制文件的更新包括檢查點信息更新,表空間的增刪操作等。
控制文件序列號也存在於數據文件和日誌文件,只不過它們是在自身的文件頭被更新時從當時的控制文件複製而來。
控制文件的更新次數總是比數據文件和日誌文件多,因爲每當數據文件和日誌文件頭被更新時,控制文件都會複製其部分內容,同時控制文件
的某些操作比如增量檢查點只會更新控制文件而不會更新日誌文件盒數據文件。

查看 v$database 和 v$kcvfh 可以查看當前控制文件記錄的控制文件序列號和各個數據文件頭部所記錄的控制文件序列號。

SQL> select CONTROLFILE_SEQUENCE# from v$database;

CONTROLFILE_SEQUENCE#
---------------------
                 1160
                 
SQL> select hxfil as file#, fhcsq from x$kcvfh;

     FILE#      FHCSQ
---------- ----------
         1       1128
         2       1128
         3       1128
         4       1128
         
       
-----------控制文件檢查點 SCN
控制文件檢查點 SCN 也是判斷控制文件是否過時的要素之一。檢查點分爲完全檢查點和增量檢查點,完全檢查點會把 SCN 更新至數據文件頭和控制文件中,
而增量檢查點只會將SCN更新至控制文件。無論哪種檢查點,其SCN在控制文件中都稱爲控制文件檢查點SCN(有別於數據庫檢查點SCN)

 select CONTROLFILE_CHANGE# from v$database;

CONTROLFILE_CHANGE#
-------------------
             464297
             
每當控制文件發生變化(增刪文件、日誌切換、完全或增量檢查點),控制文件檢查點SCN的值都會上升。該SCN的值一定大於或等於 current redo log 的低位 SCN
同時,控制文件檢查點 SCN 的值一定大於所有數據文件頭部的檢查點SCN號,否則該控制文件就會被認爲過時,實例無法啓動。

  select controlfile_change# from v$database
  union all
  select first_change# from v$log where status = 'CURRENT';

CONTROLFILE_CHANGE#
-------------------
             466258
             465700

------------數據庫檢查點 SCN
控制文件中保存的數據庫檢查點SCN實際上市所有數據文件頭中最小的檢查點SCN。Oracle 根據該值與每個 redo 日誌的高低爲SCN一一比較,確定恢復數據文件時
所需的第一個 redo 或歸檔日誌
v$database 中的 checkpoint_change# 和 v$datafile_header 中的 checkpoint_change# 應該一致

SQL> select checkpoint_change# from v$database
  2  union all
  3  select checkpoint_change# from v$datafile_header;

CHECKPOINT_CHANGE#
------------------
            465700
            465700
            465700
            465700
            465700
            
------------online redo 的高低水位 SCN
SQL> select GROUP#,FIRST_CHANGE#,NEXT_CHANGE#,status from v$log;

    GROUP# FIRST_CHANGE# NEXT_CHANGE# STATUS
---------- ------------- ------------ ----------------
         1        459088       465700 INACTIVE
         2        465700   2.8147E+14 CURRENT
         3             0            0 UNUSED
         
FIRST_CHANGE#:低位SCN redo log 中的第一個 redo entry
NEXT_CHANGE#:高位SCN下一個日誌文件中的第一個 redo entry


------------RMAN 信息庫
RMAN 配置、閃回日誌路徑、重做日誌歷史、歸檔路徑及屬性、RMAN 備份集信息、RMAN image copy 信息、RMAN 備份集和RMAN IMAGE COPY 中損壞的數據塊
數據文件壞塊信息等

------------還原點信息
還原點主要通過 create restore point 命令創建,是SCN的別名,主要用於 flashback 技術

------------resetlog SCN

使用resetlog選項open數據塊時的SCN值,也存在於數據文件和日誌文件頭部。每次打開數據庫時都會檢查他們是否一致


轉載請註明作者出處及原文鏈接,否則將追究法律責任:

作者:xiangsir

原文鏈接:http://blog.csdn.net/xiangsir/article/details/13773629

QQ:444367417

MSN:[email protected]


發佈了156 篇原創文章 · 獲贊 891 · 訪問量 61萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章