讀書筆記:深入解析oracle-第2章 控制檔案與資料庫初始化
1、 控制檔案是資料庫的大腦,而SYSTEM表空間是資料庫的心臟。
2、 從oracle 11g開始,可以通過v$diag_info獲得當前會話轉儲檔案的名稱。
3、 SCN由兩部分組成,高位SCN Wrap由2Bttes記錄,低位Scn Base由4Bytes記錄。
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 SCN到Next 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_alert為TRUE,則資料庫會將檢查點的執行情況記入告警日誌檔案。
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 Rollback和Fast-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主要對於長時間執行的未提交事務有效,尤其是並行INSERT、UPDATE和DELETE等操作。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、 在oracle以ORA-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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 讀書筆記:深入解析oracle-第4章 資料字典筆記Oracle
- 讀書筆記:深入解析oracle-第3章 引數及引數檔案筆記Oracle
- 讀書筆記:深入解析oracle-第5章 記憶體管理筆記Oracle記憶體
- 《深入解析Oracle》閱讀繼續,第二章,控制檔案與資料庫初始化Oracle資料庫
- 讀書筆記:深入解析oracle-第一章 資料庫的啟動和關閉筆記Oracle資料庫
- JVM資料區域與垃圾收集<深入理解JVM讀書筆記>JVM筆記
- 深入解析oracle--資料庫的初始化Oracle資料庫
- 《資料庫系統實現》讀書筆記資料庫筆記
- 資料庫索引設計與優化讀書筆記--《一》概述資料庫索引優化筆記
- 《資料探勘概念與技術》讀書筆記筆記
- 《讀書與做人》讀書筆記筆記
- 深入淺出node讀書筆記筆記
- 《深入淺出MySQL》讀書筆記MySql筆記
- 深入淺出Nodejs讀書筆記NodeJS筆記
- 《深入剖析Tomcat》讀書筆記(一)Tomcat筆記
- 《深入剖析Tomcat》讀書筆記(二)Tomcat筆記
- 《用資料講故事》讀書筆記筆記
- 資料庫收縮資料檔案的嘗試(三)(r11筆記第22天)資料庫筆記
- 重建Oracle資料庫控制檔案Oracle資料庫
- 為資料庫新增控制檔案資料庫
- 《深入理解Java虛擬機器》讀書筆記3--類檔案結構Java虛擬機筆記
- 效能與RAC 讀書筆記筆記
- 資料結構與演算法分析 讀書筆記(樹)資料結構演算法筆記
- 資料庫索引設計與優化讀書筆記--《三》SQL處理過程資料庫索引優化筆記SQL
- 《Python資料處理》讀書筆記Python筆記
- oracle資料庫移動資料檔案、日誌檔案和控制檔案Oracle資料庫
- oracle控制檔案與資料庫啟動的關係Oracle資料庫
- 【讀書筆記】《PostgreSQL指南-內幕探索》-1.資料庫集簇、資料庫和資料表筆記SQL資料庫
- 《Effective C++》第3章 資源管理(2)-讀書筆記C++筆記
- 《Effective C++》第3章 資源管理(1)-讀書筆記C++筆記
- 《深入淺出MyBatis--技術原理與實戰》讀書筆記MyBatis筆記
- 叢集資料庫新增控制檔案資料庫
- 為rac資料庫增加控制檔案資料庫
- 《Effective C++》第4章 設計與宣告(2)-讀書筆記C++筆記
- 《Effective C++》第4章 設計與宣告(1)-讀書筆記C++筆記
- 《網際網路信貸風險與大資料》讀書筆記(二)大資料筆記
- 《網際網路信貸風險與大資料》讀書筆記(一)大資料筆記
- 《網際網路信貸風險與大資料》讀書筆記(五)大資料筆記