溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle Logminer的介紹以及用法是怎樣的

發(fā)布時間:2021-10-09 11:28:08 來源:億速云 閱讀:336 作者:柒染 欄目:開發(fā)技術

這篇文章將為大家詳細講解有關Oracle Logminer的介紹以及用法是怎樣的,文章內(nèi)容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

一、Logminer是什么?

LogMiner 是Oracle公司從產(chǎn)品8i以后提供的一個實際非常有用的分析工具,使用該工具可以輕松獲得Oracle 重做日志文件(歸檔日志文件)中的具體內(nèi)容,LogMiner分析工具實際上是由一組PL/SQL包和一些動態(tài)視圖組成,它作為Oracle數(shù)據(jù)庫的一部分來發(fā)布,是oracle公司提供的一個完全免費的工具。

具體的說: 對用戶數(shù)據(jù)或數(shù)據(jù)庫字典所做的所有更改都記錄在Oracle重做日志文件RedoLog中,Logminer就是一個解析RedoLog的工具,通過Logminer解析RedoLog可以得到對應的SQL數(shù)據(jù)。

Oracle 中的RedoLog寫入流程: Oracle重做日志采用循環(huán)寫入的方式,每一個Oracle實例至少擁有2組日志組。Oracle重做日志一般由Oracle自動切換,重做日志文件在當LGWR進程停止寫入并開始寫入下一個日志組時發(fā)生切換,或在用戶收到發(fā)出ALTER SYSTEM SWITCH LOGFILE時發(fā)生切換。如果Oracle數(shù)據(jù)庫開啟了歸檔功能,則在日志組發(fā)生切換的時候,上一個日志組的日志文件會被歸檔到歸檔目錄里。

從上面可知 Oracle里的RedoLog文件分為兩種:

  • 當前寫的日志組的文件,可通過v$logv$logfile得到

  • 歸檔的redoLog文件,可通過 v$archived_log 得到

通過循環(huán)查找到最新符合要求的RedoLog并讓Logminer加載分析,分析的數(shù)據(jù)在視圖 v$logmnr_contents 里,通過讀取 v$logmnr_contents 就可以得到 Oracle的實時數(shù)據(jù)。

二、Logminer快速使用

配置Logminer請參考Oracle配置LogMiner文檔。

#1、準備測試數(shù)據(jù)(test用戶)
SQL> conn test/123456
SQL> CREATE TABLE test(id varchar2(100));   
INSERT INTO test (id) values  ('000001');  
INSERT INTO test (id) values  ('000011');
commit;

說明:一下步驟皆在logminer_test用戶下執(zhí)行
#2、查看數(shù)據(jù)庫當前聯(lián)機日志文件
SQL>SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;
#發(fā)現(xiàn)只有redo001是當前狀態(tài)。

#3、將需要解析的在線日志文件加入
SQL>exec dbms_logmnr.add_logfile('/home/oracle/app/oracle/oradata/orcl11g/redo01.log', dbms_logmnr.new);

#4、啟動Logminer
SQL>
begin
SYS.DBMS_LOGMNR.START_LOGMNR (
options => SYS.DBMS_LOGMNR.skip_corruption + 
SYS.DBMS_LOGMNR.no_sql_delimiter + 
SYS.DBMS_LOGMNR.no_rowid_in_stmt + 
SYS.DBMS_LOGMNR.dict_from_online_catalog + 
SYS.DBMS_LOGMNR.string_literals_in_stmt 
);
end;
 
#5、查詢重做日志
SQL>select * from V$LOGMNR_CONTENTS;

#6、停止Logminer
SQL>exec dbms_logmnr.end_logmnr;

三、Logminer的具體使用

 1.配置Logminer

請參考Oracle配置LogMiner文檔。

2.使用Logminer

1.指定LogMiner字典。
2.指定重做日志文件列表以進行分析。 使用 DBMS_LOGMNR.ADD_LOGFILE 過程,或指示LogMiner在啟動LogMiner時自動創(chuàng)建要分析的日志文件列表(在步驟3中)。
3.啟動LogMiner。 使用 DBMS_LOGMNR.START_LOGMNR 程序。
4.請求感興趣的重做數(shù)據(jù)。 查詢V$LOGMNR_CONTENTS視圖。(您必須具有SELECT ANY TRANSACTION查詢此視圖的權限)
5.結束LogMiner會話。 使用 DBMS_LOGMNR.END_LOGMNR程序。

3.Logminer字典

LogMiner字典作用

Oracle數(shù)據(jù)字典記錄當前所有表的信息,字段的信息等等。LogMiner使用字典將內(nèi)部對象標識符和數(shù)據(jù)類型轉換為對象名稱和外部數(shù)據(jù)格式。如果沒有字典,LogMiner將返回內(nèi)部對象ID,并將數(shù)據(jù)顯示為二進制數(shù)

