Oracle 11g的Redo Log和Archive Log的分析方法

来源:http://www.cnblogs.com/wangrongxin/archive/2016/08/20/5791568.html
-Advertisement-
Play Games

自Oracle 11g起,無需設置UTL_FILE_DIR就可以使用LOGMNR對本地資料庫的日誌進行分析,以下是使用LOGMNR的DICT_FROM_ONLINE_CATALOG分析REDO和歸檔日誌的步驟 ...


自Oracle 11g起,無需設置UTL_FILE_DIR就可以使用LOGMNR對本地資料庫的日誌進行分析,以下是使用LOGMNR的DICT_FROM_ONLINE_CATALOG分析REDO和歸檔日誌的步驟

分析REDO日誌的實驗

  • 創建測試表,並做DML操作。
SQL> create table t_test(id number,name varchar2(15));
Table created.
  
SQL> insert into t_test values(1,'stream');
1 row created.
  
SQL> insert into t_test values(2,'dbdream');
1 row created.
  
SQL> commit;
Commit complete.
  
SQL> update t_test set name='streamsong' where id=1;
1 row updated.
  
SQL> commit;
Commit complete.
  
SQL> delete from t_test;
2 rows deleted.
  
SQL> commit;
Commit complete.
  • 查看REDO日誌的路徑。
SQL> select member from v$logfile;
  
MEMBER
------------------------------------------------
/u01/app/oracle/oradata/stream/STREAM/redo03.log
/u01/app/oracle/oradata/stream/STREAM/redo02.log
/u01/app/oracle/oradata/stream/STREAM/redo01.log
  • 添加REDO日誌

第一個添加的日誌需指定NEW,如果確定要查詢的信息在指定的REDO日誌內,可以只添加那個REDO日誌,而不需要再添加其他

SQL> exec dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/oradata/stream/STREAM/redo01.log',options=>dbms_logmnr.new);
  
PL/SQL procedure successfully completed.
  • 添加其他REDO日誌
    不是第一個添加的日誌需指定ADDFILE
SQL> exec dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/oradata/stream/STREAM/redo02.log',options=>dbms_logmnr.addfile);
  
PL/SQL procedure successfully completed.
  
SQL> exec dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/oradata/stream/STREAM/redo03.log',options=>dbms_logmnr.addfile);
  
PL/SQL procedure successfully completed.
  • 開始對添加的REDO進行分析
SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
  
PL/SQL procedure successfully completed.
  • 查看LOGMNR分析後得到的信息

LOGMNR分析後的數據會存放在v$logmnr_contents視圖中,通過查詢v$logmnr_contents視圖就可以查詢到REDO日誌的信息。

SQL> select timestamp,sql_redo,sql_undo from v$logmnr_contents where username='SCOTT'and table_name='T_TEST';
  
TIMESTAMP  SQL_REDO
  
---------  -----------------------------------------------------------
  
21-MAR-12  create table t_test(id number,name varchar2(15));
  
21-MAR-12  insert into "SCOTT"."T_TEST"("ID","NAME") values ('1','stream');
  
21-MAR-12  insert into "SCOTT"."T_TEST"("ID","NAME") values ('2','dbdream');
  
21-MAR-12  update "SCOTT"."T_TEST" set "NAME" = 'streamsong' where "NAME" ='stream' and ROWID = 'AAAR7fAAEAAAADXAAA';
  
21-MAR-12  delete from "SCOTT"."T_TEST" where "ID" = '1' and "NAME" = 'streamsong' and ROWID = 'AAAR7fAAEAAAADXAAA';
  
21-MAR-12  delete from "SCOTT"."T_TEST" where "ID" = '2' and "NAME" ='dbdream' and ROWID = 'AAAR7fAAEAAAADXAAB';

SQL_REDO就是執行的SQL語句,SQL_UNDO是回滾操作的SQL語句,也就是執行SQL_UNDO的相關SQL,就可以回滾對應的操作。

註:LOGMNR是SESSION級的,以上實驗第3步到第6步需在同一個SESSION中進行,SESSION斷開連接後需重新執行,否則會報以下錯誤提示。
ORA-01306: dbms_logmnr.start_logmnr() must be invoked before selecting from v$logmnr_contents

  • 結束LOGMNR操作
    由於LOGMNR是會話級的,可以用直接退出或關閉當前的終端的方式來結束LOGMNR的操作,當然,正確的結束LOGMNR操作需使用下麵的命令。
SQL> exec dbms_logmnr.end_logmnr;
  
PL/SQL procedure successfully completed.

分析歸檔日誌的實驗

分析歸檔日誌的操作和分析REDO的操作基本一樣,最重要的就是準確的找到需要查找的信息在哪些歸檔日誌內。既然是利用LOGMNR分析歸檔日誌,資料庫一定是在歸檔模式,要不哪來的歸檔日誌,可以通過如下命令查看資料庫是否啟用歸檔模式。

SQL> archive log list
  
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     15
Next log sequence to archive   17
Current log sequence           17

可以看到當前資料庫已經開啟歸檔模式,歸檔地址是USE_DB_RECOVERY_FILE_DESTUSE_DB_RECOVERY_FILE_DEST的具體位置可以通過下麵的命令查看。

SQL> show parameter db_recove
  
NAME                        TYPE        VALUE
  
--------------------------- ----------- -------------------------------
db_recovery_file_dest       string      /u01/app/oracle/flash_recovery_area
db_recovery_file_dest_size  big integer 3852M

如果數據據庫開啟閃回恢復區,閃回恢復區就是預設的歸檔地址,我個人建議使用這個空間存放歸檔日誌,因為從Oracle 11g開始當該空間的使用率達到80%的時候,系統會自動刪除已經備份過的歸檔文件,避免被撐爆。閃回恢復區的大小受db_recovery_file_dest_size大小的限制,是一個動態參數,可以隨時線上修改。

