Oracle Logminer快速使用詳解
一、Logminer是什么?
LogMiner 是Oracle公司從產(chǎn)品8i以后提供的一個(gè)實(shí)際非常有用的分析工具,使用該工具可以輕松獲得Oracle 重做日志文件(歸檔日志文件)中的具體內(nèi)容,LogMiner分析工具實(shí)際上是由一組PL/SQL包和一些動(dòng)態(tài)視圖組成,它作為Oracle數(shù)據(jù)庫的一部分來發(fā)布,是oracle公司提供的一個(gè)完全免費(fèi)的工具。
具體的說: 對用戶數(shù)據(jù)或數(shù)據(jù)庫字典所做的所有更改都記錄在Oracle重做日志文件RedoLog中,Logminer就是一個(gè)解析RedoLog的工具,通過Logminer解析RedoLog可以得到對應(yīng)的SQL數(shù)據(jù)。
Oracle 中的RedoLog寫入流程: Oracle重做日志采用循環(huán)寫入的方式,每一個(gè)Oracle實(shí)例至少擁有2組日志組。Oracle重做日志一般由Oracle自動(dòng)切換,重做日志文件在當(dāng)LGWR進(jìn)程停止寫入并開始寫入下一個(gè)日志組時(shí)發(fā)生切換,或在用戶收到發(fā)出ALTER SYSTEM SWITCH LOGFILE時(shí)發(fā)生切換。如果Oracle數(shù)據(jù)庫開啟了歸檔功能,則在日志組發(fā)生切換的時(shí)候,上一個(gè)日志組的日志文件會被歸檔到歸檔目錄里。
從上面可知 Oracle里的RedoLog文件分為兩種:
- 當(dāng)前寫的日志組的文件,可通過
v$log和v$logfile得到 - 歸檔的redoLog文件,可通過
v$archived_log得到
通過循環(huán)查找到最新符合要求的RedoLog并讓Logminer加載分析,分析的數(shù)據(jù)在視圖 v$logmnr_contents 里,通過讀取 v$logmnr_contents 就可以得到 Oracle的實(shí)時(shí)數(shù)據(jù)。
二、Logminer快速使用
配置Logminer請參考Oracle配置LogMiner文檔。
#1、準(zhǔn)備測試數(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ù)庫當(dāng)前聯(lián)機(jī)日志文件
SQL>SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;
#發(fā)現(xiàn)只有redo001是當(dāng)前狀態(tài)。
#3、將需要解析的在線日志文件加入
SQL>exec dbms_logmnr.add_logfile('/home/oracle/app/oracle/oradata/orcl11g/redo01.log', dbms_logmnr.new);
#4、啟動(dòng)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.指定重做日志文件列表以進(jìn)行分析。 使用 DBMS_LOGMNR.ADD_LOGFILE 過程,或指示LogMiner在啟動(dòng)LogMiner時(shí)自動(dòng)創(chuàng)建要分析的日志文件列表(在步驟3中)。
3.啟動(dòng)LogMiner。 使用 DBMS_LOGMNR.START_LOGMNR 程序。
4.請求感興趣的重做數(shù)據(jù)。 查詢V$LOGMNR_CONTENTS視圖。(您必須具有SELECT ANY TRANSACTION查詢此視圖的權(quán)限)
5.結(jié)束LogMiner會話。 使用 DBMS_LOGMNR.END_LOGMNR程序。
3.Logminer字典
LogMiner字典作用
Oracle數(shù)據(jù)字典記錄當(dāng)前所有表的信息,字段的信息等等。LogMiner使用字典將內(nèi)部對象標(biāo)識符和數(shù)據(jù)類型轉(zhuǎn)換為對象名稱和外部數(shù)據(jù)格式。如果沒有字典,LogMiner將返回內(nèi)部對象ID,并將數(shù)據(jù)顯示為二進(jìn)制數(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字典選項(xiàng)
LogMiner字典的選項(xiàng)支持三種:
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-R2CA7hWc-1633660733574)(http://note.youdao.com/yws/res/612/WEBRESOURCEb0b3ba1b987bc083fc09c6dae89c77e2)]
4.指定Logminer重做日志文件
要啟動(dòng)新的重做日志文件列表,需要使用 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.啟動(dòng)LogMiner
使用 DBMS_LOGMNR.START_LOGMN 啟動(dòng)Logminer。可以指定參數(shù):
指定LogMiner如何過濾返回的數(shù)據(jù)(例如,通過開始和結(jié)束時(shí)間或SCN值)
指定用于格式化LogMiner返回的數(shù)據(jù)的選項(xiàng)
指定要使用的LogMiner詞典
主要的參數(shù)有:
OPTIONS參數(shù)說明:
* DBMS_LOGMNR.SKIP_CORRUPTION - 跳過出錯(cuò)的redlog
* DBMS_LOGMNR.NO_SQL_DELIMITER - 不使用 ';'分割redo sql
* DBMS_LOGMNR.NO_ROWID_IN_STMT - 默認(rèn)情況下,用于UPDATE和DELETE操作的SQL_REDO和SQL_UNDO語句在where子句中包含“ ROWID =”。
* 但是,這對于想要重新執(zhí)行SQL語句的應(yīng)用程序是不方便的。設(shè)置此選項(xiàng)后,“ ROWID”不會放置在重構(gòu)語句的末尾
* DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG - 使用在線字典
* DBMS_LOGMNR.CONTINUOUS_MINE - 需要在生成重做日志的同一實(shí)例中使用日志
* DBMS_LOGMNR.COMMITTED_DATA_ONLY - 指定此選項(xiàng)時(shí),LogMiner將屬于同一事務(wù)的所有DML操作分組在一起。事務(wù)按提交順序返回。
* DBMS_LOGMNR.STRING_LITERALS_IN_STMT - 默認(rèn)情況下,格式化格式化的SQL語句時(shí),SQL_REDO和SQL_UNDO語句會使用數(shù)據(jù)庫會話的NLS設(shè)置
* 例如NLS_DATE_FORMAT,NLS_NUMERIC_CHARACTERS等)。使用此選項(xiàng),將使用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 查 詢 即 可 獲 取 對 應(yīng) 數(shù) 據(jù) v LOGMNR_CONTENTS 視圖里,我們只需要使用 sql查詢 即可獲取對應(yīng)數(shù)據(jù) v LOGMNRCONTENTS視圖里,我們只需要使用sql查詢即可獲取對應(yīng)數(shù)據(jù)vLOGMNR_CONTENTS視圖相關(guān)字段 https://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1154.htm
主要字段有:
| 列 | 數(shù)據(jù)類型 | 描述 |
|---|---|---|
| SCN | NUMBER | oracle為每個(gè)已提交的事務(wù)分配唯一的scn |
| OPERATION | VARCHAR2(32) | INSERT UPDATE DELETE DDL COMMIT ROLLBACK… |
| SEG_OWNER | VARCHAR2(32) | schema |
| TABLE_NAME | VARCHAR2(32) | 表名 |
| TIMESTAMP | DATE | 數(shù)據(jù)庫變動(dòng)時(shí)間戳 |
| SQL_REDO | VARCHAR2(4000) | 重建的SQL語句,該語句等效于進(jìn)行更改的原始SQL語句 |
示例
SELECT
scn,
timestamp,
operation,
seg_owner,
table_name,
sql_redo,
row_id,
csf
FROM
v$logmnr_contents
WHERE
scn > ?
查詢出來的數(shù)據(jù)示例:

