Oracle閃回原理-Logminer解讀redo(r11筆記第17天)
說到閃回日誌,我們都知道閃回日誌中記錄的都是逆操作,那麼就有兩個問題需要解釋了。
閃回日誌和回滾段儲存的資料有什麼差別?
如果做了truncate操作,閃回日誌是怎麼記錄的,怎麼能夠透過閃回恢復資料。
第一個問題是一個同學問的,第二個問題是我偶然想起來的,當然這兩個問題還是蠻有意思。我們的目標就是解釋清楚下面的兩個問題。
當然要深刻理解這個問題,一個重要的部分就是得先明白redo的基本情況。
借用大師Jonathan Lewis的話說,Oracle裡面最重要的特性是在V6提出的改變向量,改變向量是描述資料塊變化的機制,是redo和undo的關鍵內容。
說實在話要深入解析,非常透徹的理解這部分內容得花很多的時間,冰凍三尺絕非一日之寒,有一種較為快速的理解redo的基本流程,有兩種簡單的途徑,一種是透過dump logfile來得到,另外一種就是解析日誌檔案來得到。明白了redo裡面的一些變化,再回過頭來看看閃回的部分,就會理解順暢許多。
閃回日誌的部分和redo的部分相比有一些相似之處。redo的機制中有的,閃回的部分也有相應的處理方式。
dump logfile其實輸出還是比較枯燥,晦澀難懂的,另外一種較為清晰的方式就是logminer了。
為了讓Logminer的日誌處理資訊更全面,還是建議開啟supplemental log,這個在OGG中也有如出一轍的設定。
當然解析工作這麼繁瑣,我們想更加自如一些,那就和shell指令碼聯絡起來。
指令碼1:
sqlplus -s / as sysdba <<EOF
execute dbms_logmnr.add_logfile(logfilename=>'$1',options=>dbms_logmnr.new);
execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
col xid_scn format a30
col username format a10
col timestamp format a20
col sql_redo format a35
col sql_undo format a35
set pages 1500
set linesize 200
select username,xid||':'||scn xid_scn,timestamp,sql_redo,sql_undo from v\$logmnr_contents where sql_redo not like '%AUD$%';
execute dbms_logmnr.end_logmnr;
EOF
使用如上的指令碼,輸入對應的redo日誌就會解析出裡面的內容來。
要得到當前的日誌資訊也很容易,寫個指令碼,寫個SQL分分鐘搞定。
指令碼2:
sqlplus -s / as sysdba <<EOF
set linesize 150
col member format a50
select l.sequence#,l.status ,l.bytes/1024/1024 size_MB,f.member from v\$log l ,v\$logfile f where l.group#=f.group#;
EOF
指令碼1中直接呼叫即可,比如
sh showlog.sh /U01/app/oracle/oradata/newtest2/redo02.log我們使用如下的方式來做一個簡單的測試。建立一個表,插入1行資料。
SQL> create table test_log (id number,name varchar2(30));
Table created.
SQL> insert into test_log values(100,'aaa');
1 row created.
SQL> commit;
Commit complete.
透過這種方式可以很容易讀到一些關鍵的日誌資訊。
最開始的幾個步驟可以很明顯看到deferred_segment_creation的痕跡,
然後可以看到在基表中插入了後設資料資訊,基本是按照seg$,tab$,seg$的方式插入資料的。
透過上面的步驟可以看到,最後的insert,對應的undo_sql會基於ROWID來做一個反向的操作,即刪除1條記錄。
在這個基礎上去解析閃回日誌,就有了一些基本的思路。
檢視閃回日誌的資訊可以使用SQL
select * from v$flashback_database_logfile;
解析閃回日誌可以採用如下的方式:
alter system dump flashback logfile '/U01/app/oracle/fast_recovery_area/NEWTEST2/flashback/o1_mf_d2tp6v82_.flb' ;
或者基於對應的dba的方式,也就是資料塊地址
alter system dump flashback logfile '/U01/app/oracle/fast_recovery_area/NEWTEST2/flashback/o1_mf_d2tp6v82_.flb' dba 8 594285;
當然解讀閃回日誌發現比自己想得還要曲折一些,因為Logminer還解析不了閃回日誌,想更細節的解析還是要花一些功夫,所以上面的兩個問題還需要不斷的深入理解才可以回答清楚。
個人公眾號如下,歡迎掃碼關注。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2130900/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 閃回原理測試(二)(r11筆記第23天)筆記
- Oracle閃回原理測試(三)(r12筆記第16天)Oracle筆記
- 閃回資料庫不是“萬金油”(r11筆記第73天)資料庫筆記
- 閃回區報警引發的效能問題分析(r11筆記第11天)筆記
- 一個閃回區報警的資料恢復(r11筆記第63天)資料恢復筆記
- 關於閃回區溢位導致的資料hang(r11筆記第12天)筆記
- Oracle閃回詳解Oracle
- 返京途中(r11筆記第61天)筆記
- Oracle 閃回刪除表原理分析Oracle
- Oracle 12cR2初體驗(r11筆記第91天)Oracle筆記
- oracle閃回Oracle
- oracle 閃回Oracle
- MySQL和Oracle行值表示式對比(r11筆記第74天)MySqlOracle筆記
- Oracle Data Guard延遲的幾個可能(r11筆記第69天)Oracle筆記
- 我的女兒二三事(r11筆記第87天)筆記
- online redo file讀書筆記筆記
- 詳解oracle資料庫閃回Oracle資料庫
- oracle 閃回 flashbackOracle
- oracle閃回特性Oracle
- Oracle 12c中DBCA搭建備庫體驗(r11筆記第92天)Oracle筆記
- Oracle 12c資料字典的小問題(r11筆記第49天)Oracle筆記
- Oracle閃回技術 為Oracle閃回配置資料庫Oracle資料庫
- 出去吃頓飯容易嘛(r11筆記第5天)筆記
- 需要了解的pssh(r11筆記第28天)筆記
- MySQL 5.7 General Tablespace學習(r11筆記第34天)MySql筆記
- 我眼中的寶雞景點(r11筆記第53天)筆記
- 我眼中的兵馬俑(r11筆記第55天)筆記
- 德魯克人生五問(r11筆記第71天)筆記
- 關於責任和業務(r11筆記第60天)筆記
- MySQL Online DDL(二)(r11筆記第88天)MySql筆記
- MySQL中的undo截斷(r11筆記第89天)MySql筆記
- Oracle閃回技術之閃回資料庫Oracle資料庫
- Oracle 11G 閃回技術 使用Oracle閃回查詢Oracle
- 用Oracle的眼光來學習MySQL 5.7的sys(上)(r11筆記第24天)OracleMySql筆記
- 用Oracle的眼光來學習MySQL 5.7的sys(下)(r11筆記第25天)OracleMySql筆記
- oracle閃回查詢Oracle
- Oracle閃回刪除Oracle
- 清空 oracle 閃回區Oracle