INSERT INTO HR.JOBS(JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY)  VALUES('IT_WT','Technical Writer', 4000, 11000);

沒有字典,LogMiner將顯示:

insert into "UNKNOWN"."OBJ# 45522"("COL 1","COL 2","COL 3","COL 4") values
(HEXTORAW('45465f4748'),HEXTORAW('546563686e6963616c20577269746572'),
HEXTORAW('c229'),HEXTORAW('c3020b'));

Logminer字典選項

LogMiner字典的選項支持三種:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-R2CA7hWc-1633660733574)(http://note.youdao.com/yws/res/612/WEBRESOURCEb0b3ba1b987bc083fc09c6dae89c77e2)]

4.指定Logminer重做日志文件

要啟動新的重做日志文件列表,需要使用 DBMS_LOGMNR.NEW 以表明這是新列表的開始

EXECUTE DBMS_LOGMNR.ADD_LOGFILE( 
   LOGFILENAME => '/oracle/logs/log1.dbf',
   OPTIONS => DBMS_LOGMNR.NEW);

可以使用下列語句額外再添加日志文件

EXECUTE DBMS_LOGMNR.ADD_LOGFILE( 
   LOGFILENAME => '/oracle/logs/log2.dbf', 
   OPTIONS => DBMS_LOGMNR.ADDFILE);

5.啟動LogMiner

使用 DBMS_LOGMNR.START_LOGMN 啟動Logminer??梢灾付▍?shù):

指定LogMiner如何過濾返回的數(shù)據(jù)(例如,通過開始和結束時間或SCN值)

指定用于格式化LogMiner返回的數(shù)據(jù)的選項

指定要使用的LogMiner詞典

主要的參數(shù)有:

   OPTIONS參數(shù)說明:
     * DBMS_LOGMNR.SKIP_CORRUPTION - 跳過出錯的redlog
     * DBMS_LOGMNR.NO_SQL_DELIMITER - 不使用 ';'分割redo sql
     * DBMS_LOGMNR.NO_ROWID_IN_STMT - 默認情況下,用于UPDATE和DELETE操作的SQL_REDO和SQL_UNDO語句在where子句中包含“ ROWID =”。
     *                                但是,這對于想要重新執(zhí)行SQL語句的應用程序是不方便的。設置此選項后,“ ROWID”不會放置在重構語句的末尾
     * DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG - 使用在線字典
     * DBMS_LOGMNR.CONTINUOUS_MINE - 需要在生成重做日志的同一實例中使用日志
     * DBMS_LOGMNR.COMMITTED_DATA_ONLY - 指定此選項時,LogMiner將屬于同一事務的所有DML操作分組在一起。事務按提交順序返回。
     * DBMS_LOGMNR.STRING_LITERALS_IN_STMT - 默認情況下,格式化格式化的SQL語句時,SQL_REDO和SQL_UNDO語句會使用數(shù)據(jù)庫會話的NLS設置
     *                                       例如NLS_DATE_FORMAT,NLS_NUMERIC_CHARACTERS等)。使用此選項,將使用ANSI / ISO字符串文字格式

示例

EXECUTE DBMS_LOGMNR.START_LOGMNR( 
   STARTTIME => '01-Jan-2003 08:30:00', 
   ENDTIME => '01-Jan-2003 08:45:00', 
   OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + 
   DBMS_LOGMNR.CONTINUOUS_MINE);

6 在V$LOGMNR_CONTENTS中查詢感興趣的重做數(shù)據(jù)

Logminer會解析redoLog里的日志加載到 v L O G M N R C O N T E N T S 視 圖 里 , 我 們 只 需 要 使 用 s q l 查 詢 即 可 獲 取 對 應 數(shù) 據(jù) v LOGMNR_CONTENTS 視圖里,我們只需要使用 sql查詢 即可獲取對應數(shù)據(jù) v LOGMNRCONTENTS視圖里,我們只需要使用sql查詢即可獲取對應數(shù)據(jù)vLOGMNR_CONTENTS視圖相關字段 https://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1154.htm

主要字段有:

數(shù)據(jù)類型描述
SCNNUMBERoracle為每個已提交的事務分配唯一的scn
OPERATIONVARCHAR2(32)INSERT UPDATE DELETE DDL COMMIT ROLLBACK…
SEG_OWNERVARCHAR2(32)schema
TABLE_NAMEVARCHAR2(32)表名
TIMESTAMPDATE數(shù)據(jù)庫變動時間戳
SQL_REDOVARCHAR2(4000)重建的SQL語句,該語句等效于進行更改的原始SQL語句

示例

SELECT
    scn,
    timestamp,
    operation,
    seg_owner,
    table_name,
    sql_redo,
    row_id,
    csf
FROM
    v$logmnr_contents
WHERE
    scn > ?

關于Oracle Logminer的介紹以及用法是怎樣的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI