redo log file 物理結構學習與測試
redo log file 物理結構學習與測試
參考文件
<
<
<
<
<
<< oracle dump命令的使用_20091207.doc>>
<<一個事務的整個流程,datafile,undo,redo的內容_20091208.doc>>
目錄
1 redo log file overview
2 Redo logfile的結構
3 Redo logfile header
4 Redo record header
6 相關views
7 Notes
1 redo log file overview
1.1 The primary function of the redo log is to record all changes made to data. The information in a redo log file is used only to recover the database from a system or media failure that prevents database data from being written to the datafiles.
1.2 Online redo log files are filled with redo records. A redo record, also called a redo entry, is made up of a group of change vectors, each of which is a description of a change made to a single block in the database. (一個 change vectors 描述一個block的變化,多個change vectors 構成一個redo record,透過Dump命令可以看到詳細)
For example, if you change a salary value in an employee table, you generate a redo record containing change vectors that describe changes to the data segment block for the table, the rollback segment data block, and the transaction table of the rollback segments.
1.3 Redo entries record data that you can use to reconstruct all changes made to the database, including the rollback segments. Therefore, the online redo log also protects rollback data. when you recover the database using redo data, Oracle reads the change vectors in the redo records and applies the changes to the relevant blocks.
1.4 Oracle properly applies redo log files in ascending order by using the log sequence number of necessary archived and online redo log files.(以升序的方式應用日誌? 假定有3,4,5日誌要應用,從3開始應用)
1.5 Oracle的redo機制是一種邏輯和物理日誌結合的機制,其內容包括:
DML語句導致的資料庫變更,但是不包括DML語句本身;
DDL語句導致的資料字典的變更,同時包含DDL語句本身;
遞迴語句導致的資料庫變更
redo logfile是按順序寫入的檔案,其塊大小不同於資料塊大小是有db_block_size引數設定的,而是在Oracle原始碼中固定的,和os相關,大部分os中都是512位元組。
2 Redo logfile的結構
redo logfile和data file,control file一樣,都有一個檔案頭資訊。緊隨檔案頭之後,是按照順序寫入的一個個redo record。一個redo record記錄的是一個原子操作的redo。
redo record的結構,則是由一個redo record頭記錄加上一個個change vector。一個change vector就是對一個block的一次修改的redo。一個原子操作可能包含對相關的幾個block的修改,比如data block,undo block,undo header block等,所以包含了幾條change vector。
Oracle提供了dump redo logfile的功能,可以看到redo file中儲存的具體資訊。
3 Redo logfile header
redo logfile頭資訊中主要記錄了seq,low rba,high rba,scn等資訊,用來區分該檔案中包含了哪個時間段內的redo記錄。另外還包括了當前例項中可用的所有redo logfile的一個連結串列,主要用於日誌切換時找到下一個可用的redo logfile。
另外,前面說到的redo block size的大小在redo logfile header中也是有記錄的,注意到Blksiz=512
redo logfile header也可以單獨的dump出來(包括整個例項中可用的redo logfile header)
SQL>alter system set events 'immediate trace name redohdr level 10';
System altered.
4 Redo record header
redo record header中的資訊比較簡單,主要包括:
Thread:產生該redo record的instance的thread編號
RBA:redo byte address redo record的地址
LEN:該redo record的大小
SCN:產生該redo record時的SCN
其中,RBA長10位元組,包括三部分組成,記錄的是redo record的起始地址。
如RBA: 0x0001d5.00000002.0010
log sequence號(0x1d5)
redo logfile block編號(0x2)
redo logfile block中的位元組編號(0x10)
5 Change vector
Change vector 包含哪些資訊呢? 基本上, 它包含了來自於資料塊的版本號, 操作的型別以及資料塊的地址. 每個redo record是由多個change vector組成的. oracle 在恢復過程中, 會保證一個transaction 要麼被全部恢復, 要麼全部不恢復, 實際上就是透過恢復redo record中的全部change vector來做到的, 只要有一個change vector恢復失敗, 這個redo record的所有change vector都將失敗.
change vector儲存的是對單個block的修改記錄,這些block可以是:
資料塊 data block
回滾塊 undo block
資料段頭塊 data segment header block
回滾段頭塊 undo header block
每次修改cache buffer中的這些block時,需要先在PGA中生成對應的change vector。Change vector的結構,包含一個頭資訊,和一組修改記錄的長度加上修改的值資訊。
change vector header主要包括:
change #n 同一個redo record中的change vector的編號
TYP 變更型別
CLS 本次修改對應的block的類別,等於x$bh.class
AFN 絕對檔案號
DBA 本次修改對應的block的地址
SCN 修改時的SCN
SEQ 同一個SCN的不同修改以seq編號
OP 操作碼,由兩部分組成,layer code. sub code
對於block的class,常見類別如下
1 data block
2 sort block
3 deferred undo segment block
4 segment header block(table)
5 deferred undo segment header block
6 free list block
7 extent map block
8 space management bitmap block
9 space management index block
10 unused
11+2r segment header for undo segment, 其中r為undo segment 的編號
12+2r data block for undo segment r
而對於操作碼,其layer code表示了操作的的型別,主要有
4 塊清除
5 事務管理,如commit/rollback
10 索引操作
11 行資料操作
13 段管理操作
14 區塊管理操作
17 表空間管理操作
18 塊映像(手工熱備期間產生)
19 直接路徑裝載
20 Compatibility Segment
22 本地管理表空間操作
23 block寫出
24 DDL語句
比較常見的操作碼,比如
4.1 塊清除
5.1 修改undo header中的事務資訊
5.2 事務開始
5.4 commit
5.19 事務審計
5.20 子事務審計
10.2 插入頁塊記錄
10.3 清除頁塊記錄
10.4 刪除頁塊中的記錄
10.5 還原頁塊日誌
10.6 鎖定索引塊
10.7 提交時清除塊中的操作碼
10.8 初始化頭部
10.9 ITL1上應用XAT
10.10 設定頁塊指向下一個頁塊的指標
10.11 設定頁塊指向上一個頁塊的指標
10.12 root塊分裂後重新初始化
10.13 清空頁塊
10.15 分支塊中插入記錄
10.16 清除分支塊中的記錄
10.18 更新記錄中的鍵值
10.19 清除分裂標誌
10.21 撤銷分支塊操作
10.22 撤銷頁塊操作
10.24 收縮ITL
10.30 更新非鍵值
10.31 建立/裝載索引
10.34 清空頁塊
11.2 插入一條資料
11.3 刪除一條資料
11.4 鎖定資料(select for update)
11.5 更新記錄
11.6 行連結
11.9 cluster鍵索引操作
11.10 設定cluster鍵指標
11.11 插入多條記錄
11.12 刪除多條記錄
17.1 end backup
18.1 begin backup
19.1 直接路徑裝載(歸檔模式)
19.2 nologging設定
23.1 dbwr寫出block(9.0.1開始)
6 相關views
V$log
V$logfile
V$log_history
檢視redo log狀態:
idle> select a.group#,a.status, b.member from v$log a, v$logfile b where a.group# = b.group#;
GROUP# STATUS
---------- ----------------
MEMBER
----------------------------------------------------------------------------------------------------
1 INACTIVE
/u01/app/oracle/oradata/mydb/redo01.log
2 INACTIVE
/u01/app/oracle/oradata/mydb/redo02.log
3 CURRENT
/u01/app/oracle/oradata/mydb/redo03.log
7 Notes
1) What is transaction table?
2) Oracle 如何應用redo ?哪個程式做的,SMON? 過程怎麼樣的,checkpoint position
3) 如何來跟蹤一個事務產生undo/redo的過程?
參考<<一個事務的整個流程,datafile,undo,redo的內容_ 20091208.doc>>
4) 一個update 語句會產生多少個redo record和undo record ?
當我們發出一個update語句的時候, Oracle會完成以下幾步:
1. 生成一系列change vector.
2. 在redo buffer中儲存這一系列change vector組成的redo record, redo record最終將被寫入到redolog檔案中.
3. 更改資料快.
對於update語句, 典型情況下會包含3個change vector. 首先, 為了保留before image以便undo,需要把資料塊的before image放入rollback segment, 放入到rollback segment時, oracle會在rollback segment的transaction表(是哪個表呢??與前面的transaction table 同個問題)裡插入一條記錄儲存了被修改的資料塊的地址. 由於這個transaction表本身也是儲存在一個資料塊裡的, 因此, 這個操作本身也是對資料塊的修改, 因此, 這個修改需要生成一個change vector. 其次, oracle 把改動的資料塊寫入到rollback segment的目標塊也是一個資料塊, 因此, 對該塊也需要一個change vector. 第三個change vector就是被修改的資料塊本身了. 這是一條redo record。
如果上述update語句剛好修改到了被索引的列, 索引也會被修改, 同樣需要生成一個包含多個change vector的redo record.
commit 會生成第三個redo record. 因此, 最簡單的一個update+commit, 會產生上面的三個redo record.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10248702/viewspace-621990/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RMAN Catalog 學習與測試
- 26_Oracle redo物理結構解析Oracle Redo
- ResetLogs 選項學習與測試
- redo log file 優化優化
- Oracle Dump Redo Log FileOracle
- 【DATAGUARD 學習】測試standby應用REDO
- redo的等待log file sync和log file parallel write和redo size設定Parallel
- Online Redo Log 結構
- Oracle redo解析之-1、oracle redo log結構計算Oracle Redo
- nologging選項的學習與測試
- HBase學習之Hbase的邏輯結構和物理結構
- MySQL學習之change buffer 和 redo logMySql
- DG學習筆記(5)_Standby Redo Log筆記
- zt_Oracle Dump Redo Log File 說明Oracle
- Oracle Job學習與測試Oracle
- Oracle privilege學習與測試Oracle
- Oracle Roles學習與測試Oracle
- Oracle Audit 學習與測試Oracle
- Oracle RAC+DG 調整redo/standby log fileOracle
- 【REDO】Oracle redo內部結構Oracle Redo
- 軟體測試學習筆記:測試點總結筆記
- 【REDO】Oracle redo undo 學習Oracle Redo
- 引入測試報告與結構優化(二)測試套件測試報告優化套件
- App 壓力測試學習總結APP
- 資料結構學習(C++)續——排序【1】測試程式 (轉)資料結構C++排序
- Oracle DB Links學習與測試Oracle
- Oracle約束的學習與測試Oracle
- 軟體測試工具QTP學習小結QT
- PostgreSQL:物理結構SQL
- Redo Log之一:理解Oracle redo logOracle Redo
- Redo log 的分享與記憶
- 並行執行的學習與測試並行
- Oracle Audit學習與測試 參考文件Oracle
- 安全測試學習
- redo log 和 binlog 的一些總結
- 效能測試學習(1)-效能測試分類與常見術語
- Oracle體系結構之-物理結構Oracle
- Oracle SCN相關問題學習與測試Oracle