oracle 歸檔日志
目前創(chuàng)新互聯(lián)已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、灞橋網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
歸檔日志(Archive Log)是非活動(dòng)的重做日志備份.通過(guò)使用歸檔日志,可以保留所有重做歷史記錄,當(dāng)數(shù)據(jù)庫(kù)處于ARCHIVELOG模式并進(jìn)行日志切換式,后臺(tái)進(jìn)程ARCH會(huì)將重做日志的內(nèi)容保存到歸檔日志中.當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)介質(zhì)失敗時(shí),使用數(shù)據(jù)文件備份,歸檔日志和重做日志可以完全恢復(fù)數(shù)據(jù)庫(kù).
日志操作模式:ARCHIVELOG NOARCHIVELOG
1,改變?nèi)罩静僮髂J?
檢查當(dāng)前日志操作模式
SELECT log_mode from v$database;
關(guān)閉數(shù)據(jù)庫(kù),然后裝載數(shù)據(jù)庫(kù)
SHUTDOWN IMMEDIATE
STARTUP MOUNT
改變?nèi)罩静僮髂J?然后打開(kāi)數(shù)據(jù)庫(kù)
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
2,執(zhí)行手工歸檔
從oracle database 10g開(kāi)始,當(dāng)將日志操作模式轉(zhuǎn)變未ARCHIVELOG模式時(shí),oracle會(huì)自動(dòng)啟動(dòng)ARCH進(jìn)程.如果要使用手工歸檔.那么在改變?nèi)罩静僮髂J綍r(shí)必須使用命令A(yù)LTER DATABASE ARCHIVELOG MANUAL.
需要注意,使用手工歸檔方式,數(shù)據(jù)庫(kù)管理員必須手工執(zhí)行歸檔命令.如果沒(méi)有執(zhí)行手工歸檔命令,日志組的原有內(nèi)容將不能被覆蓋.ALTER DATABASE ARCHIVELOG MANUAL 命令是為了與先前的版本兼容而保留的,.將來(lái)的oracle版本會(huì)淘汰該命令,使用手工歸檔方式是,數(shù)據(jù)庫(kù)管理員可以執(zhí)行以下命令歸檔重做日志:
ALTER SYSTEM ARCHIVELOG ALL;
3,配置歸檔進(jìn)程
初始化參數(shù)LOG_ARCHIVE_MAX_PROCESSES用于指定例程初始啟動(dòng)的最大歸檔進(jìn)程個(gè)數(shù),當(dāng)將數(shù)據(jù)庫(kù)轉(zhuǎn)變?yōu)锳RCHIVELOG模式時(shí),默認(rèn)情況下oracle會(huì)自動(dòng)啟動(dòng)兩個(gè)歸檔進(jìn)程.通過(guò)改變初始化參數(shù)LOG_ARCHIVE_MAX_PROCESS的值,可以動(dòng)態(tài)地增加或降低歸檔進(jìn)程的個(gè)數(shù):
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;配置歸檔位置和文件格式
當(dāng)數(shù)據(jù)庫(kù)處于ARCHIVELOG模式時(shí),如果進(jìn)行日志切換,后臺(tái)進(jìn)程將自動(dòng)生成歸檔日志,歸檔日志的默認(rèn)位置為%oracle_home%rdbms,在oracle database 10g中,歸檔日志的默認(rèn)文件格式為ARC%S_%R.%T.為了改變歸檔日志的位置和名稱格式,必須改變相應(yīng)的初始化參數(shù),1,初始化參數(shù)LOG_ARCHIVE_FORMAT用于指定歸檔日志的文件名格式,設(shè)置該初始化參數(shù)時(shí),可以指定以下匹配符:
%s: 日志序列號(hào):
%S: 日志序列號(hào)(帶有前導(dǎo)0)
%t: 重做線程編號(hào).
%T: 重做線程編號(hào)(帶有前導(dǎo)0)
%a: 活動(dòng)ID號(hào)
%d: 數(shù)據(jù)庫(kù)ID號(hào)
%r RESETLOGS的ID值.
從10g開(kāi)始,配置歸檔日志文件格式時(shí),必須帶有%s,%t和%r匹配符,配置了歸檔文件格式后,必須重啟數(shù)據(jù)庫(kù).
2,使用LOG_ARCHIVE_DEST配置歸檔位置
如果不使用備用數(shù)據(jù)庫(kù),只需要將歸檔日志存放到本地目錄.配置本地歸檔位置可以使用初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST,其中,第一個(gè)參數(shù)用于設(shè)置第一個(gè)歸檔位置,第二個(gè)參數(shù)用于指定第二個(gè)歸檔位置.
ALTER SYSTEM SET log_archive_dest='d:demoarchive1';ALTER SYSTEM SET log_archive_duplex_dest='d:demoarchive2';3,使用LOG_ARCHIVE_DEST_n配置多個(gè)歸檔位置.
初始化參數(shù)LOG_ARCHIVE_DEST_n用于指定多個(gè)歸檔位置,該參數(shù)最多可以指定10個(gè)歸檔位置.通過(guò)使用初始化參數(shù)LOG_ARCHIVE_DEST_n,不僅可以配置本地歸檔位置,還可以配置遠(yuǎn)程歸檔位置.
如果既要在主節(jié)點(diǎn)上生成歸檔日志,又要將歸檔日志傳遞到備用節(jié)點(diǎn),那么必須使用參數(shù)LOG_ARCHIVE_DEST_n.該參數(shù)與LOG_ARCHIVE_DEST具有如下區(qū)別;初始化參數(shù)LOG_ARCHIVE_DEST_n可以配置本地歸檔位置和遠(yuǎn)程歸檔位置,而初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST只能配置本地歸檔位置.
初始化參數(shù)LOG_ARCHIVE_DEST_n可以配置多達(dá)10個(gè)歸檔位置,而初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST最多只能配置兩個(gè)歸檔位置.
初始化參數(shù)LOG_ARCHIVE_DEST_n 不能與初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同時(shí)使用.
因?yàn)槌跏蓟瘏?shù)LOG_ARCHIVE_DEST_n不能與初始化參數(shù)LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST同時(shí)使用,所以必須禁用初始化參數(shù)LOG_ARCHVE_DEST和LOG_ARCHIVE_DUPLEX_DEST.當(dāng)使用初始化參數(shù)LOG_ARCHIVE_DEST_n配置本地歸檔位置時(shí),需要指定LOCALTION選項(xiàng).當(dāng)配置遠(yuǎn)程歸檔位置時(shí),需要指定SERVICE選項(xiàng).
示例如下:
ALTER SYSTEM SET log_archive_duplex_dest='';ALTER SYSTEM SET log_archive_dest='';
ALTER SYSTEM SET log_archive_dest_1='location=d:demoarchive1';ALTER SYSTEM SET log_archive_dest_2='location=d:demoarchive2';ALTER SYSTEM SET log_archive_dest_3='location=d:demoarchive3';ALTER SYSTEM SET log_archive_dest_4='service=standby';配置遠(yuǎn)程歸檔位置時(shí),SERVICE選項(xiàng)需要指定遠(yuǎn)程數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)服務(wù)名(在tnsnames.ora文件中配置)4,使用LOG_ARCHIVE_DEST_n選項(xiàng)
使用初始化參數(shù)LOG_ARCHIVE_DEST_n配置歸檔位置時(shí),可以在歸檔位置上指定OPTIONAL或MANDATORY選項(xiàng).指定MANDATORY選項(xiàng)時(shí),可以設(shè)置REOPEN屬性.
OPTIONAL:該選項(xiàng)是默認(rèn)選項(xiàng).使用該選項(xiàng)時(shí),無(wú)論歸檔是否成功,都可以覆蓋重做日志.
MANDATORY:強(qiáng)制歸檔.使用該選項(xiàng)時(shí),只有在歸檔成功之后,重做日志才能被覆蓋.
REOPEN:該屬性用于指定重新歸檔的時(shí)間間隔,默認(rèn)值為300秒,必須跟在MANDATORY后.
例:
Alter system set log_archive_dest_1=’location=d:demoarchive1 mandatory’;Alter system set log_archive_dest_2=’location=d:demoarchive2 mandatory reopen=500’;Alter system set log_archive_dest_3=’location=d:demoarchive3 optional’;5,控制本地歸檔成功的最小個(gè)數(shù).
使用初始化參數(shù)LOG_ARCHIVE_MIN_SUCCEED_DEST控制本地歸檔的最小成功個(gè)數(shù)Alter system set log_archive_min_succeed_dest=2;6,使用初始化參數(shù)LOG_ARCHIVE_DEST_STATE_n控制歸檔位置的可用性.設(shè)置該參數(shù)為ENABLE(默認(rèn)值),表示會(huì)激活相應(yīng)的歸檔位置;設(shè)置該參數(shù)為DEFER,表示禁用相應(yīng)歸檔位置.當(dāng)歸檔日志所在磁盤(pán)損壞或填滿時(shí),DBA需要暫時(shí)禁用該歸檔位置.
Alter system set log_archive_dest_state_3=defer;(禁用)Alter system set log_archive_dest_state_3=enable;(啟用)顯示歸檔日志信息
1,使用ARCHIVE LOG LIST命令可以顯示日志操作模式,歸檔位置,自動(dòng)歸檔機(jī)器要?dú)w檔的日志序列號(hào)等信息.
2顯示日志操作模式
SELECT name,log_mode FROM v$database;
3,顯示歸檔日志信息.
Col name format a46
Select name, swquence#, first_change# FROM v$archived_log;Name用于表示歸檔日志文件名,sequence#用于表示歸檔日志對(duì)應(yīng)的日志序列號(hào),firs_change#用于標(biāo)識(shí)歸檔日志的起始SCN值.
4、執(zhí)行介質(zhì)恢復(fù)時(shí),需要使用歸檔日志文件,此四必須準(zhǔn)確定位歸檔日志的存放位置.通過(guò)查詢動(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ù)制到歸檔日志中,為了加快歸檔速度,應(yīng)該啟用多個(gè)ARCH進(jìn)程.通過(guò)查詢動(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)==========================================用Oracle歸檔日志進(jìn)行恢復(fù)的方法
用Oracle歸檔日志進(jìn)行恢復(fù)的方法
聯(lián)機(jī)重演日志沒(méi)有丟失應(yīng)使用完成恢復(fù),如聯(lián)機(jī)重演日志損壞,而又沒(méi)有備份,就只能進(jìn)行不完全恢復(fù)。
一、完全恢復(fù):
1.使用命令“svrmgrl”調(diào)用行方式服務(wù)器管理;2.輸入命令“connect internal”,然后輸入命令“startup mount’;3.輸入命令“recover database;”
4.按下ENTER,接受默認(rèn)值。
5.然后輸入命令“alter database open;”完成數(shù)據(jù)庫(kù)恢復(fù)。
二、不完全恢復(fù)
警告:
應(yīng)用不完成恢復(fù)前,必須將數(shù)據(jù)庫(kù)做一次完全冷備份,因?yàn)閼?yīng)用不完全恢復(fù)后,聯(lián)機(jī)重演日志將重置,以前的所有日志不可用。
如果恢復(fù)不成功,數(shù)據(jù)庫(kù)就不能使用了。再次強(qiáng)調(diào),做完全冷備份后再應(yīng)用不完全恢復(fù)。
1).基于變化的恢復(fù)(change-based recovery)要執(zhí)行基于變化的恢復(fù),需要知道丟失日志之前的系統(tǒng)寫(xiě)入歸檔重演日志的最大的變化號(hào)(SCN),然后可以啟動(dòng)恢復(fù)語(yǔ)句恢復(fù)數(shù)據(jù)庫(kù)直到改變scn_number,其中比scn_number是寫(xiě)到已歸檔重演日志文件順序號(hào)386的SCN(即,小于丟失日志順序號(hào)387的SCN)。可以從V$log_history視圖中得到SCN信息。
select first_change# from v$log_history where sequence#=387;其中387為最后一個(gè)有效的日志文件號(hào)加1,該例是查找386.
知道了SCN后,使用下述步驟完成恢復(fù)
1.使用命令“svrmgrl”調(diào)用行方式服務(wù)器管理;2.輸入命令“connect internal”,然后輸入命令“startup mount’;3.輸入命令“recover database until change 9999;”
4.在回答Oracle第一個(gè)歸檔重演日志建議信息時(shí),輸入“auto”,Oracle在找到第387號(hào)重演日志之前停止恢復(fù)。
5.用命令“alter database open resetlogs;”打開(kāi)數(shù)據(jù)庫(kù)。(應(yīng)用該命令前請(qǐng)確認(rèn)數(shù)據(jù)庫(kù)已備份,如打開(kāi)失敗,日志將不可用)2).基于停止的恢復(fù)(cancel-based recovery)
1.使用命令“svrmgrl”調(diào)用行方式服務(wù)器管理;2.輸入命令“connect internal”,然后輸入命令“startup mount’;3.輸入命令“recover database until cancel;”,Oracle提示需要的第一個(gè)歸檔重演日志文件名.按下ENTER鍵接受缺省文件名,并且—路ENTER直到詢問(wèn)順序號(hào)387的日志。輸入“cancel”,停止恢復(fù)操作。
4.用命令“alter database open resetlogs;”打開(kāi)數(shù)據(jù)庫(kù)。(應(yīng)用該命令前請(qǐng)確認(rèn)數(shù)據(jù)庫(kù)已備份,如打開(kāi)失敗,日志將不可用)3).基于時(shí)間的恢復(fù)(time-based recovery)
為使用基于時(shí)間的恢復(fù),必須知道記錄在V$log_history歸檔重演日志序號(hào)387(丟失重演日志)的時(shí)間,通過(guò)執(zhí)行查詢語(yǔ)句“select time from v$log_history where sequence#=387;”得到。本例得到的時(shí)間是:2002-06-23 14:42:04現(xiàn)在開(kāi)始實(shí)施恢復(fù)。
1.使用命令“svrmgrl”調(diào)用行方式服務(wù)器管理;2.輸入命令“connect internal”,然后輸入命令“startup mount’;3.輸入命令“recover database until time '2002/06/23 14:42:04';”,Oracle提示需要的第一個(gè)歸檔重演日志文件名,輸入“auto”,Oracle恢復(fù)歸檔重演日志直到序號(hào)為387的日志,停止恢復(fù)操作。
4.用命令“alter database open resetlogs;”打開(kāi)數(shù)據(jù)庫(kù)。(應(yīng)用該命令前請(qǐng)確認(rèn)已數(shù)據(jù)庫(kù)已備份,如打開(kāi)失敗,日志將不可用)提示: 使用基于時(shí)間的恢復(fù),時(shí)間的格式是YYYY/MM/DD HH24:MI:SS,并且用單引號(hào)括起。
附:如何啟用Oracle的歸檔方式
1.參照以下內(nèi)容編輯init.ora文件:
log_archive_start = true
log_archive_dest_1 = " LOCATION=D:\Oracle\oradata\ORCL\archive "og_archive_format = %%ORACLE_SID%%T%TS%S.ARC2.關(guān)閉數(shù)據(jù)庫(kù)
svrmgrl connect internal
svrmgrl shutdown normal
3.然后啟動(dòng)實(shí)例并安裝該數(shù)據(jù)庫(kù),但不打開(kāi)數(shù)據(jù)庫(kù)。
svrmgrl startup mount
4.接著,發(fā)布下列更改數(shù)據(jù)庫(kù)的命令。
Svrmgrl alter database archivelog;
5.現(xiàn)在,數(shù)據(jù)庫(kù)已經(jīng)更改為歸檔方式,您可以打開(kāi)數(shù)據(jù)庫(kù)。
svrmgrl alter database open;
提示:也可以使用DBA studio工具啟用數(shù)據(jù)庫(kù)的歸檔方式,操作很簡(jiǎn)單=============================================================ORACLE歸檔模式的設(shè)置
在ORACLE 數(shù)據(jù)庫(kù)的開(kāi)發(fā)環(huán)境和測(cè)試環(huán)境中,數(shù)據(jù)庫(kù)的日志模式和自動(dòng)歸檔模式一般都是不設(shè)置的,這樣有利于系統(tǒng)應(yīng)用的調(diào)整,也免的生成大量的歸檔日志文件將磁盤(pán)空間大量的消耗。但在系統(tǒng)上線,成為生產(chǎn)環(huán)境時(shí),將其設(shè)置為日志模式并自動(dòng)歸檔就相當(dāng)重要了,因?yàn)椋@是保證系統(tǒng)的安全性,有效預(yù)防災(zāi)難的重要措施。這樣,通過(guò)定時(shí)備份數(shù)據(jù)庫(kù)和在兩次備份間隔之間的日志文件,可以有效的恢復(fù)這段時(shí)間的任何時(shí)間點(diǎn)的數(shù)據(jù),可以在很多時(shí)候挽回或最大可能的減少數(shù)據(jù)丟失。
一、 要使OARCLE 數(shù)據(jù)庫(kù)進(jìn)行日志的自動(dòng)歸檔,需要做兩方面的事情;1.是數(shù)據(jù)庫(kù)日志模式的設(shè)置(可為Archive Mode 和No Archive Mode);2.就是自動(dòng)歸檔模式設(shè)置(Automatic archival,可為Enabled 和Disabled)。
二、 如何查看數(shù)據(jù)庫(kù)的現(xiàn)行日志和自動(dòng)歸檔模式的設(shè)置可用archive log list 命令來(lái)查看。
運(yùn)行在日志自動(dòng)歸檔模式下的數(shù)據(jù)庫(kù)系統(tǒng)查看結(jié)果如下(一般是生產(chǎn)環(huán)境):
SQL archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /backup/archivelog
Oldest online log sequence 2131
Next log sequence to archive 2133
Current log sequence 2133
沒(méi)有啟動(dòng)數(shù)據(jù)庫(kù)日志模式和自動(dòng)歸檔的數(shù)據(jù)庫(kù)系統(tǒng)查看結(jié)果如下(一般是測(cè)試環(huán)境):
SQL archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /u01/app/oracle/product/8.1.7/dbs/archOldest online log sequence 194
Current log sequence 196
三. 數(shù)據(jù)庫(kù)日志模式的設(shè)置
在創(chuàng)建數(shù)據(jù)庫(kù)時(shí),可以在CREATE DATABASE 語(yǔ)句中指定數(shù)據(jù)庫(kù)的日志模式。假如沒(méi)有指明,則缺省為NOARCHIVELOG 模式。由于如果在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)指明是Archive Mode的話,會(huì)增加約20%的創(chuàng)建時(shí)間,而在以后啟動(dòng)INSTANCE 時(shí)再設(shè)置的話,一般只用去幾秒的時(shí)間,所以一般在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)是不設(shè)置為ARCHIVE MODE 的。
將數(shù)據(jù)庫(kù)的日志模式設(shè)置切換(Archive Mode 和No Archive Mode 之間的切換)的步驟和操作如下:
1. 關(guān)閉運(yùn)行的數(shù)據(jù)庫(kù)實(shí)例
SQL shutdown
在進(jìn)行日志模式切換之前,必須將運(yùn)行的數(shù)據(jù)庫(kù)正常關(guān)閉。
2. 備份數(shù)據(jù)庫(kù)
該備份跟以后產(chǎn)生的日志一起用于將來(lái)的災(zāi)難恢復(fù)(很重要,如要改為歸檔日志模式,沒(méi)有這個(gè)數(shù)據(jù)庫(kù)備份,僅有日志文件是無(wú)法從該時(shí)間點(diǎn)恢復(fù)的)。
3. 啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例到mount 狀態(tài),但不要打開(kāi)。
SQL startup mount
4. 切換數(shù)據(jù)庫(kù)日志模式。
SQL alter database archivelog;(設(shè)置數(shù)據(jù)庫(kù)為歸檔日志模式)或SQL alter database noarchivelog;(設(shè)置數(shù)據(jù)庫(kù)為非歸檔日志模式)5. 打開(kāi)數(shù)據(jù)庫(kù)
SQL alter database open;
6. 確認(rèn)數(shù)據(jù)庫(kù)現(xiàn)在處于歸檔日志模式。
SQL archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination for example: $ORACLE_HOME/dbs/archOldest on-line log sequence 275
Next log sequence 277
Current log sequence 278
7. 將這個(gè)時(shí)間點(diǎn)的redo logs 歸檔
SQL archive log all;
8. 確認(rèn)新產(chǎn)生的日志文件已在相應(yīng)的歸檔目錄下面。
四. 自動(dòng)歸檔模式設(shè)置(Automatic archival,可為Enabled 和Disabled)。
在該模式下,數(shù)據(jù)庫(kù)啟動(dòng)一個(gè)arch 進(jìn)程,專門負(fù)責(zé)將redo logs 寫(xiě)到系統(tǒng)歸檔設(shè)備的相應(yīng)目錄下。在數(shù)據(jù)庫(kù)的參數(shù)文件中設(shè)置參數(shù)(一般是在$ORACLE_HOME/dbs/init*.ora 文件中):
LOG_ARCHIVE_START=
LOG_ARCHIVE_DEST=
LOG_ARCHIVE_FORMAT=
LOG_ARCHIVE_START:
深入分析Oracle數(shù)據(jù)庫(kù)日志文件
作為Oracle DBA,我們有時(shí)候需要追蹤數(shù)據(jù)誤刪除或用戶的惡意操作情況,此時(shí)我們不僅需要查出執(zhí)行這些操作的數(shù)據(jù)庫(kù)賬號(hào),還需要知道操作是由哪臺(tái)客戶端(IP地址等)發(fā)出的。針對(duì)這些問(wèn)題,一個(gè)最有效實(shí)用而又低成本的方法就是分析Oracle數(shù)據(jù)庫(kù)的日志文件。本文將就Oracle日志分析技術(shù)做深入探討。
一、如何分析即LogMiner解釋
從目前來(lái)看,分析Oracle日志的唯一方法就是使用Oracle公司提供的LogMiner來(lái)進(jìn)行, Oracle數(shù)據(jù)庫(kù)的所有更改都記錄在日志中,但是原始的日志信息我們根本無(wú)法看懂,而LogMiner就是讓我們看懂日志信息的工具。從這一點(diǎn)上看,它和tkprof差不多,一個(gè)是用來(lái)分析日志信息,一個(gè)則是格式化跟蹤文件。通過(guò)對(duì)日志的分析我們可以實(shí)現(xiàn)下面的目的:
1、查明數(shù)據(jù)庫(kù)的邏輯更改;
2、偵察并更正用戶的誤操作;
3、執(zhí)行事后審計(jì);
4、執(zhí)行變化分析。
不僅如此,日志中記錄的信息還包括:數(shù)據(jù)庫(kù)的更改歷史、更改類型(INSERT、UPDATE、DELETE、DDL等)、更改對(duì)應(yīng)的SCN號(hào)、以及執(zhí)行這些操作的用戶信息等,LogMiner在分析日志時(shí),將重構(gòu)等價(jià)的SQL語(yǔ)句和UNDO語(yǔ)句(分別記錄在V$LOGMNR_CONTENTS視圖的SQL_REDO和SQL_UNDO中)。這里需要注意的是等價(jià)語(yǔ)句,而并非原始SQL語(yǔ)句,例如:我們最初執(zhí)行的是delete a where c1 cyx;,而LogMiner重構(gòu)的是等價(jià)的6條DELETE語(yǔ)句。所以我們應(yīng)該意識(shí)到V$LOGMNR_CONTENTS視圖中顯示的并非是原版的現(xiàn)實(shí),從數(shù)據(jù)庫(kù)角度來(lái)講這是很容易理解的,它記錄的是元操作,因?yàn)橥瑯邮莇elete a where c1 cyx;語(yǔ)句,在不同的環(huán)境中,實(shí)際刪除的記錄數(shù)可能各不相同,因此記錄這樣的語(yǔ)句實(shí)際上并沒(méi)有什么實(shí)際意義,LogMiner重構(gòu)的是在實(shí)際情況下轉(zhuǎn)化成元操作的多個(gè)單條語(yǔ)句。
另外由于Oracle重做日志中記錄的并非原始的對(duì)象(如表以及其中的列)名稱,而只是它們?cè)贠racle數(shù)據(jù)庫(kù)中的內(nèi)部編號(hào)(對(duì)于表來(lái)說(shuō)是它們?cè)跀?shù)據(jù)庫(kù)中的對(duì)象ID,而對(duì)于表中的列來(lái)說(shuō),對(duì)應(yīng)的則是該列在表中的排列序號(hào):COL 1, COL 2 等),因此為了使LogMiner重構(gòu)出的SQL語(yǔ)句易于識(shí)別,我們需要將這些編號(hào)轉(zhuǎn)化成相應(yīng)的名稱,這就需要用到數(shù)據(jù)字典(也就說(shuō)LogMiner本身是可以不用數(shù)據(jù)字典的,詳見(jiàn)下面的分析過(guò)程),LogMiner利用DBMS_LOGMNR_D.BUILD()過(guò)程來(lái)提取數(shù)據(jù)字典信息。
LogMiner包含兩個(gè)PL/SQL包和幾個(gè)視圖:
1、dbms_logmnr_d包,這個(gè)包只包括一個(gè)用于提取數(shù)據(jù)字典信息的過(guò)程,即dbms_logmnr_d.build()過(guò)程。
2、dbms_logmnr包,它有三個(gè)過(guò)程:
add_logfile(name varchar2, options number) - 用來(lái)添加/刪除用于分析的日志文件;
start_logmnr(start_scn number, end_scn number, start_time number,end_time number, dictfilename varchar2, options number) - 用來(lái)開(kāi)啟日志分析,同時(shí)確定分析的時(shí)間/SCN窗口以及確認(rèn)是否使用提取出來(lái)的數(shù)據(jù)字典信息。
end_logmnr() - 用來(lái)終止分析會(huì)話,它將回收LogMiner所占用的內(nèi)存。
與LogMiner相關(guān)的數(shù)據(jù)字典。
1、v$logmnr_dictionary,LogMiner可能使用的數(shù)據(jù)字典信息,因logmnr可以有多個(gè)字典文件,該視圖用于顯示這方面信息。
2、v$logmnr_parameters,當(dāng)前LogMiner所設(shè)定的參數(shù)信息。
3、v$logmnr_logs,當(dāng)前用于分析的日志列表。
4、v$logmnr_contents,日志分析結(jié)果。
二、Oracle9i LogMiner的增強(qiáng):
1、支持更多數(shù)據(jù)/存儲(chǔ)類型:鏈接/遷移行、CLUSTER表操作、DIRECT PATH插入以及DDL操作。在V$LOGMNR_CONTENTS的SQL_REDO中可以看到DDL操作的原句(CREATE USER除外,其中的密碼將以加密的形式出現(xiàn),而不是原始密碼)。如果TX_AUDITING初始化參數(shù)設(shè)為TRUE,則所有操作的數(shù)據(jù)庫(kù)賬號(hào)將被記錄。
2、提取和使用數(shù)據(jù)字典的選項(xiàng):現(xiàn)在數(shù)據(jù)字典不僅可以提取到一個(gè)外部文件中,還可以直接提取到重做日志流中,它在日志流中提供了操作當(dāng)時(shí)的數(shù)據(jù)字典快照,這樣就可以實(shí)現(xiàn)離線分析。
3、允許對(duì)DML操作按事務(wù)進(jìn)行分組:可以在START_LOGMNR()中設(shè)置COMMITTED_DATA_ONLY選項(xiàng),實(shí)現(xiàn)對(duì)DML操作的分組,這樣將按SCN的順序返回已經(jīng)提交的事務(wù)。
4、支持SCHEMA的變化:在數(shù)據(jù)庫(kù)打開(kāi)的狀態(tài)下,如果使用了LogMiner的DDL_DICT_TRACKING選項(xiàng),Oracle9i的LogMiner將自動(dòng)對(duì)比最初的日志流和當(dāng)前系統(tǒng)的數(shù)據(jù)字典,并返回正確的DDL語(yǔ)句,并且會(huì)自動(dòng)偵察并標(biāo)記當(dāng)前數(shù)據(jù)字典和最初日志流之間的差別,這樣即使最初日志流中所涉及的表已經(jīng)被更改或者根本已經(jīng)不存在,LogMiner同樣會(huì)返回正確的DDL語(yǔ)句。
5、在日志中記錄更多列信息的能力:例如對(duì)于UPDATE操作不僅會(huì)記錄被更新行的情況,還可以捕捉更多前影信息。
6、支持基于數(shù)值的查詢:Oracle9i LogMiner在支持原有基于元數(shù)據(jù)(操作、對(duì)象等)查詢的基礎(chǔ)上,開(kāi)始支持基于實(shí)際涉及到的數(shù)據(jù)的查詢。例如涉及一個(gè)工資表,現(xiàn)在我們可以很容易地查出員工工資由1000變成2000的原始更新語(yǔ)句,而在之前我們只能選出所有的更新語(yǔ)句。
三、Oracle8i/9i的日志分析過(guò)程
LogMiner只要在實(shí)例起來(lái)的情況下都可以運(yùn)行,LogMiner使用一個(gè)字典文件來(lái)實(shí)現(xiàn)Oracle內(nèi)部對(duì)象名稱的轉(zhuǎn)換,如果沒(méi)有這個(gè)字典文件,則直接顯示內(nèi)部對(duì)象編號(hào),例如我們執(zhí)行下面的語(yǔ)句:
delete from "C"."A" where "C1" = ‘gototop’ and ROWID = AAABg1AAFAAABQaAAH;
如果沒(méi)有字典文件,LogMiner分析出來(lái)的結(jié)果將是:
delete from "UNKNOWN"."OBJ# 6197" where "COL 1" = HEXTORAW(d6a7d4ae) and ROWID
= AAABg1AAFAAABQaAAH;
顯示歸檔日志信息
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)確定位歸檔日志的存放位置.通過(guò)查詢動(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)程.通過(guò)查詢動(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)