到此這篇關(guān)于Oracle Logminer使用的文章就介紹到這了,更多相關(guān)Oracle Logminer內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
oracle不能使用EM怎么辦 oracle11g如何正確安裝配置EM
這篇文章主要為大家詳細(xì)介紹了oracle不能使用EM的解決方法,oracle11g如何正確安裝配置EM,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Oracle 數(shù)據(jù)庫忘記sys與system管理員密碼重置操作方法
這篇文章主要介紹了Oracle 數(shù)據(jù)庫忘記sys與system管理員密碼重置操作,需要的朋友可以參考下2017-06-06
Oracle表字段有Oracle關(guān)鍵字出現(xiàn)異常解決方案
這篇文章主要介紹了Oracle表字段有Oracle關(guān)鍵字出現(xiàn)異常解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Oracle在表中有數(shù)據(jù)的情況下修改字段類型或長度的解決方法
這篇文章主要介紹了Oracle在表中有數(shù)據(jù)的情況下修改字段類型或長度,修改其某個(gè)字段的類型或改變他的長度,由于表中有數(shù)據(jù),不能直接修改,需要換個(gè)方法,接下來通過本文給大家介紹下解決方法,需要的朋友可以參考下2022-10-10
oracle停止數(shù)據(jù)庫后linux完全卸載oracle的詳細(xì)步驟
本文介紹了linux完全卸載oracle的詳細(xì)步驟,卸載前需使用SQL*PLUS停止數(shù)據(jù)庫和相關(guān)服務(wù),詳細(xì)步驟看下面說明,大家可以參考使用2014-01-01
ORACLE時(shí)間函數(shù)(SYSDATE)深入理解
有些朋友對ORACLE時(shí)間函數(shù)理解不是很透徹,接下來講詳細(xì)介紹,希望可以幫助到你們2012-12-12

