<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      11.手工備份恢復(fù)--LogMiner(練習(xí)18)

      在以前的練習(xí)中,我們討論了歸檔重做日志文件,對(duì)歸檔重做日志文件進(jìn)行了備份并用于恢復(fù)操作,利用這些文件可以把改變傳遞到一個(gè)備用數(shù)據(jù)庫(kù)中并將一個(gè)表空間及時(shí)恢復(fù)到一個(gè)特定的時(shí)間點(diǎn)。你是否考慮到什么方法可以直接觀察一個(gè)Oracle重做日志文件的內(nèi)部結(jié)構(gòu)?從Oracle8i開(kāi)始可以是用LogMiner工具查看一個(gè)或者多個(gè)日志文件的內(nèi)容,包括一些數(shù)據(jù)字典視圖和存儲(chǔ)過(guò)程。在本練習(xí)中將練習(xí)安裝LogMiner,并使用LogMiner來(lái)查看和分析數(shù)據(jù)庫(kù)重做日志文件的內(nèi)容。
      當(dāng)Oracle改變數(shù)據(jù)塊時(shí),它把重做信息寫入當(dāng)前的聯(lián)機(jī)重做日志文件。重做日志文件包括更改時(shí)間、對(duì)象標(biāo)識(shí)符、更改的SCN號(hào)、數(shù)據(jù)塊發(fā)生的操作和其他的重要信息,該文件不但包括使用者對(duì)數(shù)據(jù)塊所做的更改,也包括回退段中恢復(fù)塊的更改。Oracle在數(shù)據(jù)字典中使用數(shù)字標(biāo)識(shí)符來(lái)標(biāo)識(shí)對(duì)象的相關(guān)信息,例如為一個(gè)表制定一個(gè)對(duì)象號(hào),并且每列有一個(gè)列標(biāo)志符,每列都有一個(gè)相應(yīng)的數(shù)據(jù)類型標(biāo)識(shí)符,表示該列是varchar2、date、number等變量。使用LogMiner,可以讀出重做文件的內(nèi)容,然后重新產(chǎn)生或恢復(fù)產(chǎn)生原始重做信息的SQL表達(dá)式,使用數(shù)據(jù)字典文件,LogMiner將Oracle對(duì)象標(biāo)識(shí)符翻譯成可以看得懂的表和列。
      在進(jìn)行本練習(xí)之前對(duì)相關(guān)數(shù)據(jù)進(jìn)行解釋:

      • 當(dāng)前數(shù)據(jù)庫(kù)(Current database):當(dāng)LogMiner使用產(chǎn)生日志文件的服務(wù)器來(lái)分析重做日志文件時(shí),重做日志文件來(lái)自當(dāng)前數(shù)據(jù)庫(kù);
      • 外部數(shù)據(jù)庫(kù)(Foreign database):當(dāng)LogMiner可以分析異于當(dāng)前數(shù)據(jù)庫(kù)的其他數(shù)據(jù)庫(kù)產(chǎn)生的重做日志文件,該數(shù)據(jù)庫(kù)就是有一個(gè)外部數(shù)據(jù)庫(kù);
      • 字典文件(Dictionary file):LogMiner使用字典文件將Oracle內(nèi)部對(duì)象標(biāo)識(shí)與表名稱、列、數(shù)據(jù)類型以及其他對(duì)象關(guān)聯(lián)起來(lái),需要注意的是字典文件必須由創(chuàng)建重做日志文件的數(shù)據(jù)庫(kù)產(chǎn)生。

      很多情況下需要使用LogMiner:如數(shù)據(jù)庫(kù)表中的數(shù)據(jù)莫名其妙被修改了,使用LogMiner可以檢查哪個(gè)改變的運(yùn)行細(xì)節(jié),也可以使用LogMiner來(lái)撤銷這些更改;可以使用LogMiner檢查一個(gè)或多個(gè)表中SQL改變發(fā)生的次數(shù),從而檢查表上的工作量;通過(guò)進(jìn)一步檢查,LogMiner可以指出一個(gè)錯(cuò)誤的DROP TABLE或者一個(gè)DDL語(yǔ)句發(fā)生的準(zhǔn)確時(shí)間和SCN。
      使用LogMiner需要理解以下要點(diǎn):

      • 可以在一個(gè)已經(jīng)加載或者未加載的數(shù)據(jù)庫(kù)上使用LogMiner;
      • 分析一個(gè)來(lái)自外來(lái)數(shù)據(jù)庫(kù)重做日志文件時(shí),當(dāng)前數(shù)據(jù)庫(kù)的塊大小必須和外部數(shù)據(jù)庫(kù)一樣的或者更大,因?yàn)樵跓醾浞菽J剑砜臻g中一個(gè)塊的首次改變作為一個(gè)單獨(dú)的重做記錄在重做流中創(chuàng)建一個(gè)完整的鏡像。如果LogMiner使用較小的塊尺寸的數(shù)據(jù)庫(kù)讀取重做會(huì)發(fā)生錯(cuò)誤,因?yàn)閱为?dú)的重做記錄無(wú)法放入一個(gè)塊中;
      • 雖然LogMiner不解釋重做日志的DDL語(yǔ)句,如DROP TABLE這樣的DDL語(yǔ)句,但仍舊會(huì)在數(shù)據(jù)字典創(chuàng)建DML,這些字典DML語(yǔ)句可以用來(lái)檢查對(duì)數(shù)據(jù)庫(kù)發(fā)布的DDL命令;
      • LogMiner不會(huì)重構(gòu)原始的無(wú)日志的SQL操作,但在數(shù)據(jù)字典上的DML操作結(jié)果將記錄到日志文件里;
      • 雖然LogMiner可以偶然用來(lái)日志文件分析,但不能當(dāng)做常規(guī)意義上使用的一種功能,特別是一個(gè)產(chǎn)生龐大數(shù)量重做信息的數(shù)據(jù)庫(kù)挖掘重做信息,使用LogMiner分析龐大數(shù)量的重做信息是一件非常耗費(fèi)時(shí)間的事情;
      • 如果LogMiner用來(lái)從其他數(shù)據(jù)庫(kù)的日志文件里挖掘信息,無(wú)論原數(shù)據(jù)庫(kù)還是被分析的數(shù)據(jù)庫(kù)都必須在使用相同的硬件平臺(tái)和操作系統(tǒng),而且原數(shù)據(jù)庫(kù)和被分析數(shù)據(jù)庫(kù)必須使用相同的字符集;
      • LogMiner無(wú)法分析某些數(shù)據(jù)庫(kù)對(duì)象或數(shù)據(jù)類型產(chǎn)生的重做,例如:按索引組織的表、成簇的表/索引、非標(biāo)量數(shù)據(jù)類型和鏈接的行;
      • 盡管可以創(chuàng)建數(shù)據(jù)字典DML,但LogMiner無(wú)法從直接的路徑插入操作中生成原始的SQL;
      • LogMiner將顯示為提交的事務(wù),因?yàn)橹刈鋈罩景峤坏暮臀刺峤坏臄?shù)據(jù)。

       

      練習(xí)18:分析重做文件

      通過(guò)LogMiner讀取重做日志事務(wù)涉及使用Oracle提供的包過(guò)程、數(shù)據(jù)字典視圖和一個(gè)數(shù)據(jù)字典外部文件。下面是應(yīng)用LogMiner分析重做日志文件的操作過(guò)程:使用LogMiner存儲(chǔ)過(guò)程創(chuàng)建一個(gè)外部數(shù)據(jù)字典文件;然后使用另一個(gè)存儲(chǔ)過(guò)程創(chuàng)建一個(gè)分析重做文件的列表;最后,執(zhí)行另一個(gè)存儲(chǔ)過(guò)程來(lái)啟動(dòng)LogMiner。在完成這些步驟以后,從一個(gè)顯示日志文件內(nèi)容的數(shù)據(jù)字典視圖里進(jìn)行選擇,當(dāng)查詢這個(gè)視圖時(shí),Oracle讀取日志文件,然后以特定格式返回結(jié)果,一旦分析列出的日志文件,就調(diào)用另一個(gè)存儲(chǔ)過(guò)程停止LogMiner。

      類型

      過(guò)程名

      用途

      過(guò)程

      Dbms_logmnr_d.build

      創(chuàng)建一個(gè)數(shù)據(jù)字典文件

      過(guò)程

      Dbms_logmnr.add_logfile

      在類表中增加日志文件以供分析

      過(guò)程

      Dbms_logmnr.start_logmnr

      使用一個(gè)可選的字典文件和前面確定要分析日志文件來(lái)啟動(dòng)LogMiner

      過(guò)程

      Dbms_logmnr.end_logmnr

      停止LogMiner分析

      視圖

      V$logmnr_dictionary

      顯示用來(lái)決定對(duì)象ID名稱的字典文件的信息

      視圖

      V$logmnr_logs

      LogMiner啟動(dòng)時(shí)顯示分析的日志列表

      視圖

      V$logmnr_contents

      LogMiner啟動(dòng)后,可以使用該視圖在SQL提示符下輸入SQL語(yǔ)句來(lái)查詢重做日志的內(nèi)容

      在本練習(xí)中,將觀察SCOTT.EMP表中一行記錄的特定改變的詳細(xì)情況,然后看到如何通過(guò)分析一個(gè)特定表上記錄改變操作的重做日志文件來(lái)檢查這個(gè)表數(shù)據(jù)庫(kù)更改操作,最后將學(xué)會(huì)怎樣為一個(gè)特定的DROP TABLE命令確定準(zhǔn)確的時(shí)間和SCN。

      步驟一:創(chuàng)建數(shù)據(jù)字典文件

      使用LogMiner創(chuàng)建數(shù)據(jù)字典是一個(gè)可選步驟,字典文件極大增加了日志文件內(nèi)容的可讀性。
      數(shù)據(jù)字典建立Oracle內(nèi)部對(duì)象ID數(shù)據(jù)到表、列以及其他數(shù)據(jù)類型名稱之間的對(duì)應(yīng)關(guān)系,數(shù)據(jù)字典是一個(gè)文本文件,相當(dāng)于數(shù)據(jù)字典的相關(guān)部分。本步驟中將創(chuàng)建一個(gè)數(shù)據(jù)字典文件,然后指示LogMiner應(yīng)用該文件把內(nèi)容的數(shù)據(jù)翻譯成步驟四中分析日志文件能夠識(shí)別的名稱。

      • 字典文件應(yīng)該和日志文件的日期一致,如果LogMiner分析的一個(gè)對(duì)象無(wú)法在字典文件中找到,LogMiner將無(wú)法顯示數(shù)據(jù)庫(kù)對(duì)象的表和列的名稱;
      • 建立字典文件的數(shù)據(jù)庫(kù)必須和建立日志文件的數(shù)據(jù)庫(kù)相同,例如,不能使用克隆數(shù)據(jù)庫(kù)中的字典文件來(lái)分析PRACTICE數(shù)據(jù)庫(kù)中的日志文件。

      在建立數(shù)據(jù)字典文件之前,PRACTICE數(shù)據(jù)庫(kù)必須寫到服務(wù)器硬盤的一個(gè)目錄下。Oracle10g之前數(shù)據(jù)庫(kù)參數(shù)文件內(nèi)設(shè)置UTL_FILE_DIR這個(gè)參數(shù)運(yùn)行為Orace可以使用的PL/SQL文件I/O定義一個(gè)或多個(gè)目錄,可以在這個(gè)參數(shù)文件里連續(xù)地分行輸入U(xiǎn)TL_FILE_DIR,以定義更多的目錄,如下所示:

      1 Utl_file_dir= D:\oracle\CODE\chap10
      而Oracle10g可以使用如下進(jìn)行設(shè)置:
      1 CREATE DIRECTORY utl AS 'D:\oracle\CODE\chap10';

      為了創(chuàng)建一個(gè)數(shù)據(jù)字典文件,可以執(zhí)行DBMS_LOGMNR_D包中的BUILD過(guò)程,該過(guò)程查詢當(dāng)前的數(shù)據(jù)庫(kù)字典表,然后創(chuàng)建一個(gè)包含其內(nèi)容基于文本的文件。該文件在調(diào)用的過(guò)程目錄中生成,執(zhí)行的過(guò)程如下:

      1 SQL>EXECUTE dbms_logmnr_d.build(dictionary_filename => ‘dictionary.ora’, dictionary_location => ‘D:\oracle\CODE\chap10’);
      該過(guò)程執(zhí)行后,在D:\oracle\CODE\chap10目錄下打開(kāi)文件dictionary.ora,瀏覽其內(nèi)容。

      步驟二:產(chǎn)生數(shù)據(jù)庫(kù)操作
      本步驟中進(jìn)行的操作將在步驟五進(jìn)行分析驗(yàn)證。
      首先確認(rèn)在TINA.DATE_LOG表中生成行記錄。
      其次,改變SCOTT.EMP表的一行記錄,使用下面的SQL語(yǔ)句改變其中一個(gè)雇員的薪水和傭金:

      1 SQL>CONNECT scott/tiger@practice
      2 SQL>UPDATE emp SET sal=3000, comm=5000 where empno=7844;
      3 SQL>COMMIT;

       使用SQL*PLUS命令”SET TIME ON”,記錄這些SQL命令運(yùn)行的時(shí)間,set time on 命令生效后給SQL提示增加一個(gè)時(shí)間值,如下所示:

      1 23:21:52 SQL>DROP TABLE bonus;

       UPDATE和DROP(字典中對(duì)應(yīng)的DML)語(yǔ)句的重做信息將保存在當(dāng)前聯(lián)機(jī)重做日志文件中,從v$log視圖中找出日志文件的序號(hào),最后做一個(gè)日志切換使當(dāng)前聯(lián)機(jī)日志歸檔。運(yùn)行LogMiner來(lái)分析這個(gè)新歸檔的日志文件,試驗(yàn)一下是否能從這個(gè)日志中找到關(guān)于SQL更新和刪除表的信息。

      1 SQL>SELECT sequence# FROM v$log WHERE status=’CURRENT’;
      2 SQL>ALTER SYSTEM SWITCH LOGFILE;

      在本練習(xí)討論中,日志切換前的當(dāng)前日志序號(hào)是26,因此日志切換期間產(chǎn)生的歸檔日志文件的名稱是ARC00026_0707328257.001。

      步驟三:分析指定日志文件
      LogMiner需創(chuàng)建一個(gè)可供分析日志文件列表來(lái)分析指定的日志文件,使用Oracle提供的DBMS_LOGMNR包中的ADD_LOGFILE過(guò)程來(lái)添加日志文件,增加的日志文件顯示在v$logmnr_logs視圖里。

      1 SQL >conn sys/system@practice as sysdba;
      2 SQL>SELECT db_name, thread_sqn, filename FROM v$logmnr_logs;

      前一個(gè)任務(wù)中SQL所做的改變保存在序號(hào)為26的日志文件中,在LogMiner分析前添加該日志文件和前面的兩個(gè)文件。

      1 BEGIN
      2 dbms_logmnr.add_logfile(logfilename=>'D:\oracle\PRACTICE\ARCHIVE\ARC00024_0707328257.001', options=>dbms_logmnr.NEW);
      3 dbms_logmnr.add_logfile(logfilename=>'D:\oracle\PRACTICE\ARCHIVE\ARC00025_0707328257.001', options=>dbms_logmnr.ADDFILE);
      4 dbms_logmnr.add_logfile(logfilename=>'D:\oracle\PRACTICE\ARCHIVE\ARC00026_0707328257.001', options=>dbms_logmnr.ADDFILE);
      5 END;
      6 /

       

      Add_logfile過(guò)程第一次調(diào)用時(shí),選項(xiàng)設(shè)置為dbms_logmnr.NEW,這就創(chuàng)建了供LogMiner分析新的日志文件列表;之后調(diào)用add_logfile過(guò)程,使用ADDFILE選項(xiàng)為新建立的列表添加文件。每次使用NEW選項(xiàng)時(shí),任何在此之前添加的文件將從該列表刪除。
      查詢v$logmnr_logs視圖將看到已經(jīng)添加到列表中文件:

      1 SQL>SELECT db_name, thread_sqn, filename FROM v$logmnr_logs;

      可以在DBMS_LOGMNR.ADD_LOGFILE過(guò)程中指定REMOVEFILE選項(xiàng)來(lái)刪除重做日志文件,在本練習(xí)中序號(hào)100的日志文件沒(méi)有包含尋找的重做信息,因此可以將序號(hào)100的日志文件從分析的列表中刪除:

      1 EXECUTE dbms_logmnr.add_logfile(logfilename=>'D:\oracle\PRACTICE\ARCHIVE\ARC00024_0707328257.001', options=>dbms_logmnr.REMOVEFILE);

      步驟四:?jiǎn)?dòng)LogMiner
      準(zhǔn)備好字典文件和日志文件列表后,準(zhǔn)備啟動(dòng)LogMiner:

      1 EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'D:\oracle\CODE\chap10\dictionary.ora');

      可以為該過(guò)程有選擇地制定其他幾個(gè)參數(shù),可以指定分析開(kāi)始的SCN或結(jié)束的SCN;可以制定分析開(kāi)始時(shí)間或結(jié)束是時(shí)間。如果必須分析大量的歸檔日志或者只想查看很少一段時(shí)間內(nèi)的重做,這兩個(gè)參數(shù)很有幫助。
      步驟五:分析重做日志文件內(nèi)容
      在V$LOGMNR_CONTENTS視圖中,包含日志文件ARC00024_0707328257.001和ARC00025_0707328257.001內(nèi)容,當(dāng)查詢V$LOGMNR_CONTENTS視圖時(shí),包括在V$LOGMNR_CONTENTS的日志文件將順序讀出,并以V$LOGMNR_CONTENTS視圖定義的行結(jié)構(gòu)返回?cái)?shù)據(jù)(該視圖有53列)。所有日志文件內(nèi)容不是永久存放在一個(gè)表或者內(nèi)存中,因此每次選擇有關(guān)V$LOGMNR_CONTENTS內(nèi)容時(shí),日志文件都被掃描。如果需要多次檢查大量的日志文件來(lái)尋找需要的內(nèi)容,那么最好使用CREATE TABLE AS SELECT(CTAS)命令制作一個(gè)結(jié)果的表。

      列名稱

      描述

      OPERATION

      重做記錄中記錄的操作(INSERTUPDATEDELETE)

      TIMESTAMP

      數(shù)據(jù)改變發(fā)生的日期和時(shí)間

      SCN

      特定數(shù)據(jù)變化的系統(tǒng)變更號(hào)

      SEG_OWNER

      段所有者名稱(如果段發(fā)生變更)

      SEG_NAME

      數(shù)據(jù)發(fā)生改變的段名稱

      SEG_TYPYE

      數(shù)據(jù)發(fā)生改變的段類型

      TABLE_SPACE_NAME

      變化段的表空間名稱

      ROW_ID

      特定數(shù)據(jù)變化行的ID

      USER_NAME

      執(zhí)行數(shù)據(jù)改變的用戶名

      SESSION_INFO

      數(shù)據(jù)發(fā)生變化時(shí)用戶進(jìn)程信息

      SQL_REDO

      可以為重做記錄重做指定行變化的SQL語(yǔ)句

      SQL_UNDO

      可以為重做記錄回退或恢復(fù)指定行變化的SQL語(yǔ)句

      在該步驟中,將使用PRACTICE數(shù)據(jù)庫(kù)中的重做信息完成三件事情:

      1. 確定數(shù)據(jù)改變的細(xì)節(jié),確認(rèn)一個(gè)雇員薪水更改的細(xì)節(jié);
      2. 完成容量分析,檢查TINA.DATE_LOG表的工作量;
      3. 確定DDL命令的詳細(xì)情況,定位SCN和刪除表的時(shí)間。

      檢查數(shù)據(jù)更改的細(xì)節(jié)

      數(shù)據(jù)庫(kù)里的數(shù)據(jù)可能因?yàn)橐庀氩坏降脑蚧蛘咭驗(yàn)殄e(cuò)誤而發(fā)生改變,在重做日志文件中可以找到這些更改的細(xì)節(jié)。在本練習(xí)中,可能有報(bào)告顯示一個(gè)雇員的薪水和傭金發(fā)生了改變,經(jīng)理告訴你,有一個(gè)名叫Turner的銷售員的薪水和傭金發(fā)生改變了,她希望你能查出發(fā)生什么事以及改變前的薪水和傭金數(shù),她還想知道更多的細(xì)節(jié),比如是誰(shuí)做了這些改變以及改變是如何發(fā)生。
      回答她的問(wèn)題,需要查找設(shè)計(jì)SCOTT.EMP表的所有SQL語(yǔ)句,該表有一個(gè)表示當(dāng)前薪水的SAL列和表示傭金的COMM列,要找到所有涉及這個(gè)表的SQL,可以運(yùn)行如下SELECT語(yǔ)句:

      1 SELECT operation,timestamp,scn
      2   FROM v$logmnr_contents
      3  WHERE seg_name='EMP'
      4    AND seg_owner='SCOTT'
      5    AND seg_type_name='TABLE';

      可以看出結(jié)果,在1月10日上午10:42對(duì)SCOTT.EMP表執(zhí)行了更新操作,要找出該表所有的具體改變,最好查看SQL_REDO和SQL_UNDO列:

      1 SELECT sql_redo, sql_undo
      2   FROM v$logmnr_contents
      3  WHERE seg_name='EMP'
      4    AND seg_owner='SCOTT'
      5    AND seg_type_name='TABLE';

      SQL_REDO列定義了特定的SQL語(yǔ)句,可以使你得到與步驟二中SQL同樣的結(jié)果;SQL_UNDO列包括的SQL允許撤銷SQL_REDO的改變,實(shí)際上,它表示更改前的數(shù)據(jù)值。找到了數(shù)據(jù)的更改和更改發(fā)生的時(shí)間,還想弄清楚誰(shuí)做了這個(gè)更改?查看V$LOGMNR_CONTENTS的USERNAME列和SESSION_INFO列,在這些列中,將知道有用的會(huì)話信息,可以幫助進(jìn)一步解釋Tuner的薪水是如何改變的。

      1 SELECT username, session_info
      2   FROM v$logmnr_contents
      3  WHERE seg_name='EMP'
      4    AND seg_owner='SCOTT'
      5    AND seg_type_name='TABLE';
      可以看到某人使用用戶名SCOTT登錄并執(zhí)行更新操作,知道該嫌疑人使用名叫YIREN的操作系統(tǒng)登錄名叫YIREN機(jī)器上。你可以把這個(gè)信息報(bào)告給經(jīng)理,同時(shí)使用SQL_UNDO列的內(nèi)容把數(shù)據(jù)恢復(fù)到改變以前的數(shù)值,檢查當(dāng)前存在表內(nèi)該行的內(nèi)容,確保他沒(méi)有改變后續(xù)的時(shí)間。
      1 SQL>update "SCOTT"."EMP" set "SAL" = 1500"COMM" = 0 where ROWID = 'AAAMBCAAEAAAAAgAAI';
      2 SQL>COMMIT;

      執(zhí)行容量分析

      作為DBA需要做一些性能調(diào)整或容量計(jì)劃,要完成該任務(wù)可能設(shè)計(jì)到使用許多不同的工具和程序,LogMiner是用來(lái)檢查數(shù)據(jù)庫(kù)表發(fā)生活動(dòng)非常合適的工具。例如,LogMiner幫助調(diào)查表中DML次數(shù)和頻率,雖然使用表審計(jì)來(lái)實(shí)現(xiàn)同樣的功能,但當(dāng)更新表的時(shí)候使用LogMiner不會(huì)減低運(yùn)行時(shí)間性能,而是用表審計(jì)會(huì)導(dǎo)致運(yùn)行時(shí)間能能開(kāi)銷過(guò)大。
      下面我們查詢一下TINA.DATE_LOG表的SQL操作,啟動(dòng)LogMiner檢查這個(gè)表執(zhí)行插入、更新和刪除的次數(shù)。下面這個(gè)非常簡(jiǎn)單的例子為分析數(shù)據(jù)表上DML操作提供了一些思路和方法:

      1 SELECT operation, to_char(timestamp, 'HH') hour, count(*) total
      2   FROM v$logmnr_contents
      3  WHERE seg_name='EMP'
      4    AND seg_owner='SCOTT'
      5  GROUP BY operation, to_char(timestamp, 'HH');

      查詢的結(jié)果顯示,DATE_LOG每小時(shí)增加6行記錄。
      當(dāng)必須分析大量中作信息時(shí),要在全面分析和分析速度之間進(jìn)行權(quán)衡。添加到LogMiner列表中待分析的日志文件越多,可以分析的重做信息也就越多,然而LogMiner列表太多或者太大的日志文件,訪問(wèn)V$LOGMNR_CONTENTS視圖將會(huì)花費(fèi)更長(zhǎng)的時(shí)間。

      尋找DDL命令的細(xì)節(jié)

      就像本練習(xí)所做的一樣,在前面練習(xí)模擬了一個(gè)一位刪除表的操作,在那些練習(xí)中我們?cè)?jīng)提到要知道錯(cuò)誤刪除表的時(shí)間比較困難。使用LogMiner可以推算出刪除表語(yǔ)句的確切時(shí)間和SCN,可以將這個(gè)時(shí)間或者SCN用于不完全數(shù)據(jù)庫(kù)恢復(fù)或者表空間時(shí)時(shí)檢點(diǎn)恢復(fù)(TSPITR)。
      如前所述,LogMiner只是將重做日志信息翻譯成數(shù)據(jù)處理語(yǔ)言(插入、更新、刪除),在V$LOGMNR_CONTENTS視圖中將不會(huì)找到DROP TABLE語(yǔ)句。既然在DROP TABLE語(yǔ)句在數(shù)據(jù)字典表上運(yùn)行了DML,那么可以從SYS.OBJ$和SYS.TAB$數(shù)據(jù)字典表中搜索發(fā)生刪除操作的視圖。

      1 SELECT seg_name, operation, scn, timestamp, count(*)
      2   FROM v$logmnr_contents
      3  WHERE operation='DELETE' and timestamp >= to_date('2010-02-23 23:20:00''yyyy-MM-dd HH24:mi:ss'
      4    and timestamp <= to_date('2010-02-23 23:23:00''yyyy-MM-dd HH24:mi:ss'
      5  GROUP BY seg_name, operation, scn, timestamp
      6  ORDER BY scn;

      從以上SQL結(jié)果可以看出,在'2010-02-23 23:23:00,一個(gè)對(duì)象,一個(gè)表和四個(gè)列(SCOTT.BONUS有四列)從數(shù)據(jù)字典刪除了。這個(gè)數(shù)據(jù)字典對(duì)象刪除操作可能就是刪除bonus表語(yǔ)句,接下來(lái)可以查看DROP TABLE命令的SQL_REDO:

      1 SQL>SELECT sql_redo FROM v$logmnr_contents WHERE scn = 521880 AND seg_name=’OBJ$’;

      在SQL_REDO列的輸出中有OBJ#,這個(gè)和OBJ#相關(guān)聯(lián)的數(shù)值和存放在數(shù)據(jù)字典表TAB$.OBJ#紅的Oracle ID一致。要將刪除表和執(zhí)行刪除表的SQL語(yǔ)句發(fā)生的時(shí)間時(shí)間和SCN聯(lián)系到一起,需要?jiǎng)h除表在何時(shí)刪除以及表中包含多少列,使用這個(gè)信息,就可以找出準(zhǔn)確的時(shí)間以及用戶信息。通過(guò)文本編輯器打開(kāi)字典文件,查找單詞BONUS,將看到如下插入語(yǔ)句:
      如果沒(méi)有在字典文件中找到相關(guān)BONUS的記錄,就不可能在數(shù)據(jù)庫(kù)中已有這個(gè)表的情況下創(chuàng)建這個(gè)字典文件,如果是這種情況,就必須根據(jù)自己的判斷拼湊被刪除表的數(shù)據(jù)。在SQL_REDO列內(nèi)的OBJ#數(shù)值和第一次為刪除表而插入到數(shù)據(jù)字典文件的數(shù)值完全相同,如果把這些信息關(guān)聯(lián)起來(lái),就可以確信刪除表的時(shí)間為2010-2-23 23:21:52,SCN號(hào)為521934,如果必要,使用這些數(shù)值可以執(zhí)行TSPITR。
      簡(jiǎn)而言之,可以通過(guò)將數(shù)據(jù)字典文件的對(duì)象編碼與刪除操作發(fā)生的SYS.OBJ$數(shù)據(jù)字典表的SQL_REDO列的對(duì)象標(biāo)識(shí)符向匹配,已找到刪除表命令發(fā)生的時(shí)間和SCN。
      步驟六:關(guān)閉LogMiner
      使用LogMiner后,需要釋放該程序使用的資源,當(dāng)完成LogMiner工作后,V$LOGMNR_CONTENTS的內(nèi)容就不再可用,如果需要更進(jìn)一步分析重做日志文件的內(nèi)容,使用V$LOGMNR_CONTENTS視圖內(nèi)容創(chuàng)建一個(gè)永久的數(shù)據(jù)庫(kù)表將非常有幫助。

      1 SQL>CREATE TABLE logmnr_contents AS SELECT * FROM v$logmnr_contents;

      一旦完成重做日志的檢查,運(yùn)行DBMS_LOGMNR中的END_LOGMNR。

      1 EXECUTE dbms_lognmr.end_logmnr;

      結(jié)束LogMiner時(shí),釋放為重做日志分析分配的會(huì)話內(nèi)存

      posted @ 2010-02-24 07:53  shishanyuan  閱讀(1269)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 日韩无矿砖一线二线卡乱| 极品少妇的粉嫩小泬视频| 双流县| 老妇女性较大毛片| 九九热在线观看精品视频| 亚洲日韩欧美一区二区三区在线| 亚洲免费一区二区av| 亚洲VA久久久噜噜噜久久无码| 金阳县| 国产女人喷潮视频在线观看| 老师扒下内裤让我爽了一夜| 熟女熟妇伦av网站| 国产久爱免费精品视频| 国产高颜值不卡一区二区| 国产精品久久久国产盗摄| 欧美老少配性行为| 国产精品国产三级国av| 久久日韩精品一区二区五区| 2019亚洲午夜无码天堂| av无码久久久久不卡网站蜜桃 | 毛片av在线尤物一区二区| 亚洲国产日韩一区三区| 99精品国产一区二区三区不卡| 国产又色又爽又黄的视频在线| 国产初高中生粉嫩无套第一次| 白丝乳交内射一二三区| 又爽又黄又无遮挡的视频| 久热这里有精品视频在线| 国产成人久久综合第一区| 成人特黄特色毛片免费看| 人妻少妇精品视频二区| 国产精品国产精品国产专区| 久久国产精品福利一区二区三区| 精品av综合导航| 国产曰批视频免费观看完| 日韩加勒比一本无码精品| 亚洲成av人最新无码不卡短片 | 色偷偷亚洲男人的天堂| 国产日韩成人内射视频| 国产99久久精品一区二区| 日本高清色WWW在线安全|