資料庫資料跟蹤記錄
今天群裡有個朋友提問如下:insert into t values(9),commit;再刪除所有聯機日誌,之後用recover database until cancel,alter database open
resetlogs開啟,這是的9的記錄還不在?
以下測試過程將說明資料整個歷史過程:
建立測試環境
SQL> create tablespace test datafile '/opt/M1HFData/oradata/m1hf/test.dbf' size 10m;
Tablespace created.
建立測試表
SQL> create table test(id number,name varchar2(10)) tablespace test;
Table created.
檢視當前日誌組
SQL> select b.status,a.group#,member from v$logfile a,v$log b where a.group#=b.group#;
STATUS GROUP# MEMBER
---------------- ---------- ------------------------------
CURRENT 3 /opt/M1HFData/m1hf/redo03b.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01.log
INACTIVE 4 /opt/M1HFData/m1hf/redo04.log
INACTIVE 5 /opt/M1HFData/m1hf/redo05.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02.log
CURRENT 3 /opt/M1HFData/m1hf/redo03.log
INACTIVE 4 /opt/M1HFData/m1hf/redo04b.log
INACTIVE 5 /opt/M1HFData/m1hf/redo05b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01b.log
---------------- ---------- ------------------------------
CURRENT 3 /opt/M1HFData/m1hf/redo03b.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01.log
INACTIVE 4 /opt/M1HFData/m1hf/redo04.log
INACTIVE 5 /opt/M1HFData/m1hf/redo05.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02.log
CURRENT 3 /opt/M1HFData/m1hf/redo03.log
INACTIVE 4 /opt/M1HFData/m1hf/redo04b.log
INACTIVE 5 /opt/M1HFData/m1hf/redo05b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01b.log
10 rows selected.
檢視當前日誌檔案中是否有待插入記錄資訊
[oracle@m1hfdata ~]$ strings /opt/M1HFData/m1hf/redo03.log | grep yallonking | wc -l
0
0
檢視資料檔案中是否有待插入記錄資訊
[oracle@m1hfdata ~]$ strings /opt/M1HFData/oradata/m1hf/test.dbf | grep yallonking | wc -l
0
0
插入測試資料
SQL> insert into test values (1,'yallonking');
1 row created.
檢視當前日誌檔案是否有測試資料記錄(未提交狀態)
[oracle@m1hfdata ~]$ strings /opt/M1HFData/m1hf/redo03.log | grep yallonking | wc -l
1
1
檢視資料檔案是否有測試資料
[oracle@m1hfdata ~]$ strings /opt/M1HFData/oradata/m1hf/test.dbf | grep yallonking | wc -l
0
0
提交記錄
SQL> commit;
Commit complete.
檢視資料檔案是否有測試資料
[oracle@m1hfdata ~]$ strings /opt/M1HFData/oradata/m1hf/test.dbf | grep yallonking | wc -l
0
0
檢視日誌檔案是否有測試資料記錄(已提交且當前日誌檔案)
[oracle@m1hfdata ~]$ strings /opt/M1HFData/m1hf/redo01.log | grep yallonking | wc -l
1
1
切換日誌組
SQL> alter system switch logfile;
System altered.
檢視當前日誌組資訊
SQL> select b.status,a.group#,member from v$logfile a,v$log b where a.group#=b.group#;
STATUS GROUP# MEMBER
---------------- ---------- ------------------------------
ACTIVE 3 /opt/M1HFData/m1hf/redo03b.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01.log
CURRENT 4 /opt/M1HFData/m1hf/redo04.log
INACTIVE 5 /opt/M1HFData/m1hf/redo05.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02.log
ACTIVE 3 /opt/M1HFData/m1hf/redo03.log
CURRENT 4 /opt/M1HFData/m1hf/redo04b.log
INACTIVE 5 /opt/M1HFData/m1hf/redo05b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01b.log
---------------- ---------- ------------------------------
ACTIVE 3 /opt/M1HFData/m1hf/redo03b.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01.log
CURRENT 4 /opt/M1HFData/m1hf/redo04.log
INACTIVE 5 /opt/M1HFData/m1hf/redo05.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02.log
ACTIVE 3 /opt/M1HFData/m1hf/redo03.log
CURRENT 4 /opt/M1HFData/m1hf/redo04b.log
INACTIVE 5 /opt/M1HFData/m1hf/redo05b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01b.log
10 rows selected.
檢視日誌檔案是否有測試資料記錄(active狀態)
[oracle@m1hfdata ~]$ strings /opt/M1HFData/m1hf/redo03.log | grep yallonking | wc -l
1
1
檢視資料檔案是否有測試資料存在
[oracle@m1hfdata ~]$ strings /opt/M1HFData/oradata/m1hf/test.dbf | grep yallonking | wc -l
0
0
歸檔日誌檔案
SQL> alter system archive log current;
System altered.
檢視日誌檔案狀態
SQL> select b.status,a.group#,member from v$logfile a,v$log b where a.group#=b.group#;
STATUS GROUP# MEMBER
---------------- ---------- ------------------------------
ACTIVE 3 /opt/M1HFData/m1hf/redo03b.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01.log
ACTIVE 4 /opt/M1HFData/m1hf/redo04.log
CURRENT 5 /opt/M1HFData/m1hf/redo05.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02.log
ACTIVE 3 /opt/M1HFData/m1hf/redo03.log
ACTIVE 4 /opt/M1HFData/m1hf/redo04b.log
CURRENT 5 /opt/M1HFData/m1hf/redo05b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01b.log
---------------- ---------- ------------------------------
ACTIVE 3 /opt/M1HFData/m1hf/redo03b.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01.log
ACTIVE 4 /opt/M1HFData/m1hf/redo04.log
CURRENT 5 /opt/M1HFData/m1hf/redo05.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02.log
ACTIVE 3 /opt/M1HFData/m1hf/redo03.log
ACTIVE 4 /opt/M1HFData/m1hf/redo04b.log
CURRENT 5 /opt/M1HFData/m1hf/redo05b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01b.log
10 rows selected.
檢視資料檔案是否存在測試資料
[oracle@m1hfdata ~]$ strings /opt/M1HFData/oradata/m1hf/test.dbf | grep yallonking | wc -l
0
0
依然處於active狀態下日誌檔案資訊存在測試資料
[oracle@m1hfdata ~]$ strings /opt/M1HFData/m1hf/redo03.log | grep yallonking | wc -l
1
1
繼續檢視資料檔案是否存在測試資料
[oracle@m1hfdata ~]$ strings /opt/M1HFData/oradata/m1hf/test.dbf | grep yallonking | wc -l
1
1
等待n分鐘後... ...
檢視當前日誌組資訊
SQL> select b.status,a.group#,member from v$logfile a,v$log b where a.group#=b.group#;
STATUS GROUP# MEMBER
---------------- ---------- ------------------------------
INACTIVE 3 /opt/M1HFData/m1hf/redo03b.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01.log
ACTIVE 4 /opt/M1HFData/m1hf/redo04.log
CURRENT 5 /opt/M1HFData/m1hf/redo05.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02.log
INACTIVE 3 /opt/M1HFData/m1hf/redo03.log
ACTIVE 4 /opt/M1HFData/m1hf/redo04b.log
CURRENT 5 /opt/M1HFData/m1hf/redo05b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01b.log
---------------- ---------- ------------------------------
INACTIVE 3 /opt/M1HFData/m1hf/redo03b.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01.log
ACTIVE 4 /opt/M1HFData/m1hf/redo04.log
CURRENT 5 /opt/M1HFData/m1hf/redo05.log
INACTIVE 2 /opt/M1HFData/m1hf/redo02.log
INACTIVE 3 /opt/M1HFData/m1hf/redo03.log
ACTIVE 4 /opt/M1HFData/m1hf/redo04b.log
CURRENT 5 /opt/M1HFData/m1hf/redo05b.log
INACTIVE 1 /opt/M1HFData/m1hf/redo01b.log
10 rows selected.
檢視日誌檔案中測試資料是否存在
[oracle@m1hfdata ~]$ strings /opt/M1HFData/m1hf/redo03.log | grep yallonking | wc -l
1
1
結論:
在插入的資料commit後,資料沒有立即寫進資料。即使是發生日誌切換和歸檔,DBWRn也有可能還沒有及時將資料寫進資料檔案,所以,要獲取插入資料資料檔案,應該最好在當前日誌處於inactive後進行。當然在當前日誌沒有被覆蓋之前,插入的資料在日誌檔案中還是有記錄的。
希望能幫到那位朋友!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26143577/viewspace-717533/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫跟蹤SQLOracle資料庫SQL
- sql server跟蹤資料庫SQLServer資料庫
- 新增時--sqlserver資料庫跟蹤SQLServer資料庫
- 檢查資料庫是否啟用了跟蹤資料庫
- 【LOG】Oracle資料庫清理日誌、跟蹤檔案利器Oracle資料庫
- Oracle中如何跟蹤SQL或資料庫操作 [final]OracleSQL資料庫
- 為VNPY增加資料庫記錄交易資料功能資料庫
- 調整資料庫的資料檔案記錄資料庫
- 【DB】使用SQL_TRACE進行資料庫診斷跟蹤SQL資料庫
- 把資料庫控制檔案備份到跟蹤檔案資料庫
- 記錄資料庫所有ddl操作資料庫
- 如何跟蹤資訊流廣告轉化資料?
- Oracle事件跟蹤及結構資料dumpOracle事件
- 小專案跟蹤記錄
- 【TRACE】如果通過10046跟蹤資料庫效能問題資料庫
- 資料庫mysql學習筆記記錄資料庫MySql筆記
- Sql server資料庫記錄修改追蹤和恢復的解決方案SQLServer資料庫
- cmdb 查詢資料庫操作記錄資料庫
- SQL Server 資料庫基本記錄(一)SQLServer資料庫
- SQL Server 資料庫基本記錄(二)SQLServer資料庫
- SQL Server 資料庫基本記錄(三)SQLServer資料庫
- 使用SQLServerAudit記錄資料庫變更SQLServer資料庫
- 記錄我的資料庫學習資料庫
- 向量資料庫Chroma學習記錄資料庫
- 【Database】AIX系統下跟蹤開銷大的Oracle資料庫程式DatabaseAIOracle資料庫
- 跟蹤資料庫的命令:event 10046等的設定(ZT)資料庫
- MochaImport+ for Mac - 匯入處理Mocha跟蹤資料AIImportMac
- 運營人員都需要跟蹤哪些app資料?APP
- 將跟蹤與Windows效能日誌資料關聯Windows
- 使用10046跟蹤Oracle前映象資料讀Oracle
- thinkphp6多資料庫配置記錄PHP資料庫
- 常見資料庫最佳化記錄資料庫
- SQL 記錄資料庫連線數資訊SQL資料庫
- Oracle遷移資料庫過程記錄Oracle資料庫
- 向量資料庫之Lancedb學習記錄資料庫
- 達夢資料庫SQL跟蹤日誌詳細介紹及配置方法資料庫SQL
- 清理Oracle資料庫大量的SYS使用者審計跟蹤檔案Oracle資料庫
- 設定10046跟蹤處理資料庫不能open一例資料庫