logminer作為相關(guān)的日志分析工具集成與oracle中,我們可通過該工具清楚的分析重做相關(guān)日志和歸檔日志中的所有事物變化,并且可以準(zhǔn)確的確定各種DML和DDL操作的具體時(shí)間和SCN值。
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),海陽企業(yè)網(wǎng)站建設(shè),海陽品牌網(wǎng)站建設(shè),網(wǎng)站定制,海陽網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,海陽網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
通過logminer我們可以實(shí)現(xiàn):
1,確定數(shù)據(jù)的邏輯損壞的時(shí)間
2,跟蹤用戶執(zhí)行的事務(wù)變化操作
3,跟蹤表的DML操作
如果我們要分析歸檔日志,我們首先修改oracle歸檔日志的模式,我們要把默認(rèn)的歸檔路徑改成我們自己的路徑:
start mount;
alter database archivelog;
alter database open;
alter system set log_archive_dest_1='location=d:\oracle' scope=spfile;
alter system set log_archive_format='arch_%t_%s_%r.trc' scope=spfile;
查看我們修改過的歸檔路徑:
archive log list;
查看歸檔日志:
select name,dest_id from v$archived_log;
如果查詢的沒有更改,我們需要重啟一下數(shù)據(jù)庫(kù)
安裝logminer,安裝logminer需要我們安裝下面的幾個(gè)包:
$ORACLE_HOME/rdbms/admin/dbmslm.sql
$ORACLE_HOME/rdbms/admin/dbmslmd.sql
$ORACLE_HOME/rdbms/admin/dbmslms.sql
這幾個(gè)腳本必須是sys用戶運(yùn)行
@$ORACLE_HOME/rdbms/admin/dbmslm.sql
@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
@$ORACLE_HOME/rdbms/admin/dbmslms.sql
添加數(shù)據(jù)字典,需要添加參數(shù)utl_file_dir,
alter system set utl_file_dir='/home/oracle/dir' scope=spfile;
添加supplement logging
首先查看
select name,supplemental_log_data_min from v$database;是否是yes
YES為打開狀態(tài),會(huì)記錄session_info,username等信息
NO為關(guān)閉狀態(tài),不會(huì)記錄sesion_info,username等信息
添加
alter database add supplemental log data;
關(guān)閉
alter database drop supplemental log data;
重啟數(shù)據(jù)庫(kù),這樣我們剛才的兩個(gè)參數(shù)就會(huì)生效;
查看數(shù)據(jù)字典:
show parameter utl;
添加數(shù)據(jù)字典:
SQL begin
2 dbms_logmnr_d.build(
3 dictionary_filename='logminer_dict.dat',
4 dictionary_location='/home/oracle/logminer');
5 end;
6 /
PL/SQL procedure successfully completed.
或是:
execute dbms_logmnr_d.build(dictionary_filename='logminer_dict.dat',dictionary_location='/home/oracle/logminer');
創(chuàng)建登錄觸發(fā)器:
SQL create or replace trigger on_logon_tigger
2 after logon on database
3 begin
4 dbms_application_info.set_client_info(sys_context('userenv','ip_address'));
5 end;
6 /
Trigger created.
我們就可以在V$SESSION視圖的CLIENT_INFO列中看到新登錄的客戶端IP地址了。那么現(xiàn)在就可以在
添加要分析的歸檔日志文件
SQL begin
2 dbms_logmnr.add_logfile(
3 logfilename='/home/oracle/arch/arch_6_758944049_1.trc',options=dbms_logmnr.new);
4 end;
5 /
PL/SQL procedure successfully completed.
SQL begin
2 dbms_logmnr.add_logfile(
3 logfilename='/home/oracle/arch/arch_7_758944049_1.trc',
4 options=dbms_logmnr.addfile);
5 end;
6 /
PL/SQL procedure successfully completed.
切換歸檔日志:
alter system switch logfile;
開啟分析:
execute dmbs_logmnr.start_logmnr(dictfilename='/home/oracle/logminer/logminer_dict.dat');
或是:
execute dbms_logmnr.start_logmnr;
查詢歸檔日志:
SQL select name from v$archived_log;
NAME
--------------------------------------------------------------------------------
/home/oracle/arch/arch_6_758944049_1.trc
/home/oracle/arch/arch_7_758944049_1.trc
/home/oracle/arch/arch_8_758944049_1.trc
為了節(jié)約pga的空間,當(dāng)我們分析完日志后,移除不需要的日志:
SQL begin
2 dbms_logmnr.add_logfile(
3 logfilename='/home/oracle/arch/arch_7_758944049_1.trc',
4 options=dbms_logmnr.removefile);
5 end;
6 /
PL/SQL procedure successfully completed.
查詢結(jié)果在v$logmnr_contents;
查詢數(shù)據(jù)庫(kù)上面的操作
select scn,sql_redo,timestamp from v$logmnr.contents;
關(guān)閉分析
execute dbms_logmnr.stop_logmnr;
查詢的時(shí)候最好使用plsql查詢。
環(huán)境:
AIX6.1
Oracle 11g RAC
故障:
數(shù)據(jù)庫(kù)頻繁出現(xiàn)歸檔日志空間不夠,導(dǎo)致數(shù)據(jù)庫(kù)無法登陸的故障。一查發(fā)現(xiàn)原因是歸檔日志切換頻繁,操作系統(tǒng)空間不夠。
確定原因:
[aix01@oracle]/oracledf -g
Filesystem GB blocks Free %Used Iused %Iused Mounted on
/dev/hd4 0.50 0.28 44% 13674 17% /
/dev/hd2 3.00 0.67 78% 49208 23% /usr
/dev/hd9var 1.00 0.37 63% 9285 10% /var
/dev/hd3 2.00 1.03 49% 2407 1% /tmp
/dev/fwdump 1.00 0.99 2% 30 1% /var/adm/ras/platform
/dev/hd1 0.25 0.18 28% 465 2% /home
/dev/hd11admin 0.25 0.25 1% 5 1% /admin
/proc - - - - - /proc
/dev/hd10opt 0.50 0.28 44% 10241 14% /opt
/dev/livedump 0.25 0.25 1% 12 1% /var/adm/ras/livedump
/dev/oraclelv 30.00 11.29 63% 161681 6% /oracle
/dev/installlv 15.00 3.38 78% 6478 1% /install
/dev/crslv 10.00 3.35 67% 7807 1% /crs
/dev/wmsapplv 30.00 17.49 42% 15537 1% /wmprod
/dev/archivelv 29.25 29.25 1% 4 1% /arch1
/dev/backuplv 400.00 107.13 74% 306 1% /sysbackup
aix02:arch2 30.25 0.64 99% 3 1% /arch2
可以看到,/arch2里文件系統(tǒng)空間已經(jīng)達(dá)到99%,/arch2是用來存放歸檔日志的文件系統(tǒng),進(jìn)而導(dǎo)致數(shù)據(jù)庫(kù)出錯(cuò)。
提出問題:
這下問題來了,/arch2的空間是30G,每天備份腳本都會(huì)自動(dòng)rman備份歸檔日志,并自動(dòng)清除歸檔日志文件,按照正常情況下,數(shù)據(jù)庫(kù)不可能一天產(chǎn)生這么大的歸檔日志量。
如何查詢歸檔日志都是由什么應(yīng)用產(chǎn)生的,這就是logminer的用途。
使用方法:
-- 1.指定要分析的日志文件
exec sys.dbms_logmnr.add_logfile(logfilename = '/arch2/2_825_733092736.dbf',options = dbms_logmnr.new);
-- 2.使用本地的在線數(shù)據(jù)字典分析歸檔日志
exec sys.dbms_logmnr.start_logmnr(options = sys.dbms_logmnr.dict_from_online_catalog);
-- 3.查詢分析出來的歸檔日志內(nèi)容,例如統(tǒng)計(jì)最大修改量的Schema
select seg_owner,count(*) from v$logmnr_contents group by seg_owner;
-- 4.增加別的日志文件
exec sys.dbms_logmnr.add_logfile(logfilename='/arch2/2_825_733092736.dbf');
-- 5.結(jié)束分析歸檔日志
exec sys.dbms_logmnr.end_logmnr;
下面是具體的過程:
SQL exec sys.dbms_logmnr.add_logfile(logfilename = '/arch2/2_825_733092736.dbf',options = dbms_logmnr.new);
PL/SQL procedure successfully completed
SQL exec sys.dbms_logmnr.start_logmnr(options = sys.dbms_logmnr.dict_from_online_catalog);
PL/SQL procedure successfully completed
SQL select seg_owner,count(*) from v$logmnr_contents group by seg_owner;
SEG_OWNER COUNT(*)
-------------------------------- ----------
2237
SYS 688
TMS 60
SPHSY 70
SINOSYNEW 30
SINOSY 381
WAS 4551934
7 rows selected
SQL execute dbms_logmnr.end_logmnr ;
PL/SQL procedure successfully completed
結(jié)論:
從上面查詢結(jié)果可以看出操作量最大的用戶是WAS用戶,再具體看下v$logmnr_contents可以發(fā)現(xiàn)基本修改的內(nèi)容是一致的。
與開發(fā)人員溝通后,最終確認(rèn)是一個(gè)執(zhí)行update過程存在問題,where條件未正確定位到記錄,每執(zhí)行一次都會(huì)導(dǎo)致大規(guī)模的修改數(shù)據(jù)。
小鬼ODM / ODM ODM檔= I:\ odm.dmp FROMUSER = ODM TOUSER = ODM忽略= Y
,寫忽略的數(shù)據(jù)庫(kù)對(duì)象存在錯(cuò)誤,但您的數(shù)據(jù)可能會(huì)重復(fù)。不想重復(fù)的話:
1,出口,使用的查詢選項(xiàng),您需要更新的數(shù)據(jù)導(dǎo)出(如果您的數(shù)據(jù)來區(qū)分是否更新輸入字段)。
2,您的計(jì)算機(jī)將數(shù)據(jù)刪除(刪除或截?cái)?,截?cái)鄠€(gè)人建議),是最新的進(jìn)口數(shù)據(jù)。
3,將你的電腦ODM的所有對(duì)象時(shí),將自動(dòng)創(chuàng)建在imp。
oracle日志查看
一.oracle日志的路徑:
登錄:sqlplus
"/as
sysdba"
查看路徑:sql
select
*
from
v$logfile;
sql
select
*
from
v$logfile;(#日志文件路徑)
二.oracle日志文件包含哪些內(nèi)容:(日志的數(shù)量可能略有不同)
control01.ctl
example01.dbf
redo02.log
sysaux01.dbf
undotbs01.dbf
control02.ctl
redo03.log
system01.dbf
users01.dbf
control03.ctl
redo01.log
shttest.dbf
temp01.dbf
三.oracle日志的查看方法:
sqlselect
*
from
v$sql
(#查看最近所作的操作)
sqlselect
*
fromv
$sqlarea(#查看最近所作的操作)
oracle
數(shù)據(jù)庫(kù)的所有更改都記錄在日志中,從目前來看,分析oracle日志的唯一方法就是使用oracle公司提供的logminer來進(jìn)行,因?yàn)樵嫉娜罩拘畔⑽覀兏緹o法看懂,oracle8i后續(xù)版本中自帶了logminer,而logminer就是讓我們看懂日志信息的工具,通過這個(gè)工具可以:查明數(shù)據(jù)庫(kù)的邏輯更改,偵察并更正用戶的誤操作,執(zhí)行事后審計(jì),執(zhí)行變化分析。
1、打開oracle sql developer工具,沒有此工具的可以去oracle官網(wǎng)下載安裝即可,剛剛安裝完成的是沒有記錄的,只有使用工具執(zhí)行過后才會(huì)留下記錄可以查詢。打開之后不需要連接數(shù)據(jù)庫(kù)就可以查詢到sql記錄了。
2、在二級(jí)菜單中,選擇SQL歷史記錄選項(xiàng),或者按快捷鍵F8打開窗口。
3、默認(rèn)打開是會(huì)顯示在最下方的小窗口,在標(biāo)題欄雙擊鼠標(biāo)左鍵,即可最大化窗口,再次雙擊左鍵還原窗口。
4、最大化窗口之后,便于更好的查詢記錄結(jié)果,如圖所示,以往執(zhí)行的sql記錄都顯示出來了,可以在每個(gè)欄目標(biāo)題上單擊,進(jìn)行排序操作,一般可以點(diǎn)擊時(shí)間戳字段,按時(shí)間來排序查詢記錄。第二次點(diǎn)擊,可以切換順序和逆序。
5、最后一個(gè)字段是持續(xù)時(shí)間,點(diǎn)擊排序之后可以查詢出哪些sql語句最快,哪些sql語句執(zhí)行比較慢,需要優(yōu)先等。
6、對(duì)于一些不需要的sql記錄可以刪除的,因?yàn)橛涗浂嗔瞬槐阌诓樵?,沒有用的sql最好及時(shí)清除了。只需要選擇您需要?jiǎng)h除的記錄,然后點(diǎn)擊如圖所示的清除按鈕,在二次確認(rèn)彈框中選擇是,即可刪除。
7、在刪除按鈕后面就是一個(gè)搜索輸入框,在此處輸入搜索關(guān)鍵字可以模糊匹配到記錄,對(duì)于記不清的記錄,采用模糊搜索的方式查詢,效率非常高。工具會(huì)自動(dòng)根據(jù)我們輸入的關(guān)鍵字進(jìn)行篩選過濾的。
顯示歸檔日志信息
1,使用ARCHIVE LOG LIST命令可以顯示日志操作模式,歸檔位置,自動(dòng)歸檔機(jī)器要?dú)w檔的日志序列號(hào)等信息.
2顯示日志操作模式
SELECT name,log_mode FROM v$database;
3,顯示Oracle歸歸檔日志信息.
Col name format a46
Select name, swquence#, first_change# FROM v$archived_log;
Name用于表示Oracle歸歸檔日志文件名,sequence#用于表示歸檔日志對(duì)應(yīng)的日志序列號(hào),firs_change#用于標(biāo)識(shí)歸檔日志的起始SCN值.
4、執(zhí)行介質(zhì) 恢復(fù) 時(shí),需要使用歸檔日志文件,此四必須準(zhǔn)確定位歸檔日志的存放位置.通過查詢動(dòng)態(tài)性能視圖v$archive_dest可以取得歸檔日志所在目錄.
SELECT destination FROM v$archive dest;
5,顯示日志歷史信息
SELECT * FROM v$loghist;
THREAD#用于標(biāo)識(shí)重做線程號(hào),SEQUNCE#用于標(biāo)識(shí)日志序列號(hào),FIRST_CHANGE#用于標(biāo)識(shí)日志序列號(hào)對(duì)應(yīng)的起始SCN值,FIRST_TIME用于標(biāo)識(shí)起始SCN的發(fā)生時(shí)間.SWICTH_CHANGE#用于標(biāo)識(shí)日志切換的SCN值.
6.顯示歸檔進(jìn)程信息.
進(jìn)行日志切換時(shí),ARCH進(jìn)程會(huì)自動(dòng)將重做日志內(nèi)容復(fù)制到Oracle歸歸檔日志中,為了加快歸檔速度,應(yīng)該啟用多個(gè)ARCH進(jìn)程.通過查詢動(dòng)態(tài)性能視圖V$ARCHIVE_PROCESSES可以顯示所有歸檔進(jìn)程的信息!
SELECT * FROM v$archive_processes;
Porcess用于標(biāo)識(shí)ARCH進(jìn)程的編號(hào),status用于標(biāo)識(shí)ARCH進(jìn)程的狀態(tài)(ACTIVE:活動(dòng),STOPPED:未啟動(dòng)),log_sequence用于標(biāo)識(shí)正在進(jìn)行歸檔的日志序列號(hào),state用于標(biāo)識(shí)ARCH進(jìn)程的工作狀態(tài)