您好,登錄后才能下訂單哦!
Oracle Logmnr這個工具怎么用這里就不詳細說,可以查看官方文檔,網上的文檔也一大堆,自己找吧。我這里就直接上干貨了。
--創建Oracle目錄
select * from dba_directories;
create directory archivelog_dir as '/archivelog1/temp_archivelog/';
--grant read, write on directory archivelog_dir to zhanghui;
--歸檔日志路徑信息表(tmp_archive_log),主要是保存要挖掘日志的路徑
--注:要為該表加狀態標志位,0為未挖掘,1為已挖掘
create table tmp_archive_log as
select name, 0 flag from v$archived_log
where first_time>=to_date('2012-12-25 13:55:00','yyyy-mm-dd hh34:mi:ss')
and first_time<to_date('2012-12-25 15:05:00','yyyy-mm-dd hh34:mi:ss');
--為挖掘日志出的內容創建表,并根據具體需要選擇要提取的字段
create table zhanghui.logmnr_contents
as
select timestamp,log_id,seg_owner,seg_name,table_name,username,operation,sql_redo,sql_undo from v$logmnr_contents where 1=2;
--批量處理挖掘日志,只分析幾個歸檔日志手動處理還好,如果要分析上百個,還手動搞,那就傻了,所以做事的講究方法,2分鐘1.5G的歸檔,分析兩個小時的,怎么玩?
--注:由于挖掘出的日志內容保存在內存中,操作會話退出就丟失了,故這里采用單個日志挖掘,然后將數據保存到一張表中,完成后commit。以免對DB的memory造成沖擊,影響性能,生產庫操作一定要保證不影響業務的情況下進行各類操作。
$ sqlplus / as sysdba
create procedure proc_logmnr_batch IS vCur sys_refcursor; v_sql_dirarclog varchar2(2000); v_sql_arclog varchar2(2000); begin open vCur for select name from zhanghui.tmp_archive_log where flag=0; loop fetch vCur into v_sql_dirarclog; exit when vCur%notfound; v_sql_arclog:='begin sys.dbms_logmnr.add_logfile (logfilename=>'''||v_sql_dirarclog||''',options=>sys.dbms_logmnr.NEW); end;'; execute immediate v_sql_arclog; begin sys.dbms_logmnr.start_logmnr(options =>dbms_logmnr.dict_from_online_catalog); end; insert into /*+ append */ zhanghui.logmnr_contents select timestamp,log_id,seg_owner,seg_name,table_name,username,operation,sql_redo,sql_undo from v$logmnr_contents --where table_name='<TABLE_NAME>' and OPERATION='DELETE'; begin sys.dbms_logmnr.end_logmnr; end; UPDATE zhanghui.tmp_archive_log set flag = 1 where name= v_sql_dirarclog; commit; end loop; --跑完了發條短信,調用短信接口 close vCur; EXCEPTION WHEN OTHERS THEN ROLLBACK; --報錯了發條短信,調用短信接口 --dbms_output.put_line(sqlerrm); END proc_logmnr_batch;
--采用操作系統調用存儲過程腳本
$cat proc_logmnr_batch.sh
#!/bin/bash sqlplus / as sysdba <<EOF set newpage 0 set linesize 1000 set pagesize 0 spool proc_logmnr_batch.txt; exec proc_logmnr_batch; spool off quit; EOF
--賦予執行權限
$chmod +x proc_logmnr_batch.sh
--后臺調用執行
$nohup ./proc_logmnr_batch.sh &
好了,等收到處理完成的短信,登錄數據庫查看即可。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。