起因:業務已知在之前某個時間點范圍內發生了可疑異常操作,希望通過日志挖掘來審查SQL動作
現狀:生產庫在線歸檔已備份后刪除,RMAN歸檔備份已經刷出超期的備份集文件
需求:通過RMAN還原歸檔到線上以進行日志挖掘
定位歸檔日志涉及范圍:
select * from v$archived_log l where to_date('2018-11-12 16:18:51','yyyy-mm-dd hh24:mi:ss') between L.FIRST_TIME and L.NEXT_TIME;
假設指定時段的歸檔日志已經被備份規則排除編錄並刪除,
如果備份也被排除編錄、但進行了異機或者磁盤備份則首先需要加回編錄:
CATALOG backuppiece '/u02/rmanbackup/181113_0215_L1_6201_arc_ECDBN_1pti31lf_1_1.rbf';
那么首先需要把歸檔從備份集還原到文件系統:
restore archivelog from logseq 31128 until logseq 31129 thread 1; --不加thread默認為1
再重新進行編錄:
CATALOG ARCHIVELOG '+FRA/archivelog/arc_ecdbpr_2_31129_928378592.arc';
下面是ORACLE日志挖掘的函數操作部分,
Begin SYS.DBMS_LOGMNR.ADD_LOGFILE( '+FRA/archivelog/arc_ecdbpr_2_31128_928378592.arc', sys.dbms_logmnr.New); SYS.DBMS_LOGMNR.ADD_LOGFILE( '+FRA/archivelog/arc_ecdbpr_2_31129_928378592.arc', sys.dbms_logmnr.AddFile); end; Begin SYS.DBMS_LOGMNR.START_LOGMNR( Options => sys.dbms_logmnr.DICT_FROM_ONLINE_CATALOG ); end; Select * From V$LOGMNR_CONTENTS Order by 1
接下來就是怎么從挖掘出的SQL內容里怎么找出業務跟蹤時段的操作單號等等了:
Select scn,timestamp,operation,seg_owner,table_name,sql_redo,SESSION#,SERIAL#,SESSION_INFO,CLIENT_ID,sql_undo From V$LOGMNR_CONTENTS lc where LC.SQL_REDO like '%DOC20181111550736%' Order by 1 ;