Oracle Logminer快速使用詳解
一、Logminer是什麼?
LogMiner 是Oracle公司從產品8i以後提供的一個實際非常有用的分析工具,使用該工具可以輕松獲得Oracle 重做日志文件(歸檔日志文件)中的具體內容,LogMiner分析工具實際上是由一組PL/SQL包和一些動態視圖組成,它作為Oracle數據庫的一部分來發佈,是oracle公司提供的一個完全免費的工具。
具體的說: 對用戶數據或數據庫字典所做的所有更改都記錄在Oracle重做日志文件RedoLog中,Logminer就是一個解析RedoLog的工具,通過Logminer解析RedoLog可以得到對應的SQL數據。
Oracle 中的RedoLog寫入流程: Oracle重做日志采用循環寫入的方式,每一個Oracle實例至少擁有2組日志組。Oracle重做日志一般由Oracle自動切換,重做日志文件在當LGWR進程停止寫入並開始寫入下一個日志組時發生切換,或在用戶收到發出ALTER SYSTEM SWITCH LOGFILE時發生切換。如果Oracle數據庫開啟瞭歸檔功能,則在日志組發生切換的時候,上一個日志組的日志文件會被歸檔到歸檔目錄裡。
從上面可知 Oracle裡的RedoLog文件分為兩種:
- 當前寫的日志組的文件,可通過
v$log
和v$logfile
得到 - 歸檔的redoLog文件,可通過
v$archived_log
得到
通過循環查找到最新符合要求的RedoLog並讓Logminer加載分析,分析的數據在視圖 v$logmnr_contents
裡,通過讀取 v$logmnr_contents
就可以得到 Oracle的實時數據。
二、Logminer快速使用
配置Logminer請參考Oracle配置LogMiner文檔。
#1、準備測試數據(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用戶下執行 #2、查看數據庫當前聯機日志文件 SQL>SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#; #發現隻有redo001是當前狀態。 #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時自動創建要分析的日志文件列表(在步驟3中)。
3.啟動LogMiner。 使用 DBMS_LOGMNR.START_LOGMNR 程序。
4.請求感興趣的重做數據。 查詢V$LOGMNR_CONTENTS視圖。(您必須具有SELECT ANY TRANSACTION查詢此視圖的權限)
5.結束LogMiner會話。 使用 DBMS_LOGMNR.END_LOGMNR程序。
3.Logminer字典
LogMiner字典作用
Oracle數據字典記錄當前所有表的信息,字段的信息等等。LogMiner使用字典將內部對象標識符和數據類型轉換為對象名稱和外部數據格式。如果沒有字典,LogMiner將返回內部對象ID,並將數據顯示為二進制數
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。可以指定參數:
指定LogMiner如何過濾返回的數據(例如,通過開始和結束時間或SCN值)
指定用於格式化LogMiner返回的數據的選項
指定要使用的LogMiner詞典
主要的參數有:
OPTIONS參數說明: * 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 =”。 * 但是,這對於想要重新執行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語句會使用數據庫會話的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中查詢感興趣的重做數據
Logminer會解析redoLog裡的日志加載到 v L O G M N R C O N T E N T S 視 圖 裡 , 我 們 隻 需 要 使 用 s q l 查 詢 即 可 獲 取 對 應 數 據 v LOGMNR_CONTENTS 視圖裡,我們隻需要使用 sql查詢 即可獲取對應數據 v LOGMNRCONTENTS視圖裡,我們隻需要使用sql查詢即可獲取對應數據vLOGMNR_CONTENTS視圖相關字段 https://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1154.htm
主要字段有:
列 | 數據類型 | 描述 |
---|---|---|
SCN | NUMBER | oracle為每個已提交的事務分配唯一的scn |
OPERATION | VARCHAR2(32) | INSERT UPDATE DELETE DDL COMMIT ROLLBACK… |
SEG_OWNER | VARCHAR2(32) | schema |
TABLE_NAME | VARCHAR2(32) | 表名 |
TIMESTAMP | DATE | 數據庫變動時間戳 |
SQL_REDO | VARCHAR2(4000) | 重建的SQL語句,該語句等效於進行更改的原始SQL語句 |
示例
SELECT scn, timestamp, operation, seg_owner, table_name, sql_redo, row_id, csf FROM v$logmnr_contents WHERE scn > ?
查詢出來的數據示例:
到此這篇關於Oracle Logminer使用的文章就介紹到這瞭,更多相關Oracle Logminer內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 通過LogMiner實現Oracle數據庫同步遷移
- MySQL中的隱藏列的具體查看
- PostgreSQL通過oracle_fdw訪問Oracle數據的實現步驟
- Oracle中的table()函數使用
- 快速學習Oracle觸發器和遊標