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】Oracle logminer功能介紹Oracle
- 使用oracle的logminer同步資料Oracle
- mysql高可用之keepalivedMySql
- 高可用之KeepAlive工作原理
- RabbitMQ 高可用之映象佇列MQ佇列
- Logminer日誌挖掘
- opengauss高可用之keepalived配置 原創
- 高可用之戰:Redis Sentinal(哨兵模式)Redis模式
- Markdown高階使用之流程圖流程圖
- Redis高可用之戰:主從架構Redis架構
- MySQL高可用之GC-Galera Cluster for MySQLMySqlGC
- MySQL高可用之MGC--MariaDB Galera ClusterMySqlGC
- Archive log mining steps(logminer to html)HiveHTML
- Logminer如何檢視日誌
- 高可用之限流-01-入門介紹
- postgresql高階應用之合併單元格SQL
- 使用 Oracle logminer 挖掘日誌恢復誤刪資料以及查詢操作者Oracle
- Spring Cloud Eureka Server高可用之:線上擴容SpringCloudServer
- MySQL高可用之MHA切換測試(switchover & failover)MySqlAI
- 高可用之SkybilityHA簡單介紹-行雲管家
- MongoDB高階應用之高可用方案實戰(4)MongoDB
- Redis高可用之哨兵機制實現細節Redis
- 【DB寶19】MySQL高可用之MHA功能測試MySql
- postgresql高階應用之行轉列&彙總求和SQL
- 高可用之限流-03-Semaphore 訊號量做限流
- 高可用之限流-05-slide window 滑動視窗IDE
- 架構高可用之限流-抽刀斷水水更流架構
- MongoDB高階應用之資料轉存與恢復MongoDB
- Redis 學習筆記(五)高可用之主從模式Redis筆記模式
- PostgreSQL高可用之Repmgr和Patroni部分場景對比SQL
- 【DB寶19】在Docker中使用MySQL高可用之MHADockerMySql
- Flinkx Logminer效能探測&優化之路優化
- logminer異機挖掘歸檔日誌
- 「Oracle」Oracle高階查詢介紹Oracle
- 高可用之限流-07-token bucket 令牌桶演算法演算法
- MongoDB高階應用之資料轉存與恢復(5)MongoDB
- 系統高可用之健康檢查和健康度量那些事
- 【DB寶45】MySQL高可用之MGR+Consul架構部署MySql架構
- [20180412]logminer使用問題(10g).txt