本實驗步驟如下:

  • 切換日誌,使REDO日誌歸檔。
SQL> alter system switch logfile;
System altered.
  
SQL> /
System altered.
  
SQL> /
System altered.
  • 按照歸檔日誌的時間,找到存放需要分析信息的歸檔日誌。
[oracle@stream 2012_03_21]$ pwd
/u01/app/oracle/flash_recovery_area/STREAM/archivelog/2012_03_21
  
[oracle@stream 2012_03_21]$ ll
total 32196
-rw-r----- 1 oracle oinstall 26598912 Mar 21 10:55 o1_mf_1_12_7pljs9lb_.arc
-rw-r----- 1 oracle oinstall  6206976 Mar 21 14:05 o1_mf_1_13_7plvx3bc_.arc
-rw-r----- 1 oracle oinstall   100864 Mar 21 14:07 o1_mf_1_14_7plw0bgo_.arc
-rw-r----- 1 oracle oinstall     1024 Mar 21 14:07 o1_mf_1_15_7plw0d0q_.arc
-rw-r----- 1 oracle oinstall     2048 Mar 21 14:07 o1_mf_1_16_7plw0gc1_.arc
  • 將歸檔日誌添加到LOGMNR。
SQL> exec dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/flash_recovery_area/STREAM/archivelog/2012_03_21/o1_mf_1_13_7plvx3bc_.arc',options=>dbms_logmnr.new);
  
PL/SQL procedure successfully completed.
  
SQL> exec dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/flash_recovery_area/STREAM/archivelog/2012_03_21/o1_mf_1_14_7plw0bgo_.arc',options=>dbms_logmnr.addfile);
  
PL/SQL procedure successfully completed.
  • 開始分析。
SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
  
PL/SQL procedure successfully completed.
  • 查看LOGMNR分析後的數據。
SQL> select timestamp,sql_redo from v$logmnr_contents where username='SCOTT' and table_name='T_TEST';
  
TIMESTAMP   SQL_REDO
  
---------   -----------------------------------------------------------------
  
21-MAR-12   create table t_test(id number,name varchar2(15));
  
21-MAR-12   insert into "SCOTT"."T_TEST"("ID","NAME") values ('1','stream');
  
21-MAR-12   insert into "SCOTT"."T_TEST"("ID","NAME") values ('2','dbdream');
  
21-MAR-12   update "SCOTT"."T_TEST" set "NAME" = 'streamsong' where "NAME" =
  
 'stream' and ROWID = 'AAAR7fAAEAAAADXAAA';
  
21-MAR-12   delete from "SCOTT"."T_TEST" where "ID" = '1' and "NAME" =
  
'streamsong' and ROWID = 'AAAR7fAAEAAAADXAAA';
  
21-MAR-12    delete from "SCOTT"."T_TEST" where "ID" = '2' and "NAME" =
  
'dbdream' and ROWID = 'AAAR7fAAEAAAADXAAB';
  
6 rows selected.
  • 結束LOGMNR操作。
SQL> exec dbms_logmnr.end_logmnr;
  
PL/SQL procedure successfully completed.

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 偶然中發現Android Studio的工程文件夾比ADT Bundle的大很多。用Android Studio新建一個空工程,工程文件夾大小為30M,運行一次後大小為40M。同樣用ADT Bundle新建一個空工程,工程文件夾大小為1.5M,運行一次後大小為3.8M。天哪!Android Stud ...
  • _checkAllIntroduceTextView = [[UITextView alloc] initWithFrame:CGRectMake(10, 0, kScreenWidth-20, kScreenHeight)]; _checkAllIntroduceTextView.backgrou ...
  • 首先就是你的Github主頁了. 第二步點擊進入一個repository(倉庫) 第三步點擊右上的setting 將此頁面滑動到最下麵找個這個 點擊刪除即可! ...
  • 該系列教程概述與目錄:http://www.cnblogs.com/chengyujia/p/5787111.html 一、繪製三角形 在上一篇文章中,我們已經新建了虛擬方向鍵的自定義控制項DirectionKeys類,下麵我們繼續。 本項目中的虛擬方向鍵的背景是4個三角形組成的矩形,其實是4個三角形 ...
  • 在webView的delegate回調方法 - (void)webViewDidFinishLoad:(UIWebView *)webView;中寫上一下語句即可 //字體大小 [webView stringByEvaluatingJavaScriptFromString:@"document.ge ...
  • 摘要: sybase版本:Sybase15(源端) Oracle版本:11g(目標端) Goldengate版本:11.2.0.1.0(源端),12c(目標端) 個人博客:www.czhiying.cn Goldengate同步原理: Oracle GoldenGate軟體是一種基於日誌的結構化數據 ...
  • Oracle的自動統計信息不收集直方圖的信息 在oracle9i中,預設的統計信息收集是不收集直方圖信息的,也就是說預設的 模式為 在10g開始, 包中預設的 做了調整,預設的 值為 這就說明,從10g開始,統計信息收集中的直方圖部分,收集與否是有oracle自從判斷,從實際的使用來看,oracle ...
  • OLTP:聯機事務處理,表示事務多,但執行大多較短,併發量大的資料庫,如日常的進銷存操作等; OLAP: 聯機分析處理,表示事務較少,但執行大多較長,併發量較小的資料庫,如基於數據倉庫的操作; OLTP 系統強調資料庫記憶體效率,強調記憶體各種指標的命令率,強調綁定變數,強調併發操作;OLAP 系統則強 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...