LogMiner是集成在Oracle8i/Oracle9i數(shù)據(jù)庫(kù)產(chǎn)品中的日志分析工具,通過該工具可以分析重做日志和歸檔日志中的所有事務(wù)變化,并能準(zhǔn)確地確定各種DML和DDL操作的具體時(shí)間和SCN值。對(duì)重做日志和歸檔日志進(jìn)行分析的目的是為了恢復(fù)由于執(zhí)行了誤操作而丟失的數(shù)據(jù)。
使用LogMiner可實(shí)現(xiàn):①確定數(shù)據(jù)邏輯損壞的時(shí)間。例如,用戶執(zhí)行了DROP TABLE和TRUNCATE TABLE命令等誤操作后,使用LogMiner可以準(zhǔn)確定位執(zhí)行這些誤操作的具體時(shí)間。注意:Oracle8i只能還原DML操作,不能還原DDL操作;Oracle9i可以還原DDL以及DML操作。②跟蹤用戶執(zhí)行的事務(wù)變化操作。使用LogMiner不僅可以跟蹤用戶所執(zhí)行的各種DML操作和DDL操作,而且還可以取得數(shù)據(jù)變化。③跟蹤表的DML操作,使用LogMiner可以跟蹤在表上所發(fā)生的所有事務(wù)變化。
下面以O(shè)racle8i(8.1.5)for Windows 2000/NT為例說(shuō)明如何使用LogMiner對(duì)重做日志和歸檔日志進(jìn)行分析。本文進(jìn)行的所有操作均在該環(huán)境下驗(yàn)證通過,文中使用的數(shù)據(jù)庫(kù)名為phj,Oracle_sid為phj。
一、日志操作模式
Oracle數(shù)據(jù)庫(kù)對(duì)日志的管理模式有兩種,即:非歸檔模式和歸檔模式。在建立或安裝Oracle數(shù)據(jù)庫(kù)時(shí),如果沒有指定日志操作模式,則默認(rèn)為非歸檔模式(NOARCHIVELOG)。數(shù)據(jù)庫(kù)建立之后,用戶可以根據(jù)需要修改數(shù)據(jù)庫(kù)日志的操作模式。
1.非歸檔模式(NOARCHIVELOG)
非歸檔模式是指不保存重做日志的日志操作模式,這種日志操作模式只能用于保護(hù)實(shí)例失?。ㄈ缦到y(tǒng)斷電),而不能用于保護(hù)介質(zhì)失?。〝?shù)據(jù)庫(kù)物理文件損壞)。
非歸檔模式的工作過程如下:假設(shè)數(shù)據(jù)庫(kù)只有兩個(gè)日志組,且當(dāng)前日志組為日志組一,日志序列號(hào)為1。當(dāng)事務(wù)變化填滿日志組一時(shí),系統(tǒng)會(huì)切換到日志組二,并且LGWR進(jìn)程將事務(wù)變化寫入該日志組,日志序列號(hào)變?yōu)?;而當(dāng)事務(wù)變化填滿日志組二時(shí),系統(tǒng)又自動(dòng)切換回日志組一,此時(shí)日志序列號(hào)變?yōu)?,并且日志序列號(hào)3所對(duì)應(yīng)的事務(wù)變化會(huì)覆蓋日志序列號(hào)1所對(duì)應(yīng)的事務(wù)變化,依此類推。
2.歸檔模式(ARCHIVELOG)
歸檔模式是指將重做日志內(nèi)容保存到歸檔日志中的日志操作模式。在這種日志操作模式下,當(dāng)進(jìn)行日志切換時(shí)ARCH進(jìn)程會(huì)將重做日志的內(nèi)容復(fù)制到歸檔日志中。例如,假設(shè)數(shù)據(jù)庫(kù)只包含兩個(gè)日志組,LGWR進(jìn)程首先將事務(wù)變化寫入日志組一,此時(shí)日志序列號(hào)為1;當(dāng)事務(wù)變化填滿日志組一時(shí),系統(tǒng)將自動(dòng)切換到日志組二,并將事務(wù)變化寫入日志組二,此時(shí)日志序列號(hào)變?yōu)?,同時(shí)后臺(tái)進(jìn)程ARCn會(huì)將日志組一的內(nèi)容保存到歸檔日志文件1中;而當(dāng)事務(wù)變化填滿日志組二時(shí),系統(tǒng)自動(dòng)切換回日志組一,并將事務(wù)變化寫入日志組一,此時(shí)日志序列號(hào)變?yōu)?,同時(shí)后臺(tái)進(jìn)程ARCn會(huì)將日志組二的內(nèi)容保存到歸檔日志文件2中,依此類推。
3.改變?nèi)罩镜牟僮髂J綖樽詣?dòng)歸檔模式
①修改數(shù)據(jù)庫(kù)的參數(shù)文件,在參數(shù)文件后添加如下參數(shù):
log_archive_start = true log_archive_dest_1 = "location=C:\Oracle\phj\archive" log_archive_format = "T%TS%S.ARC"
說(shuō)明:第一個(gè)參數(shù)在重啟數(shù)據(jù)庫(kù)時(shí)將自動(dòng)啟動(dòng)ARCH進(jìn)程;第二個(gè)參數(shù)指出歸檔日志存放的位置;第三個(gè)參數(shù)說(shuō)明歸檔日志的文件名格式,%T取重做線程號(hào),%S取日志序列號(hào);
②重啟并裝載數(shù)據(jù)庫(kù)
sqlplus internal/oracle@phj shutdown immediate startup mount pfile=%Oracle_Home%\database\initphj.ora alter database archivelog alter database open
4.生成歸檔日志
下面以分析TMP表的DDL和DML操作為例,介紹使用LogMiner分析重做日志和歸檔日志的全過程。我們首先執(zhí)行以下語(yǔ)句在表TMP上執(zhí)行DDL以及DML操作,并生成歸檔日志:
sqlplus internal/oracle@phj create table tmp(name varchar2(10),no number(3)); alter system switch logfile; insert into tmp values(‘liming’,112); update tmp set no=200; commit; alter system switch logfile; delete from tmp; alter system switch logfile;
通過上面的操作會(huì)產(chǎn)生三個(gè)連續(xù)的歸檔日志文件。