溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

oracle 11g logminer 進(jìn)行日志挖掘

發(fā)布時(shí)間:2020-08-08 04:26:14 來(lái)源:ITPUB博客 閱讀:248 作者:huangdazhu 欄目:關(guān)系型數(shù)據(jù)庫(kù)
Oracle LogMiner 是Oracle公司從產(chǎn)品8i以后提供的一個(gè)實(shí)際非常有用的分析工具,使用該工具可以輕松獲得Oracle 在線/歸檔日志文件中的具體內(nèi)容,特別是該工具可以分析出所有對(duì)于數(shù)據(jù)庫(kù)操作的DML和DDL語(yǔ)句。該工具特別適用于調(diào)試、審計(jì)或者回退某個(gè)特定的事務(wù)。
LogMiner可以用于日志的分析,跟蹤數(shù)據(jù)庫(kù)變化,回退數(shù)據(jù)庫(kù)變化,對(duì)部分誤操作數(shù)據(jù)進(jìn)行恢復(fù),誤操作人員賬號(hào)定位查看,結(jié)合工具完成基于日志事物級(jí)別增量數(shù)據(jù)傳輸。
1、LogMiner的安裝;
首先確認(rèn)一下咱們數(shù)據(jù)庫(kù)上是否有LogMiner安裝包,使用DBA用戶登錄數(shù)據(jù)庫(kù)查看是否有dbms_logmnr、dbms_logmnr_d包,如果沒(méi)有就需要咱們執(zhí)行下面的腳本安裝(必須以DBA用戶執(zhí)行安裝)。
1、SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
2、SQL>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
執(zhí)行完畢就完成了logminer的安裝,第一個(gè)腳本用來(lái)創(chuàng)建DBMS_LOGMNR包,該包用來(lái)分析日志文件。第二個(gè)腳本用來(lái)創(chuàng)建DBMS_LOGMNR_D包,該包用來(lái)創(chuàng)建數(shù)據(jù)字典文件。
2、數(shù)據(jù)庫(kù)的配置;
    查看一下數(shù)據(jù)庫(kù)是否在歸檔模式:
   SQL> archive log list;
如果數(shù)據(jù)庫(kù)處于非歸檔模式(No Archive Mode)。
將數(shù)據(jù)庫(kù)切換到歸檔模式:
1、關(guān)閉數(shù)據(jù)庫(kù)
SQL> shutdown immediate
SQL> startup mount;
SQL> alter database archivelog;
切換成功后打開(kāi)數(shù)據(jù)庫(kù)
SQL>alter database open;
接下來(lái),打開(kāi)數(shù)據(jù)庫(kù)的擴(kuò)充日志:supplemental logging(擴(kuò)充日志)在通常情況下,redo log 只記錄的進(jìn)行恢復(fù)所必需的信息,但是這些信息對(duì)于我們使用redo log進(jìn)行一些其他應(yīng)用時(shí)是不夠的,例如在 redo log中使用rowid唯一標(biāo)識(shí)一行而不是通過(guò)Primary key,如果我們?cè)诹硗獾臄?shù)據(jù)庫(kù)分析這些日志并想重新執(zhí)行某些dml時(shí)就可能會(huì)有問(wèn)題,因?yàn)椴煌臄?shù)據(jù)庫(kù)其rowid代表的內(nèi)容是不同的。在這時(shí)候就需要一些額外的信息(columns)加入redo log,這就是supplemental logging。
查看是否開(kāi)啟擴(kuò)充日志:
  SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;  
如果沒(méi)有沒(méi)有開(kāi)啟擴(kuò)充日志。
SQL> alter database add supplemental log data;
創(chuàng)建日志分析用的用戶并授權(quán):
CREATE  USER  logminer IDENTIFIED  BY   logminer ;
SQL> GRANT CONNECT, RESOURCE,DBA TO logminer;
3、LogMiner的配置;
使用oracle用戶建立一個(gè)logminer使用的目錄
cd  /u01/oracle/oradata
mkdir logminer


創(chuàng)建logminer字典文件路徑:
CREATE DIRECTORY utlfile AS '/u01/oracle/oradata/logminer';
  


alter system set utl_file_dir='/u01/oracle/oradata/logminer' scope=spfile;
  
重啟數(shù)據(jù)庫(kù)生效
shutdown immediate;
startup
show parameter utl_file_dir
4、開(kāi)始分析日志文件
      一、分析在線日志文件
      準(zhǔn)備測(cè)試數(shù)據(jù)
SQL> conn logminer/logminer
SQL> CREATE TABLE test(id varchar2(100));   
INSERT INTO test (id) values  ('000001');  
INSERT INTO test (id) values  ('000011');
commit;
   創(chuàng)建數(shù)據(jù)字典文件
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/u01/oracle/oradata/logminer');
  
查看數(shù)據(jù)庫(kù)當(dāng)前聯(lián)機(jī)日志文件
SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;


發(fā)現(xiàn)只有redo001是當(dāng)前狀態(tài)。
select * from v$logfile;
將需要解析的在線日志文件加入
exec dbms_logmnr.add_logfile('/u01/oracle/oradata/prod/redo01a.log', dbms_logmnr.new);
  
啟動(dòng)logminer進(jìn)行日志分析
exec dbms_logmnr.start_logmnr( dictfilename=>'/u01/oracle/oradata/logminer/dictionary.ora');
  
查看日志分析結(jié)果
SELECT sql_redo, sql_undo, seg_owner  FROMv$logmnr_contents
   WHERE seg_name='TEST' ANDseg_owner='LOGMINER';
二、分析歸檔日志
測(cè)試數(shù)據(jù)準(zhǔn)備


CREATE TABLE test2
        (id NUMBER(4) CONSTRAINT PK_test PRIMARY KEY,
         NAME VARCHAR2(10),
         JOB VARCHAR2(9),
         MGR NUMBER(4),
         HIREDATE DATE,
         SAL NUMBER(7,2),
        COMM NUMBER(7,2),
         DEPTNO NUMBER(2));


INSERT INTO test2 VALUES(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO test2 VALUES(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO test2 VALUES(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO test2 VALUES(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
COMMIT;
切換日志,將當(dāng)前日志歸檔后進(jìn)行分析
ALTER SYSTEM SWITCH LOGFILE;


查看歸檔日志文件
select sequence#, FIRST_CHANGE#, NEXT_CHANGE#,name fromv$archived_log order by sequence# desc;
創(chuàng)建數(shù)據(jù)字典文件
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/u01/oracle/oradata/logminer');


exec dbms_logmnr.add_logfile('/u01/oracle/product/11.2.0/dbhome_1/dbs/arch2_13_908343318.dbf', dbms_logmnr.new);
exec dbms_logmnr.start_logmnr(dictfilename=>'/u01/oracle/oradata/logminer/dictionary.ora');
查看分析結(jié)果
SELECT sql_redo, sql_undo, seg_owner  FROM v$logmnr_contents
   WHERE seg_name='TEST2' AND seg_owner='LOGMINER';


如果需要分析大量的歸檔日志,則如下:
BEGIN
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch2_13_908343318.dbf',
DBMS_LOGMNR.new );
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch2_13_908343318.dbf',
DBMS_LOGMNR.addfile );
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch2_13_908343318.dbf',
DBMS_LOGMNR.addfile );
END;
/
向AI問(wèn)一下細(xì)節(jié)

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

AI