Log Miner 挖挖挖
| Log Miner簡介
Log Miner是Oracle自Oracle 8i以後推出的一個可以分析資料庫redo log和archivelog內容的工具,可以透過日誌分析所有對資料庫的DDL和DML操作,也可以分析出操作的時間與操作時的SCN和進行操作的機器,對於DML操作還可以查詢出還原操作的sql。
| Log Miner組成
-
源資料庫 產生LogMiner分析的所有重做日誌檔案的資料庫
-
挖掘資料庫 是執行LogMiner分析時使用的資料庫。
-
LogMiner資料字典 是LogMiner使用字典將內部物件識別符號和資料型別轉換為可讀資料。如果沒有字典,Log Miner分析的結果會顯示為二進位制資料。
| Log Miner資料字典選項
當LogMiner分析重做資料時,需要一個資料字典將日誌的物件ID轉換為可讀資料。LogMiner提供了三個使用資料字典的方式。
1、使用線上目錄( Online Catalog)
使用catalog的資料字典,必須在源資料庫執行。啟動命令為:
SQL> execute dbms_logmnr.start_logmnr (
options
=>
dbms_logmnr.dict_from_online_catalog);
2、將LogMiner字典提取到archive log。啟動命令為:
SQL> execute dbms_logmnr_d.build(
options
=>
dbms_logmnr_d.store_in_redo_logs);
使用這種操作的
3、將LogMiner字典提取到作業系統檔案。啟動命令為:
SQL>
execute dbms_logmnr_d.build (
'directory_name'
,
'/xxx/xxx/'
,dbms_logmnr_d.store_in_flat_file);
使用這種方式的話,需要設定utl_file_dir引數,該引數需要重啟才能生效。
這個工具使用起來並不複雜。由於將Log Miner資料字典提取到作業系統檔案在未設定引數的情況下需要重啟資料庫,使用場景比較狹隘,所以以下測試場景為使用Online catalog資料字典模式和將字典提取到redo log。
| 測試場景
1、確認資料庫開啟了補充日誌
sys@RAC11G>
select
SUPPLEMENTAL_LOG_DATA_MIN from v$database;
SUPPLEME
--------
YES
--如果返回結果為
no
,透過以下命令開啟
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
注意:
在使用Log Miner分析的日誌檔案之前,必須啟用補充日誌。
啟用補充日誌時,會在重做日誌流中記錄其他資訊。如果不開啟,LogMiner的挖掘的一些資訊無法正常顯示。
2、建立測試表,並做一些DML與DDL操作
sys
@
RAC11G
> create table test1 (NAME varchar2(
20
), ID number);
Table
created
.
sys
@
RAC11G
>
insert
into test1 values(
'x'
,
'1'
);
1
row
created
.
sys
@
RAC11G
>
insert
into test1 values(
'xx'
,
'2'
);
1
row
created
.
sys
@
RAC11G
>
insert
into test1 values(
'xxx'
,
'3'
);
1
row
created
.
sys
@
RAC11G
>
commit
;
Commit
complete
.
sys
@
RAC11G
>
update
test1 set name =
'xxxx'
where id =
3
;
1
row
updated
.
sys
@
RAC11G
>
commit
;
Commit
complete
.
sys
@
RAC11G
>
truncate
table test1;
Table
truncated
.
3、切換歸檔日誌
sys@RAC11G>alter system
switch
logfile;
System altered.
sys@RAC11G>alter system
switch
logfile;
System altered.
--然後檢視最後生成的歸檔日誌
sys@RAC11G>select *
from
(select name
from
v$archived_log where name like
'%archive%'
order
by
SEQUENCE
# desc ) where rownum <3;
NAME
---------------------------------------------------------------------------------------------------------------------------------------
+DATADG/rac11g/archivelog/
2018
_10_14/thread_1_seq_293
.847.989533723
+DATADG/rac11g/archivelog/
2018
_10_14/thread_1_seq_292
.846.989533631
4、Log Miner新增需要分析的歸檔日誌
--新增日誌
sys@RAC11G> execute dbms_logmnr.add_logfile(logfilename=>
'+DATADG/rac11g/archivelog/2018_10_14/thread_1_seq_293.847.989533723'
,options=>dbms_logmnr.new);
PL/SQL
procedure
successfully
completed
.
--新增多個日誌,使用
DBMS_LOGMNR
.
ADDFILE
選項
sys
@
RAC11G
>
execute
dbms_logmnr
.
add_logfile
(logfilename=>
'+DATADG/rac11g/archivelog/2018_10_14/thread_1_seq_292.846.989533631'
,options=>DBMS_LOGMNR.ADDFILE)
;
PL/SQL
procedure
successfully
completed
.
5、啟動Log Miner
sys@RAC11G>execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
PL/SQL
procedure
successfully
completed
.
6、透過檢視v$logmnr_contents進行分析結果查詢
v$logmnr_contents只有在開啟了Log Miner後才可以進行查詢
select
to_char(
timestamp
,
'yyyy-mm-dd hh24:mm:ss'
),
operation,
username,
SESSION_INFO,
sql_redo
from
v$logmnr_contents
where
table_name =
'TEST1'
;
TO_CHAR(TIMESTAMP,' OPERATION USERNAME SESSION_INFO SQL_REDO
------------------- -------------------------------- --------------- --------------------------------------------------------------------------- ---------------------------------------------------------------------------
2018-10-14 22:10:50 DDL SYS login_username=SYS client_info= OS_username=oracle Machine_name=11gnode1 OS
create
table
test1 (
NAME
varchar2(
20
),
ID
number
);
_terminal=pts/5 OS_process_id=17273 OS_program_name=sqlplus@11gnode1 (TNS V
1-V3)
2018-10-14 22:10:29
INSERT
SYS
login_username=
SYS
client_info= OS_username=
oracle
Machine_name=
11
gnode1 OS
insert
into
"SYS"
.
"TEST1"
(
"NAME"
,
"ID"
)
values
(
'x'
,
'1'
);
_terminal=pts/5 OS_process_id=17273 OS_program_name=sqlplus@11gnode1 (TNS V
1-V3)
2018-10-14 22:10:33
INSERT
SYS
login_username=
SYS
client_info= OS_username=
oracle
Machine_name=
11
gnode1 OS
insert
into
"SYS"
.
"TEST1"
(
"NAME"
,
"ID"
)
values
(
'xx'
,
'2'
);
_terminal=pts/5 OS_process_id=17273 OS_program_name=sqlplus@11gnode1 (TNS V
1-V3)
2018-10-14 22:10:37
INSERT
SYS
login_username=
SYS
client_info= OS_username=
oracle
Machine_name=
11
gnode1 OS
insert
into
"SYS"
.
"TEST1"
(
"NAME"
,
"ID"
)
values
(
'xxx'
,
'3'
);
_terminal=pts/5 OS_process_id=17273 OS_program_name=sqlplus@11gnode1 (TNS V
1-V3)
2018-10-14 22:10:51
UPDATE
SYS
login_username=
SYS
client_info= OS_username=
oracle
Machine_name=
11
gnode1 OS
update
"SYS"
.
"TEST1"
set
"NAME"
=
'xxxx'
where
"NAME"
=
'xxx'
and
ROWID
=
'
_terminal=pts/5 OS_process_id=17273 OS_program_name=sqlplus@11gnode1 (TNS V AAAE6eAABAAAKHBAAC'
;
1-V3)
2018-10-14 22:10:12 DDL SYS login_username=SYS client_info= OS_username=oracle Machine_name=11gnode1 OS
truncate
table
test1;
_terminal=pts/5 OS_process_id=17273 OS_program_name=sqlplus@11gnode1 (TNS V
1-V3)
.
7、關閉Log Miner
EXECUTE
DBMS_LOGMNR.END_LOGMNR();
注意: Log Miner的資料只存在PGA中,如果查詢的會話斷開連線,Log Miner也會隨之關閉。
8、將資料字典提取到redo log
sys@RAC11G>EXECUTE DBMS_LOGMNR_D.BUILD (OPTIONS => DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
PL/SQL
procedure
successfully
completed
.
根據字典的大小,它可能包含在多個歸檔檔案中。如果已歸檔相關的重做日誌檔案,則可以找出包含提取的字典的開頭和結尾的歸檔日誌。可以查詢
V
$
ARCHIVED_LOG
檢視
sys
@
RAC11G
>
SELECT
NAME
FROM
V
$
ARCHIVED_LOG
WHERE
DICTIONARY_BEGIN
='
YES
';
NAME
---------------------------------------------------------------------------------------------------------------------------------------
+DATADG/rac11g/archivelog/
2018
_10_15/thread_1_seq_308.
869.989570647
sys@RAC11G>SELECT
NAME
FROM V$ARCHIVED_LOG WHERE DICTIONARY_END=
'YES'
;
NAME
---------------------------------------------------------------------------------------------------------------------------------------
+DATADG/rac11g/archivelog/
2018
_10_15/thread_1_seq_309.
871.989570649
9、新增包含資料字典的歸檔日誌以及需要分析的歸檔日誌
sys@RAC11G>execute dbms_logmnr.add_logfile(logfilename=>
'+DATADG/rac11g/archivelog/2018_10_15/thread_1_seq_308.869.989570647'
,options=>dbms_logmnr.new);
PL/SQL
procedure
successfully
completed
.
sys
@
RAC11G
>
execute
dbms_logmnr
.
add_logfile
(logfilename=>
'+DATADG/rac11g/archivelog/2018_10_15/thread_1_seq_309.871.989570649'
,options=>dbms_logmnr.addfile)
;
PL/SQL
procedure
successfully
completed
.
sys
@
RAC11G
>
execute
dbms_logmnr
.
add_logfile
(logfilename=>
'+DATADG/rac11g/archivelog/2018_10_14/thread_1_seq_293.847.989533723'
,options=>dbms_logmnr.addfile)
;
PL/SQL
procedure
successfully
completed
.
sys
@
RAC11G
>
execute
dbms_logmnr
.
add_logfile
(logfilename=>
'+DATADG/rac11g/archivelog/2018_10_14/thread_1_seq_292.846.989533631'
,options=>dbms_logmnr.addfile)
;
PL/SQL
procedure
successfully
completed
.
10、啟動Log Miner
sys@RAC11G> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.DICT_FROM_REDO_LOGS);
PL/SQL
procedure
successfully
completed
.
11、透過檢視v$logmnr_contents進行分析結果查詢
select
to_char(
timestamp
,
'yyyy-mm-dd hh24:mm:ss'
),
operation,
username,
SESSION_INFO,
sql_redo
from
v$logmnr_contents
7
where
table_name =
'TEST1'
;
TO_CHAR(TIMESTAMP,' OPERATION USERNAME
------------------- -------------------------------- ------------------------------
SESSION_INFO
---------------------------------------------------------------------------------------------------------------------------------------
SQL_REDO
---------------------------------------------------------------------------------------------------------------------------------------
2018-10-14 22:10:50 DDL SYS
login_username=SYS client_info= OS_username=oracle Machine_name=11gnode1 OS_terminal=pts/5 OS_process_id=17273 OS_program_name=sqlplus@
11gnode1 (TNS V1-V3)
create
table
test1 (
NAME
varchar2(
20
),
ID
number
);
2018-10-14 22:10:29
INSERT
SYS
login_username=
SYS
client_info= OS_username=
oracle
Machine_name=
11
gnode1 OS_terminal=pts/
5
OS_process_id=
17273
OS_program_name=sqlplus@
11
gnode1 (TNS V1-V3)
insert
into
"SYS"
.
"TEST1"
(
"COL 1"
,
"COL 2"
)
values
(HEXTORAW(
'78'
),HEXTORAW(
'c102'
));
2018-10-14 22:10:33
INSERT
SYS
login_username=
SYS
client_info= OS_username=
oracle
Machine_name=
11
gnode1 OS_terminal=pts/
5
OS_process_id=
17273
OS_program_name=sqlplus@
11
gnode1 (TNS V1-V3)
insert
into
"SYS"
.
"TEST1"
(
"COL 1"
,
"COL 2"
)
values
(HEXTORAW(
'7878'
),HEXTORAW(
'c103'
));
2018-10-14 22:10:37
INSERT
SYS
login_username=
SYS
client_info= OS_username=
oracle
Machine_name=
11
gnode1 OS_terminal=pts/
5
OS_process_id=
17273
OS_program_name=sqlplus@
11
gnode1 (TNS V1-V3)
insert
into
"SYS"
.
"TEST1"
(
"COL 1"
,
"COL 2"
)
values
(HEXTORAW(
'787878'
),HEXTORAW(
'c104'
));
2018-10-14 22:10:51
UPDATE
SYS
login_username=
SYS
client_info= OS_username=
oracle
Machine_name=
11
gnode1 OS_terminal=pts/
5
OS_process_id=
17273
OS_program_name=sqlplus@
11
gnode1 (TNS V1-V3)
update
"SYS"
.
"TEST1"
set
"COL 1"
= HEXTORAW(
'78787878'
)
where
"COL 1"
= HEXTORAW(
'787878'
)
and
ROWID
=
'AAAE6eAABAAAKHBAAC'
;
2018-10-14 22:10:12 DDL SYS
login_username=SYS client_info= OS_username=oracle Machine_name=11gnode1 OS_terminal=pts/5 OS_process_id=17273 OS_program_name=sqlplus@
11gnode1 (TNS V1-V3)
truncate
table
test1;
| Log Miner的一些限制
當然,這個工具也有一定的限制
-
源資料庫與挖掘資料庫
-
源資料庫和挖掘資料庫都必須在同一作業系統平臺上執行。
-
挖掘資料庫可以與源資料庫相同或完全獨立。
-
挖掘資料庫必須執行與源資料庫相同的版本或更高版本的Oracle資料庫軟體。
-
挖掘資料庫必須使用源資料庫使用的相同字符集(或字符集的超集)。
-
Log Miner 資料字典
-
資料字典必須由源資料庫生成。
-
歸檔日誌
-
每次分析的所有歸檔日誌必須由相同的源資料生成。
-
必須與同一資料庫關聯RESETLOGS SCN。
-
必須來自8i或更高版本的Oracle資料庫。
這些限制都不算苛刻,如果靈活使用這個工具的話,可以使歸檔日誌利用最大化,在關鍵時間有非常大的作用。
| 作者簡介
陳康,沃趣科技資料庫技術專家
主要參與公司產品實施、測試、維護以及最佳化。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2217182/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 以太坊原始碼分析(42)miner挖礦部分原始碼分析CPU挖礦原始碼
- go-ethereum原始碼解析-miner挖礦部分原始碼分析CPU挖礦Go原始碼
- 挖一挖@Bean這個東西Bean
- 比特幣CPU挖礦、GPU挖礦、礦池及礦機挖礦技術原理比特幣GPU
- 挖礦病毒
- 挖財招聘
- Stratum挖礦協議&XMR挖礦流量分析協議
- 嚴打“挖礦”,對“挖礦”活動零容忍
- EPK怎麼挖礦?EPK挖礦教程詳情
- ETH2.0,以太坊顯示卡挖礦還能挖多久,以太坊挖礦之路
- IPPswap丨DAPP質押挖礦/算力挖礦/LP挖礦系統開發詳情APP
- 支援雙系統挖礦,警惕新型挖礦病毒入侵
- IPP挖礦技術開發/Defi挖礦/IPPswap理財挖礦系統開發元件解析元件
- 挖礦難度
- 整治“挖礦”, 綠盟科技挖礦專項治理方案來助力
- 警惕國產挖礦木馬CPLMiner利用WMI駐留挖礦
- 幽默:大勺挖小碗
- linux挖礦處置Linux
- IPFS/Filecoin挖礦流程
- 線段覆蓋(挖
- 門羅挖礦JSJS
- DeFi 質押挖礦系統丨DeFi 質押挖礦系統
- IPP算力挖礦|IPPSWAP質押挖礦系統開發詳情
- IPP質押挖礦系統開發|IPPSWAP挖礦開發系統
- 利用WMI命令入侵挖礦,新型挖礦病毒Audliodg持續活躍中
- 區塊鏈挖礦演變史,一鍵挖礦逐漸成主流區塊鏈
- ULAB質押挖礦系統技術開發丨Defi質押挖礦dapp丨質押挖礦分紅詳情APP
- Filecoin: 挖礦流程掃盲
- 快速定位挖礦木馬 !
- 部分揹包問題(挖
- zigw挖礦病毒查殺
- Avive World算力挖礦系統開發|中本聰模式挖礦案例模式
- IPP算力挖礦系統開發技術|IPP挖礦模式開發模式
- IPPSWAP孵化器挖礦系統開發|IPP算力挖礦開發
- MDEX挖礦系統開發/MDEX流動性挖礦系統開發
- IPP算力質押挖礦系統開發|IPP算力挖礦開發
- Avive世界挖礦(vv)系統搭建開發|中本聰挖礦模式開發模式
- 活動 | 單個漏洞獎勵3w起,此時不挖何時挖!