讀書筆記:深入解析oracle-第2章 控制檔案與資料庫初始化

浪漫雙魚發表於2011-05-30

1、           控制檔案是資料庫的大腦,而SYSTEM表空間是資料庫的心臟。

2、           oracle 11g開始,可以通過v$diag_info獲得當前會話轉儲檔案的名稱。

3、           SCN由兩部分組成,高位SCN Wrap2Bttes記錄,低位Scn Base4Bytes記錄。

4、           9i前,通過查詢x$KTUXE獲得系統最接近當前值的SCN

SQL> select max(ktuxescnw*power(2,32)+ktuxescnb) from x$ktuxe;

MAX(KTUXESCNW*POWER(2,32)+KTUXESCNB)

------------------------------------

                              594496

9i開始,可以使你用dbms_flashback.get_system_change_number來獲得。

SQL>  select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

                  594555

10g開始,在v$database檢視中增加了current_scn欄位。

SQL> select current_scn from v$database;

CURRENT_SCN

-----------

     594565

還可以使用oradebug從記憶體中直接讀取該值

SQL> oradebug setmypid

Statement processed.

SQL> oradebug dumpvar sga kcsgscn_

kcslf kcsgscn_ [20009104, 20009124) = 00000000 00091293 00000159 00000000 00000000 00000000 00000000 20008F10

SQL> select to_number('91293','xxxxx') scn from dual;

       SCN

----------

    594579

5、           SCN通常在事務提交或回滾時改變,在控制檔案、資料檔案頭、資料塊、日誌檔案頭、日誌檔案change vector中都有SCN,但其作用各不相同。

A、資料檔案頭中包含了該資料檔案的Checkpoint SCN,表示該資料檔案最近一次執行檢查點操作時的SCN

使用如下命令dump資料檔案頭:

alter session set events 'immediate trace name file_hdrs level 10';

   FILE_HEADER部分之前資訊來自控制檔案,之後資訊來自資料檔案頭,在資料庫的啟動過程中,需要依賴兩部分資訊進行比對判斷,從而確保資料庫的一致性和判斷是否需要進行恢復。

B、日誌檔案頭中包含了Low SCN Next SCN

SQL> alter system dump logfile '/oracle/ orcl/redo01.log';

這兩個SCN標示該日誌檔案包含有介於Low SCNNext SCN的重做資訊,對於Current的日誌檔案,其最終SCN不可知,所以Next SCN被置為無窮大,也就是ffffffff

6、           實際上,檢查點只是一個資料庫時間,它存在的根本意義在於減少崩潰恢復(crash recovery)時間。

7、           當資料在buffer cache中被修改之後,dirty buffer會被轉移到dirty list,以便將來執行的檢查點可以將這些修改過的buffer寫出到資料檔案上。

a、                oracle8之前,由於檢查點時需要寫出全部髒資料,所以被稱為完全檢查點

B、從oracle 8 開始,引入了檢查點佇列(Checkpoint Queue,CKPTQ)機制。當執行增量檢查點時,DBWR從檢查點佇列按照LOW RBA的順序寫出,同時,CKPT程式也階段性的使用非常輕量級的控制檔案更新協議,將當前的最低RBA寫入控制檔案。

C、通過增量檢查點,資料庫可以將以前的全量寫出變更為增量漸進寫出,從而可以極大的減少對於資料庫效能的影響;而檢查點佇列進一步地將RBA和檢查點關聯起來,從而可以通過檢查點來確定恢復的起點。

8、           檔案檢查點佇列(FILE QUEUE),通常縮寫為FILEQ,它的引入提高了表空間檢查點的效能。通常對錶空間執行offline等操作時會觸發表空間檢查點。

9、           使用如下命令轉儲buffer cache資訊

alter session set events 'immediate trace name buffers level 10';

10、          Sga中存在一塊記憶體區域用來記錄這個檢查點佇列

SQL> select name,bytes from v$sgastat where upper(name) like '%CHECKPOINT%';

NAME                                                      BYTES

---------------------------------------------------- ----------

Checkpoint queue                                         128320

