oracle 11g logminer 進行日誌挖掘
Oracle LogMiner 是Oracle公司從產品8i以後提供的一個實際非常有用的分析工具,使用該工具可以輕鬆獲得Oracle 線上/歸檔日誌檔案中的具體內容,特別是該工具可以分析出所有對於資料庫操作的DML和DDL語句。該工具特別適用於除錯、審計或者回退某個特定的事務。
LogMiner可以用於日誌的分析,跟蹤資料庫變化,回退資料庫變化,對部分誤運算元據進行恢復,誤操作人員賬號定位檢視,結合工具完成基於日誌事物級別增量資料傳輸。
1、LogMiner的安裝;
首先確認一下我們們資料庫上是否有LogMiner安裝包,使用DBA使用者登入資料庫檢視是否有dbms_logmnr、dbms_logmnr_d包,如果沒有就需要我們們執行下面的指令碼安裝(必須以DBA使用者執行安裝)。
1、SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
2、SQL>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
執行完畢就完成了logminer的安裝,第一個指令碼用來建立DBMS_LOGMNR包,該包用來分析日誌檔案。第二個指令碼用來建立DBMS_LOGMNR_D包,該包用來建立資料字典檔案。
2、資料庫的配置;
檢視一下資料庫是否在歸檔模式:
SQL> archive log list;
如果資料庫處於非歸檔模式(No Archive Mode)。
將資料庫切換到歸檔模式:
1、關閉資料庫
SQL> shutdown immediate
SQL> startup mount;
SQL> alter database archivelog;
切換成功後開啟資料庫
SQL>alter database open;
接下來,開啟資料庫的擴充日誌:supplemental logging(擴充日誌)在通常情況下,redo log 只記錄的進行恢復所必需的資訊,但是這些資訊對於我們使用redo log進行一些其他應用時是不夠的,例如在 redo log中使用rowid唯一標識一行而不是透過Primary key,如果我們在另外的資料庫分析這些日誌並想重新執行某些dml時就可能會有問題,因為不同的資料庫其rowid代表的內容是不同的。在這時候就需要一些額外的資訊(columns)加入redo log,這就是supplemental logging。
檢視是否開啟擴充日誌:
SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;
如果沒有沒有開啟擴充日誌。
SQL> alter database add supplemental log data;
建立日誌分析用的使用者並授權:
CREATE USER logminer IDENTIFIED BY logminer ;
SQL> GRANT CONNECT, RESOURCE,DBA TO logminer;
3、LogMiner的配置;
使用oracle使用者建立一個logminer使用的目錄
cd /u01/oracle/oradata
mkdir logminer
建立logminer字典檔案路徑:
CREATE DIRECTORY utlfile AS '/u01/oracle/oradata/logminer';
alter system set utl_file_dir='/u01/oracle/oradata/logminer' scope=spfile;
重啟資料庫生效
shutdown immediate;
startup
show parameter utl_file_dir
4、開始分析日誌檔案
一、分析線上日誌檔案
準備測試資料
SQL> conn logminer/logminer
SQL> CREATE TABLE test(id varchar2(100));
INSERT INTO test (id) values ('000001');
INSERT INTO test (id) values ('000011');
commit;
建立資料字典檔案
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/u01/oracle/oradata/logminer');
檢視資料庫當前聯機日誌檔案
SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;
發現只有redo001是當前狀態。
select * from v$logfile;
將需要解析的線上日誌檔案加入
exec dbms_logmnr.add_logfile('/u01/oracle/oradata/prod/redo01a.log', dbms_logmnr.new);
啟動logminer進行日誌分析
exec dbms_logmnr.start_logmnr( dictfilename=>'/u01/oracle/oradata/logminer/dictionary.ora');
檢視日誌分析結果
SELECT sql_redo, sql_undo, seg_owner FROMv$logmnr_contents
WHERE seg_name='TEST' ANDseg_owner='LOGMINER';
二、分析歸檔日誌
測試資料準備
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;
切換日誌,將當前日誌歸檔後進行分析
ALTER SYSTEM SWITCH LOGFILE;
檢視歸檔日誌檔案
select sequence#, FIRST_CHANGE#, NEXT_CHANGE#,name fromv$archived_log order by sequence# desc;
建立資料字典檔案
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/arch1_13_908343318.dbf', dbms_logmnr.new);
exec dbms_logmnr.start_logmnr(dictfilename=>'/u01/oracle/oradata/logminer/dictionary.ora');
檢視分析結果
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/arch1_13_908343318.dbf',
DBMS_LOGMNR.new );
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch1_13_908343318.dbf',
DBMS_LOGMNR.addfile );
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch1_13_908343318.dbf',
DBMS_LOGMNR.addfile );
END;
/
LogMiner可以用於日誌的分析,跟蹤資料庫變化,回退資料庫變化,對部分誤運算元據進行恢復,誤操作人員賬號定位檢視,結合工具完成基於日誌事物級別增量資料傳輸。
1、LogMiner的安裝;
首先確認一下我們們資料庫上是否有LogMiner安裝包,使用DBA使用者登入資料庫檢視是否有dbms_logmnr、dbms_logmnr_d包,如果沒有就需要我們們執行下面的指令碼安裝(必須以DBA使用者執行安裝)。
1、SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
2、SQL>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
執行完畢就完成了logminer的安裝,第一個指令碼用來建立DBMS_LOGMNR包,該包用來分析日誌檔案。第二個指令碼用來建立DBMS_LOGMNR_D包,該包用來建立資料字典檔案。
2、資料庫的配置;
檢視一下資料庫是否在歸檔模式:
SQL> archive log list;
如果資料庫處於非歸檔模式(No Archive Mode)。
將資料庫切換到歸檔模式:
1、關閉資料庫
SQL> shutdown immediate
SQL> startup mount;
SQL> alter database archivelog;
切換成功後開啟資料庫
SQL>alter database open;
接下來,開啟資料庫的擴充日誌:supplemental logging(擴充日誌)在通常情況下,redo log 只記錄的進行恢復所必需的資訊,但是這些資訊對於我們使用redo log進行一些其他應用時是不夠的,例如在 redo log中使用rowid唯一標識一行而不是透過Primary key,如果我們在另外的資料庫分析這些日誌並想重新執行某些dml時就可能會有問題,因為不同的資料庫其rowid代表的內容是不同的。在這時候就需要一些額外的資訊(columns)加入redo log,這就是supplemental logging。
檢視是否開啟擴充日誌:
SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;
如果沒有沒有開啟擴充日誌。
SQL> alter database add supplemental log data;
建立日誌分析用的使用者並授權:
CREATE USER logminer IDENTIFIED BY logminer ;
SQL> GRANT CONNECT, RESOURCE,DBA TO logminer;
3、LogMiner的配置;
使用oracle使用者建立一個logminer使用的目錄
cd /u01/oracle/oradata
mkdir logminer
建立logminer字典檔案路徑:
CREATE DIRECTORY utlfile AS '/u01/oracle/oradata/logminer';
alter system set utl_file_dir='/u01/oracle/oradata/logminer' scope=spfile;
重啟資料庫生效
shutdown immediate;
startup
show parameter utl_file_dir
4、開始分析日誌檔案
一、分析線上日誌檔案
準備測試資料
SQL> conn logminer/logminer
SQL> CREATE TABLE test(id varchar2(100));
INSERT INTO test (id) values ('000001');
INSERT INTO test (id) values ('000011');
commit;
建立資料字典檔案
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/u01/oracle/oradata/logminer');
檢視資料庫當前聯機日誌檔案
SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;
發現只有redo001是當前狀態。
select * from v$logfile;
將需要解析的線上日誌檔案加入
exec dbms_logmnr.add_logfile('/u01/oracle/oradata/prod/redo01a.log', dbms_logmnr.new);
啟動logminer進行日誌分析
exec dbms_logmnr.start_logmnr( dictfilename=>'/u01/oracle/oradata/logminer/dictionary.ora');
檢視日誌分析結果
SELECT sql_redo, sql_undo, seg_owner FROMv$logmnr_contents
WHERE seg_name='TEST' ANDseg_owner='LOGMINER';
二、分析歸檔日誌
測試資料準備
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;
切換日誌,將當前日誌歸檔後進行分析
ALTER SYSTEM SWITCH LOGFILE;
檢視歸檔日誌檔案
select sequence#, FIRST_CHANGE#, NEXT_CHANGE#,name fromv$archived_log order by sequence# desc;
建立資料字典檔案
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/arch1_13_908343318.dbf', dbms_logmnr.new);
exec dbms_logmnr.start_logmnr(dictfilename=>'/u01/oracle/oradata/logminer/dictionary.ora');
檢視分析結果
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/arch1_13_908343318.dbf',
DBMS_LOGMNR.new );
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch1_13_908343318.dbf',
DBMS_LOGMNR.addfile );
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch1_13_908343318.dbf',
DBMS_LOGMNR.addfile );
END;
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28869493/viewspace-2148815/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Logminer日誌挖掘
- logminer異機挖掘歸檔日誌
- 使用 Oracle logminer 挖掘日誌恢復誤刪資料以及查詢操作者Oracle
- Logminer如何檢視日誌
- 【REDO】Oracle 日誌挖掘,分析歸檔日誌線上日誌主要步驟Oracle
- oracle 11g檢視alert日誌方法Oracle
- 利用oracle的日誌挖掘實現回滾Oracle
- ORACLE 11G DATAGUARD 日誌中斷處理方案Oracle
- 歸檔日誌挖掘
- DM8 日誌挖掘
- 004 Nginx日誌挖掘accessLogNginx
- 【Oracle】Oracle logminer功能介紹Oracle
- 達夢資料庫使用DBMS_LOGMNR進行日誌挖掘詳細步驟資料庫
- logminer進行資料探勘分析測試
- oracle alert日誌Oracle
- 瀚高資料庫日誌挖掘方法資料庫
- 詳解Oracle AWR執行日誌分析工具Oracle
- oracle刪除日誌Oracle
- oracle歸檔日誌Oracle
- 使用oracle的logminer同步資料Oracle
- 利用DNS日誌進行MySQL盲注DNSMySql
- (上)挖掘傳統行業日誌大資料的無限價值行業大資料
- Oracle歸檔日誌清理Oracle
- 歸檔oracle alert日誌Oracle
- 基於事件日誌的流程挖掘簡介 - Chaudhuri事件
- 使用Java和Elastic Stack進行日誌分析JavaAST
- Gin 框架 - 使用 logrus 進行日誌記錄框架
- ABP 使用ElasticSearch、Kibana、Docker 進行日誌收集ElasticsearchDocker
- [20181112]11g 日誌傳輸壓縮模式.txt模式
- 關於11G DataGuard 日誌傳輸的案例
- [重慶思莊每日技術分享]-ORACLE 11G以上版本開啟追加日誌的命令Oracle
- .Net Core中使用DiagnosticSource進行日誌記錄
- WINDOWS下對NIGNX日誌檔案進行限制Windows
- 使用shell指令碼對Nginx日誌進行切分指令碼Nginx
- Oracle listener log 日誌分析方法Oracle
- Oracle告警日誌ora-04030Oracle
- 對比Elasticsearch,使用Doris進行高效日誌分析(上)Elasticsearch
- 對比Elasticsearch,使用Doris進行高效日誌分析(下)Elasticsearch
- Netflix 如何使用eBPF流日誌進行網路洞察?eBPF