1. 程式人生 > >10.2.0.5環境dg測試logminer挖掘日誌分析

10.2.0.5環境dg測試logminer挖掘日誌分析

起因:客戶需求,資料庫正常每天總的日誌切換是20以內,有一天日誌切換總數,達到30,客戶建議使用Logminer進行日誌挖掘分析,到底什麼應用導致的問題。

說明:使用logminer進行日誌挖掘,只能挖掘出什麼物件表,dml操作多少次,而無法明確得到什麼應用佔用的日誌最多。只能提供很單項的東西,某個表dml操作次數,非常多。需要客戶結合實際應用,去判斷,到底什麼應用導致的問題。

 

環境說明:資料庫版本10.2.0.5 雙節點rac, 有一套dg 10.2.0.5,單例項。

測試說明:

1.dg 切換快照模式

2.使用logminer進行挖掘

3.dg切換還原為standby 備庫模式

 

 

一、dg切換快照模式

alter database recover managed standby database cancel;
ALTER SYSTEM SET db_recovery_file_dest_size=1024G SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest='/xxxx/實際情況選擇路徑' SCOPE=BOTH;
alter system set db_flashback_retention_target=9000 scope=both;
alter database flashback on;
create restore point flashback_dzswrac GUARANTEE flashback database;

#確認grant point已建立完畢之後,在進行dg角色更換
SQL> select * from v$restore_point;

#如下操作,切換備庫角色為主庫角色
alter database activate standby database; alter database open; alter system
set job_queue_processes=0; exit

 

二、使用logminer進行挖掘

 

 

1)選擇抓取,日誌切換頻率最高的時間節點,明確所需要挖掘的日誌時間節點


SQL>select to_char(completion_time,'YYYYMMDD HH24'),dest_id,thread#,name from v$archived_Log where dest_id=1 and completion_time between to_date('20190104 14','yyyymmdd hh24') and to_date('
20190104 19','yyyymmdd hh24') TO_CHAR(COM DEST_ID THREAD# NAME ----------- ---------- ---------- -------------------- 20190104 16 1 2 20190104 16 1 2 20190104 16 1 1 20190104 16 1 2 20190104 16 1 2 20190104 16 1 2 6 rows selected.
上述查詢,得到04日,一個小時,日誌切換了6次
COMPLETION_TIME 歸檔完成的時間

2)查詢日誌挖掘的檔名稱

select to_char(completion_time,'YYYYMMDD HH24:mi'),dest_id,thread#,name,deleted,status

from v$archived_Log
where dest_id=1 and completion_time between to_date('20190104 14','yyyymmdd hh24') and to_date('20190104 22','yyyymmdd hh24')
order by 1;
TO_CHAR(COMPLE DEST_ID THREAD# NAME DEL S
-------------- ---------- ---------- -------------------------------------------------- --- -
20190104 14:03 1 1 xxxx NO A
20190104 14:03 1 2 xxxx NO A
20190104 14:30 1 2 xxxx NO A
20190104 14:45 1 2 xxxx NO A
20190104 14:49 1 1 xxxx NO A
20190104 14:49 1 2 xxxx NO A
20190104 14:50 1 2 xxxx NO A

--如下忽略
20190104 15:03 1 2 xxxx NO A

 

3)logminer前提準備

新增儲存過程

@?/rdbms/admin/dbmslmd.sql
@?/rdbms/admin/dbmslm.sql
@?/rdbms/admin/dbmslms.sql
@?/rdbms/admin/prvtlm.plb

開啟最小補充日誌

select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI from v$database;

SQL> alter database add supplemental log data;

Database altered.

SQL> select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI from v$database;

SUPPLEME SUP SUP
-------- --- ---
YES NO NO

LOGMNR 分析日誌,需要建立一個數據字典,這個資料字典可以儲存在外部檔案(external file) 或者redo log 中。 如果要儲存在外部檔案中,資料庫引數utl_file_dir 需要配置,並重啟資料庫。

SQL> alter system set utl_file_dir='*' scope=spfile;
SQL> shutdown immediate;
SQL> startup

SQL> show parameter utl_file

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir string *
SQL> execute dbms_logmnr_d.build(dictionary_filename=>'dict.ora',dictionary_location=>'/data/newdg/logminer_ctr_directory/');

PL/SQL procedure successfully completed.

 

 #或者使用redo log 儲存資料字典

#使用redo log 儲存資料字典不需要重啟資料庫,也不需要配置任何引數,這種方式比較靈活.直接可以建立資料字典到redo檔案。

#dbms_logmnr_d.build(options => dbms_logmnr_d.STORE_IN_REDO_LOGS);

 

4)使用logminer 挖掘日誌

第一個
exec dbms_logmnr.add_logfile('/xxx.xxxdbf',dbms_logmnr.new);

第二個
exec dbms_logmnr.add_logfile('xxx.xxxxdbf',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('/xxx.xxxdbf',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('/dxxx14.dbf',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('/xxx.dxxxbf',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('xxx814x.dbf',dbms_logmnr.addfile);
exec dbms_logmnr.add_logfile('/xxxxxx.dbf',dbms_logmnr.addfile);

註冊到日誌檔案中

execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

由於記錄處於不穩定狀態,可以建立一個臨時表,儲存挖掘記錄

create table logmnr_04_14_one_date as select * from v$logmnr_contents;

結束

EXECUTE dbms_logmnr.end_logmnr;

5)SQL查詢結果

main.sql 設定環境,呼叫具體執行指令碼(蓋老師指令碼,輸出xls格式列表清晰明瞭)

set line 200
set term off verify off feedback off pagesize 999
set markup html on entmap on spool on preformat off
spool log_20190104_14_15.xls
select username,SEG_OWNER,SEG_NAME,seg_type_name,OPERATION_CODE,count(*)
from logmnr_04_14_one_date group by username,SEG_OWNER,SEG_NAME,seg_type_name,
OPERATION_CODE order by 6 asc;
spool off

exit

 

三、DG恢復shutdown immediate;

startup mount;
flashback database to restore point flashback_dzswrac;
alter database convert to physical standby;
shutdown immediate;
startup mount;
alter database recover managed standby database disconnect from session;
--根據日誌等資訊,mgr確認已使用,且已恢復之後,在刪除閃回日誌,一定要確認完畢
DROP RESTORE POINT flashback_dzswrac; alter database flashback off; ALTER SYSTEM SET db_recovery_file_dest
='' SCOPE=BOTH; exit