11、          設定引數log_checkpoints_to_alertTRUE,則資料庫會將檢查點的執行情況記入告警日誌檔案。

12、          通過以下步驟跟蹤資料庫的啟動過程,可以獲得跟蹤檔案

Sql>startup nomount

Sql>alter session set events=10046 trace name context forever,level 12;

Sql>alter database open;

或者如下

Sql>startup mount;

Sql>alter session set sql_trace=true

Sql>alter database open;

13、           

10g中,當fast_start_mttr_target引數未設定時,自動檢查點調整生效。

例項恢復包括兩個步驟:cache recovery transaction recovery

        注意到oracle在恢復過程中,首先讀取日誌,從最後完成的檢查點開始,應用所有重做記錄,這個過程叫前滾(Rolling Forward),也就是Cache Recovery過程,完成前滾之後,資料庫可以被開啟提供訪問和使用。

        此後進入例項恢復的第二階段,oracle回滾未提交事務。Oracle使用兩個特點來增加這個恢復階段的效率,這兩個特點是Fast-Start On-Demand RollbackFast-Start Parallel Rollback(這些特點是Fast-Start Fault Recovery的組成部分,僅在oracle8i之後的企業版中使用)

        使用Fast-Start On-Demand Rollback特點,Oracle自動允許在資料庫開啟之後開始新的事務,這通常只需要很短的Cache Recuvery時間,如果一個使用者試圖訪問被異常中止程式鎖定的記錄,oracle回滾那些新事物請求的記錄,也就是說,因需求而回滾。因而,新事物不需要等待漫長的事物回滾時間。在Fast-Start On-Demand Rollback中,後臺程式SMON充當一個排程員,使用多個伺服器程式並行回滾一個事務集。

         Fast-Start On-Demand Rollback主要對於長時間執行的未提交事務有效,尤其是並行INSERTUPDATEDELETE等操作。SMON自動決定何時開始並行回滾並且自動在多個程式之間分散工作。

Fast-Start Parallel Rollback的一個特殊形式是內部事務恢復(Intra-Transaction Recovery)。在內部事務恢復中,一個大的事務可以被拆分,分配給幾個伺服器程式並行回滾。可以通過初始化引數FAST_START_PARALLEL_ROLLBACK來控制並行回滾,該引數有3個引數值。

FALSE:禁止Fast-Start Parallel Rollback

LOW:限制恢復程式不能超過2倍的CPU_COUNT.

HIGH:限制恢復程式不能超過4倍的CPU_COUNT

14、          oracle 10g開始,資料庫開始實現自動調整的檢查點(SelfTune Checkpoint),使用自動調整的檢查點,Oracle資料庫開始利用系統的低I/O負載時段寫出記憶體中的髒資料,從而提高資料庫的效率。FAST_START_MTTR_TARGET引數未設定時,自動檢查點調整生效。

15、          資料庫在建立過程中最先執行的是一個叫作CreateDB.sql的腳步,在這個建立過程中,會隱含的呼叫$ORACLE_HOME/rdbms/admin/sql.bsq腳步,用於建立資料字典。這個檔案的位置受到一個隱含的初始化引數_init_sql_file的控制。

16、          在系統表空間system的檔案頭存在一個重要的資料結構root dba,用於定位資料庫引導的bootstrap$資訊。

17、          資料庫及檔案號的轉換工具:

execute  dbms_utility_data_block_address_file(to_number(4001a1,xxxxxxx))

execute  dbms_utility_data_block_address_block(to_number(4001a1,xxxxxxx))

18、          oracleORA-00701錯誤來阻止使用者更改系統物件時,可以用如下方法處理:

A、通過migrate模式

Sql>shutdown immediate

Sql>startup migrate;

B、通過一個內部事件

Sql>alter system set event= 38003 trace name context forever,level 10 scope=spfile;

--38003事件的作用是CBO Disable column stats for the dictionary objects in recursive SQL,也就是說可以將部分物件從啟動的bootstrap$需要裡剝離出來,從而可以被線上rebuild

19、           設定內部事件,使exp跳過這些損壞的Block

Sql>alter system set events=10231 trace name context forever,level 10;

 

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

相關文章