Oracle高可用之LogMiner
Oracle高可用之Logmnr
如果有一個DDL操作,你想知道是由哪個使用者發出來的。那麼,只要還有這個時間的歸檔日誌存在,就可以利用Logmnr來分析歸檔日誌。
利用Logmnr可以做如下事情:
查明資料庫的變更記錄,或者是進行變化分析,如有使用者懷疑自己的應用有問題,產生了大量的失誤,可以用Logmnr來分析這些事務,看看到底發生了些什麼事情。
偵察並更正使用者的誤操作,如有的使用者一不小心誤刪除了某個表,但是並不承認,這個時候就可利用Logmnr來分析是誰執行的DML或者是DDL操作。
DDL分析從Oracle 9i開始被支援。
找回失去的資料,當不能使用Flashback或使用Flashback受限的時候,我們可以考慮利用Logmnr來找回資料,這個時候,只需要有歸檔日誌即可。
兩種分析方式:
線上分析:在Oracle 9i之後,就可以利用資料庫的資料字典線上分析,直接在資料庫中分析歸檔、聯機日誌而不需要設定引數並重新啟動資料庫了。
離線分析:可以直接提取到重做日誌流中,它在日誌流中提供了操作當時的資料字典快照,這樣就可以實現離線分析。但是,資料庫並不會把Catalog資訊寫到每個聯機日誌中。在實際使用中,可以透過如下的語句來查詢哪些歸檔日誌寫有資料字典的快照資訊:
select name from v$archived_log where directory_begin=’YES’;
select name from v$archived_log where directory_end=’YES’;
因為這裡僅僅是一個當時的快照資訊,所以,如果我們要分析哪個時段的歸檔日誌,就選擇離這個分析的歸檔日誌最近的、包含DICTIONARY_BEGIN=’YES’的一個日誌,與包含dictionary_end=’YES’的一個日誌一起新增到分析的日誌中,這樣就可以脫離原來的資料庫來分析歸檔日誌了。
注意:
LogMiner分析出來的是後設資料(操作、物件等),如update table set a=a+10;實際影響了1000條資料,那麼Logmnr則返回1000條undo(redo)語句。
Logmnr包含的內容與資料字典
LogMiner包含兩個PL/SQL包和幾個檢視。
dbms_logmnr_d包:用於提取字典資訊到外部平面檔案或者是聯機日誌中去。
dbms_logmnr包:主要包含三個過程。
add_logfile:用來新增/刪除用於分析的日誌檔案;
start_logmnr:用來開啟日誌分析,而且,在9i/10g中,可以開啟很多不同的分析選項,如只分析提交資訊COMMITED_DATA_ONLY等;
end_logmnr:用來終止分析會話,它將回收LogMiner所佔用的記憶體。
如果普通使用者想使用以上的包,必須先在sys中授權才能使用:
grant execute on dbms_logmnr to piner;
在使用的時候最好也帶上字首sys。
與LogMiner相關的資料字典如下:
v$logmnr_dictionary:LogMiner可能使用的資料字典資訊,因logmnr可以有多個字典檔案,該檢視用於顯示這方面的資訊。
v$logmnr_parameters :當前LogMiner所設定的引數資訊。
v$logmnr_logs:當前用於分析的日誌列表。
v$logmnr_contents:日誌分析結果。
這些字典是session相關的,也就是說,你的分析結果在別的會話中是查詢不到的,因為它本身是個臨時表。如果想儲存分析結果,就可以採用create as table tmp_table as select * from v$logmnr_content的方式轉儲v$logmnr_contents的內容。
Logmnr的分析過程
alter system archive log current;
create table test (a int);
insert into test values (1);
insert into test values (2);
insert into test values (3);
commit;
delete from test;
commit;
alter system archive log current;
找出剛才兩次切換之間包含這些操作的歸檔日誌。
線上分析過程:
新增日誌:
exec sys.dbms_logmnr.add_logfile(LogFileName=>’/archive_log/archive/1_9.arc’,-
options=>dbms_logmnr.new);
分析日誌:
exec sys.dbms_logmnr.start_logmnr(options => sys.dbms_logmnr.dict_from_online_catalog);
如果還有更多日誌:
exec sys.dbms_logmnr.add_logfile (LogFileName=>’/archive_log/archive/1_10.arc’);
檢視分析結果:
select t.SCN ,t.TIMESTAMP,t.SEG_OWNER,t.OPERATION,
t.SQL_REDO,t.SQL_UNDO
from v$logmnr_contents t where t.seg_name=’TEST’;
結束分析,清空記憶體:
exec sys.dbms_logmnr.end_logmnr;
預設情況,Oracle 10gv$logmnr_contents臨時表空間使用的是SYSAUX表空間。
可以透過以下語句更改logmnr的特定表空間,防止sysaux表空間出現不夠。
exec sys.dbms_logmnr_d.set_tablespace(‘USERS’);
exec dbms_logmnr.start_logmnr(options =>’dbms_logmnr.dict_from_onlinr_catalog + -
dbms_logmnr.commited_data_only’);
這裡設定了commited_data_only,表示我們只提取已經提交的事務,而不是提取那麼沒有提交的事務。
alter session set nls_date_format=’yyyy-mm-dd hh24:mi:ss’
exec dbms_logmnr.start_logmnr(dictfilename=>’/oracle/database/dictionary.ora’, -
starttime =>’2007-04-11 08:30:00’,-
endtime=>’ 2007-04-11 08:45:00’);
表示只分析2007-04-11 08:30:00到2007-04-11 08:45:00這個時間段的日誌資訊。
Logmnr的限制 (10gR2中的限制):
BFILE datatype
Simple and nested abstract datatypes (ADTs)
Collections (nested tables and VARRAYs)
Object refs
XMLTYPE datatype
Tables using table compression
如果有一個DDL操作,你想知道是由哪個使用者發出來的。那麼,只要還有這個時間的歸檔日誌存在,就可以利用Logmnr來分析歸檔日誌。
利用Logmnr可以做如下事情:
查明資料庫的變更記錄,或者是進行變化分析,如有使用者懷疑自己的應用有問題,產生了大量的失誤,可以用Logmnr來分析這些事務,看看到底發生了些什麼事情。
偵察並更正使用者的誤操作,如有的使用者一不小心誤刪除了某個表,但是並不承認,這個時候就可利用Logmnr來分析是誰執行的DML或者是DDL操作。
DDL分析從Oracle 9i開始被支援。
找回失去的資料,當不能使用Flashback或使用Flashback受限的時候,我們可以考慮利用Logmnr來找回資料,這個時候,只需要有歸檔日誌即可。
兩種分析方式:
線上分析:在Oracle 9i之後,就可以利用資料庫的資料字典線上分析,直接在資料庫中分析歸檔、聯機日誌而不需要設定引數並重新啟動資料庫了。
離線分析:可以直接提取到重做日誌流中,它在日誌流中提供了操作當時的資料字典快照,這樣就可以實現離線分析。但是,資料庫並不會把Catalog資訊寫到每個聯機日誌中。在實際使用中,可以透過如下的語句來查詢哪些歸檔日誌寫有資料字典的快照資訊:
select name from v$archived_log where directory_begin=’YES’;
select name from v$archived_log where directory_end=’YES’;
因為這裡僅僅是一個當時的快照資訊,所以,如果我們要分析哪個時段的歸檔日誌,就選擇離這個分析的歸檔日誌最近的、包含DICTIONARY_BEGIN=’YES’的一個日誌,與包含dictionary_end=’YES’的一個日誌一起新增到分析的日誌中,這樣就可以脫離原來的資料庫來分析歸檔日誌了。
注意:
LogMiner分析出來的是後設資料(操作、物件等),如update table set a=a+10;實際影響了1000條資料,那麼Logmnr則返回1000條undo(redo)語句。
Logmnr包含的內容與資料字典
LogMiner包含兩個PL/SQL包和幾個檢視。
dbms_logmnr_d包:用於提取字典資訊到外部平面檔案或者是聯機日誌中去。
dbms_logmnr包:主要包含三個過程。
add_logfile:用來新增/刪除用於分析的日誌檔案;
start_logmnr:用來開啟日誌分析,而且,在9i/10g中,可以開啟很多不同的分析選項,如只分析提交資訊COMMITED_DATA_ONLY等;
end_logmnr:用來終止分析會話,它將回收LogMiner所佔用的記憶體。
如果普通使用者想使用以上的包,必須先在sys中授權才能使用:
grant execute on dbms_logmnr to piner;
在使用的時候最好也帶上字首sys。
與LogMiner相關的資料字典如下:
v$logmnr_dictionary:LogMiner可能使用的資料字典資訊,因logmnr可以有多個字典檔案,該檢視用於顯示這方面的資訊。
v$logmnr_parameters :當前LogMiner所設定的引數資訊。
v$logmnr_logs:當前用於分析的日誌列表。
v$logmnr_contents:日誌分析結果。
這些字典是session相關的,也就是說,你的分析結果在別的會話中是查詢不到的,因為它本身是個臨時表。如果想儲存分析結果,就可以採用create as table tmp_table as select * from v$logmnr_content的方式轉儲v$logmnr_contents的內容。
Logmnr的分析過程
alter system archive log current;
create table test (a int);
insert into test values (1);
insert into test values (2);
insert into test values (3);
commit;
delete from test;
commit;
alter system archive log current;
找出剛才兩次切換之間包含這些操作的歸檔日誌。
線上分析過程:
新增日誌:
exec sys.dbms_logmnr.add_logfile(LogFileName=>’/archive_log/archive/1_9.arc’,-
options=>dbms_logmnr.new);
分析日誌:
exec sys.dbms_logmnr.start_logmnr(options => sys.dbms_logmnr.dict_from_online_catalog);
如果還有更多日誌:
exec sys.dbms_logmnr.add_logfile (LogFileName=>’/archive_log/archive/1_10.arc’);
檢視分析結果:
select t.SCN ,t.TIMESTAMP,t.SEG_OWNER,t.OPERATION,
t.SQL_REDO,t.SQL_UNDO
from v$logmnr_contents t where t.seg_name=’TEST’;
結束分析,清空記憶體:
exec sys.dbms_logmnr.end_logmnr;
預設情況,Oracle 10gv$logmnr_contents臨時表空間使用的是SYSAUX表空間。
可以透過以下語句更改logmnr的特定表空間,防止sysaux表空間出現不夠。
exec sys.dbms_logmnr_d.set_tablespace(‘USERS’);
exec dbms_logmnr.start_logmnr(options =>’dbms_logmnr.dict_from_onlinr_catalog + -
dbms_logmnr.commited_data_only’);
這裡設定了commited_data_only,表示我們只提取已經提交的事務,而不是提取那麼沒有提交的事務。
alter session set nls_date_format=’yyyy-mm-dd hh24:mi:ss’
exec dbms_logmnr.start_logmnr(dictfilename=>’/oracle/database/dictionary.ora’, -
starttime =>’2007-04-11 08:30:00’,-
endtime=>’ 2007-04-11 08:45:00’);
表示只分析2007-04-11 08:30:00到2007-04-11 08:45:00這個時間段的日誌資訊。
Logmnr的限制 (10gR2中的限制):
BFILE datatype
Simple and nested abstract datatypes (ADTs)
Collections (nested tables and VARRAYs)
Object refs
XMLTYPE datatype
Tables using table compression
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23135684/viewspace-630421/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle LogMinerOracle
- [zt] Oracle LogMinerOracle
- Oracle logminer(轉)Oracle
- Oracle Logminer 說明Oracle
- Oracle logminer學習Oracle
- 【Oracle】Oracle logminer功能介紹Oracle
- 【MHA】mysql高可用之MHAMySql
- mysql高可用之keepalivedMySql
- ORACLE logminer 日誌挖掘Oracle
- (轉)Oracle Logminer 說明Oracle
- oracle之logminer的使用Oracle
- oracle 10g logminerOracle 10g
- 安裝oracle 的LogMinerOracle
- RabbitMQ 高可用之映象佇列MQ佇列
- 高可用之KeepAlive工作原理
- redis高可用之redis-SentinelRedis
- ORACLE的日誌挖掘 logminerOracle
- 記一次Oracle logminerOracle
- [zt] Oracle LogMiner 終結版Oracle
- Markdown高階使用之流程圖流程圖
- 使用oracle的logminer同步資料Oracle
- Oracle 12c logminer測試Oracle
- oracle9i logMiner的使用Oracle
- Oracle 10g Logminer clob bugOracle 10g
- MySQL高可用之GC-Galera Cluster for MySQLMySqlGC
- redis高可用之redis3.0叢集RedisS3
- Redis高可用之戰:主從架構Redis架構
- 高可用之戰:Redis Sentinal(哨兵模式)Redis模式
- oracle 10g中logminer的使用Oracle 10g
- MySQL高可用之MGC--MariaDB Galera ClusterMySqlGC
- postgresql高階應用之合併單元格SQL
- 高可用之限流-01-入門介紹
- opengauss高可用之keepalived配置 原創
- 捎帶手,簡單看看Oracle的LogMinerOracle
- oracle 9i logminer日誌分析01Oracle
- Oracle 10g Logminer 研究及測試Oracle 10g
- oracle logminer分析線上 離線日誌方法Oracle
- oracle logminer恢復truncate table的資料Oracle