亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

分析Oracle數據庫日志文件(1)

2024-08-29 13:46:02
字體:
來源:轉載
供稿:網友
一、如何分析即LogMiner解釋

從目前來看,分析Oracle日志的唯一方法就是使用Oracle公司提供的LogMiner來進行, Oracle數據庫的所有更改都記錄在日志中,但是原始的日志信息我們根本無法看懂,而LogMiner就是讓我們看懂日志信息的工具。從這一點上看,它和tkPRof差不多,一個是用來分析日志信息,一個則是格式化跟蹤文件。通過對日志的分析我們可以實現下面的目的:

1、查明數據庫的邏輯更改;

2、偵察并更正用戶的誤操作;

3、執行事后審計;

4、執行變化分析。

不僅如此,日志中記錄的信息還包括:數據庫的更改歷史、更改類型(INSERT、UPDATE、DELETE、DDL等)、更改對應的SCN號、以及執行這些操作的用戶信息等,LogMiner在分析日志時,將重構等價的SQL語句和UNDO語句(分別記錄在V$LOGMNR_CONTENTS視圖的SQL_REDO和SQL_UNDO中)。這里需要注重的是等價語句,而并非原始SQL語句,例如:我們最初執行的是“delete a where c1 <>'cyx';”,而LogMiner重構的是等價的6條DELETE語句。所以我們應該意識到V$LOGMNR_CONTENTS視圖中顯示的并非是原版的現實,從數據庫角度來講這是很輕易理解的,它記錄的是元操作,因為同樣是“delete a where c1 <>'cyx';”語句,在不同的環境中,實際刪除的記錄數可能各不相同,因此記錄這樣的語句實際上并沒有什么實際意義,LogMiner重構的是在實際情況下轉化成元操作的多個單條語句。

另外由于Oracle重做日志中記錄的并非原始的對象(如表以及其中的列)名稱,而只是它們在Oracle數據庫中的內部編號(對于表來說是它們在數據庫中的對象ID,而對于表中的列來說,對應的則是該列在表中的排列序號:COL 1, COL 2 等),因此為了使LogMiner重構出的SQL語句易于識別,我們需要將這些編號轉化成相應的名稱,這就需要用到數據字典(也就說LogMiner本身是可以不用數據字典的,詳見下面的分析過程),LogMiner利用DBMS_LOGMNR_D.BUILD()過程來提取數據字典信息。

LogMiner包含兩個PL/SQL包和幾個視圖:

1、dbms_logmnr_d包,這個包只包括一個用于提取數據字典信息的過程,即dbms_logmnr_d.build()過程。

2、dbms_logmnr包,它有三個過程:

add_logfile(name varchar2, options number) - 用來添加/刪除用于分析的日志文件;

start_logmnr(start_scn number, end_scn number, start_time number,end_time number, dictfilename varchar2, options number) - 用來開啟日志分析,同時確定分析的時間/SCN窗口以及確認是否使用提取出來的數據字典信息。

end_logmnr() - 用來終止分析會話,它將回收LogMiner所占用的內存。

與LogMiner相關的數據字典。

1、v$logmnr_dictionary,LogMiner可能使用的數據字典信息,因logmnr可以有多個字典文件,該視圖用于顯示這方面信息。

2、v$logmnr_parameters,當前LogMiner所設定的參數信息。

3、v$logmnr_logs,當前用于分析的日志列表。

4、v$logmnr_contents,日志分析結果。

二、Oracle9i LogMiner的增強:

1、支持更多數據/存儲類型:鏈接/遷移行、CLUSTER表操作、DIRECT PATH插入以及DDL操作。在V$LOGMNR_CONTENTS的SQL_REDO中可以看到DDL操作的原句(CREATE USER除外,其中的密碼將以加密的形式出現,而不是原始密碼)。假如TX_AUDITING初始化參數設為TRUE,則所有操作的數據庫賬號將被記錄。

2、提取和使用數據字典的選項:現在數據字典不僅可以提取到一個外部文件中,還可以直接提取到重做日志流中,它在日志流中提供了操作當時的數據字典快照,這樣就可以實現離線分析。

3、答應對DML操作按事務進行分組:可以在START_LOGMNR()中設置COMMITTED_DATA_ONLY選項,實現對DML操作的分組,這樣將按SCN的順序返回已經提交的事務。

4、支持SCHEMA的變化:在數據庫打開的狀態下,假如使用了LogMiner的DDL_DICT_TRACKING選項,Oracle9i的LogMiner將自動對比最初的日志流和當前系統的數據字典,并返回正確的DDL語句,并且會自動偵察并標記當前數據字典和最初日志流之間的差別,這樣即使最初日志流中所涉及的表已經被更改或者根本已經不存在,LogMiner同樣會返回正確的DDL語句。

5、在日志中記錄更多列信息的能力:例如對于UPDATE操作不僅會記錄被更新行的情況,還可以捕捉更多前影信息。

6、支持基于數值的查詢:Oracle9i LogMiner在支持原有基于元數據(操作、對象等)查詢的基礎上,開始支持基于實際涉及到的數據的查詢。例如涉及一個工資表,現在我們可以很輕易地查出員工工資由1000變成2000的原始更新語句,而在之前我們只能選出所有的更新語句。

三、Oracle8i/9i的日志分析過程

LogMiner只要在實例起來的情況下都可以運行,LogMiner使用一個字典文件來實現Oracle內部對象名稱的轉換,假如沒有這個字典文件,則直接顯示內部對象編號,例如我們執行下面的語句:


delete from "C"."A" where "C1" = ‘gototop’ and ROWID = 'AAABg1AAFAAABQaAAH';假如沒有字典文件,LogMiner分析出來的結果將是:delete from "UNKNOWN"."OBJ# 6197" where "COL 1" = HEXTORAW('d6a7d4ae') and ROWID = 'AAABg1AAFAAABQaAAH';


假如想要使用字典文件,數據庫至少應該出于MOUNT狀態。然后執行dbms_logmnr_d.build過程將數據字典信息提取到一個外部文件中。下面是具體分析步驟:

1、確認設置了初始化參數:UTL_FILE_DIR,并確認Oracle對改目錄擁有讀寫權限,然后啟動實例。示例中UTL_FILE_DIR參數如下:

SQL> show parameter utlNAME TYPE VALUE------------------------ ----------- ------------------------------utl_file_dir string /data6/cyx/logmnr

這個目錄主要用于存放dbms_logmnr_d.build過程所產生的字典信息文件,假如不用這個,則可以不設,也就跳過下面一步。

2、生成字典信息文件:

exec dbms_logmnr_d.build(dictionary_filename =>'dic.ora',dictionary_location => '/data6/cyx/logmnr');

其中dictionary_location指的是字典信息文件的存放位置,它必須完全匹配UTL_FILE_DIR的值,例如:假設UTL_FILE_DIR=/data6/cyx/logmnr/,則上面這條語句會出錯,只因為UTL_FILE_DIR后面多了一個“/”,而在很多其它地方對這一“/”是不敏感的。

dictionary_filename指的是放于字典信息文件的名字,可以任意取。當然我們也可以不明確寫出這兩個選項,即寫成:

exec dbms_logmnr_d.build('dic.ora','/data6/cyx/logmnr');假如你第一步的參數沒有設,而直接開始這一步,Oracle會報下面的錯誤:

ERROR at line 1:ORA-01308: initialization parameter utl_file_dir is not setORA-06512: at "SYS.DBMS_LOGMNR_D", line 923ORA-06512: at "SYS.DBMS_LOGMNR_D", line 1938ORA-06512: at line 1

需要注重的是,在oracle817 for Windows版中會出現以下錯誤:

14:26:05 SQL> execute dbms_logmnr_d.build('oradict.ora','c:/oracle/admin/ora/log');BEGIN dbms_logmnr_d.build('oradict.ora','c:/oracle/admin/ora/log'); END;*ERROR at line 1:ORA-06532: Subscript outside of limitORA-06512: at "SYS.DBMS_LOGMNR_D", line 793ORA-06512: at line 1

解決辦法:

編輯"$ORACLE_HOME/rdbms/admindbmslmd.sql"文件,把其中的TYPE col_desc_array IS VARRAY(513) OF col_description;改成:TYPE col_desc_array IS VARRAY(700) OF col_description;

保存文件,然后執行一遍這個腳本:

15:09:06 SQL> @c:/oracle/ora81/rdbms/admin/dbmslmd.sqlPackage created.Package body created.No errors.Grant sUCceeded.

然后重新編譯DBMS_LOGMNR_D包:

15:09:51 SQL> alter package DBMS_LOGMNR_D compile body;Package body altered.之后重新執行dbms_logmnr_d.build即可:15:10:06 SQL> execute dbms_logmnr_d.build('oradict.ora','c:/oracle/admin/ora/log');PL/SQL procedure successfully completed.

3、添加需要分析的日志文件


SQL>exec dbms_logmnr.add_logfile( logfilename=>'/data6/cyx/rac1arch/arch_1_197.arc', options=>dbms_logmnr.new);PL/SQL procedure successfully completed.


這里的options選項有三個參數可以用:

NEW - 表示創建一個新的日志文件列表

ADDFILE - 表示向這個列表中添加日志文件,如下面的例子

REMOVEFILE - 和addfile相反。

SQL> exec dbms_logmnr.add_logfile( logfilename=>'/data6/cyx/rac1arch/arch_2_86.arc', options=>dbms_logmnr.addfile);PL/SQL procedure successfully completed.

4、當你添加了需要分析的日志文件后,我們就可以讓LogMiner開始分析了:

SQL> exec dbms_logmnr.start_logmnr(dictfilename=>'/data6/cyx/logmnr/dic.ora');PL/SQL procedure successfully completed.

假如你沒有使用字典信息文件(此時我們只需要啟動實例就可以了),那么就不需要跟dictfilename參數:

SQL> exec dbms_logmnr.start_logmnr();PL/SQL procedure successfully completed.

當然dbms_logmnr.start_logmnr()過程還有其它幾個用于定義分析日志時間/SCN窗口的參數,它們分別是:

STARTSCN / ENDSCN - 定義分析的起始/結束SCN號,

STARTTIME / ENDTIME - 定義分析的起始/結束時間。

例如下面的過程將只分析從 '2003-09-21 09:39:00'到'2003-09-21 09:45:00'這段時間的日志:

SQL> exec dbms_logmnr.start_logmnr(dictfilename=>'/data6/cyx/logmnr/dic.ora' , -starttime => '2003-09-21 09:39:00',endtime => '2003-09-21 09:45:00');PL/SQL procedure successfully completed.

上面過程第一行結尾的“-”表示轉行,假如你在同一行,則不需要。我們可以看到有效日志的時間戳:

SQL> select distinct timestamp from v$logmnr_contents;TIMESTAMP-------------------2003-09-21 09:40:022003-09-21 09:42:39

這里需要注重的是,因為我之前已經設置NLS_DATE_FORMAT環境變量,所以上面的日期可以直接按這個格式寫就行了,假如你沒有設,則需要使用to_date函數來轉換一下。

SQL> !env grep NLSNLS_LANG=american_america.zhs16cgb231280NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SSORA_NLS33=/oracle/oracle9/app/oracle/product/9.2.0/ocommon/nls/admin/data使用to_date的格式如下:exec dbms_logmnr.start_logmnr(dictfilename=>'/data6/cyx/logmnr/dic.ora',-starttime => to_date('2003-09-21 09:39:00','YYYY-MM-DD HH24:MI:SS'),-endtime => to_date('2003-09-21 09:45:00','YYYY-MM-DD HH24:MI:SS'));

STARTSCN 和ENDSCN參數使用方法類似。

5、好了,在上面的過程執行結束之后,我們就可以通過訪問與LogMiner相關的幾個視圖來提取我們需要的信息了。其中在v$logmnr_logs中可以看到我們當前分析的日志列表,假如數據庫有兩個實例(即OPS/RAC),在v$logmnr_logs中會有兩個不同的THREAD_ID。

而真正的分析結果是放在v$logmnr_contents中,這里面有很多信息,我們可以根據需要追蹤我們感愛好的信息。后面我將單獨列出來講常見的追蹤情形。

6、全部結束之后,我們可以執行dbms_logmnr.end_logmnr過程退出LogMiner分析過程,你也可以直接退出SQL*PLUS,它會自動終止。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美老女人性生活| 亚洲色图综合网| 国产精品av在线播放| 午夜精品www| 欧洲日韩成人av| 亚洲精品免费在线视频| 国产性色av一区二区| 另类色图亚洲色图| 亚洲精品资源在线| 91中文在线观看| 欧美插天视频在线播放| 日本电影亚洲天堂| 欧美一区三区三区高中清蜜桃| 亚洲国产成人91精品| 日韩av手机在线看| 欧美福利视频在线| 91九色综合久久| 国产精品观看在线亚洲人成网| 在线精品国产欧美| 欧美日韩亚洲精品一区二区三区| 亚洲成在人线av| 亚洲精品日韩久久久| 亚洲精品免费在线视频| 欧美激情中文网| 国产精品欧美日韩一区二区| 国产不卡一区二区在线播放| 一本色道久久综合亚洲精品小说| 成人免费视频网址| 欧美色视频日本高清在线观看| 国产成人一区二区三区| 国产婷婷成人久久av免费高清| 亚洲国产精品999| 北条麻妃在线一区二区| 亚洲毛片在线观看.| 97超碰色婷婷| 欧美日韩性视频| 色综合久综合久久综合久鬼88| 2020国产精品视频| 日韩欧美一区二区在线| 亚洲国产女人aaa毛片在线| 日韩av手机在线看| 精品美女久久久久久免费| 国产一区二区精品丝袜| 精品国产欧美一区二区三区成人| 亚洲成年网站在线观看| 欧美肥臀大乳一区二区免费视频| 国产精品夜间视频香蕉| 日本在线观看天堂男亚洲| 最近2019中文字幕大全第二页| 欧美中文在线视频| 久久大大胆人体| 久久99亚洲精品| 日韩电影在线观看中文字幕| 18一19gay欧美视频网站| 最新的欧美黄色| 欧美激情xxxx性bbbb| 久久99久久99精品中文字幕| 国产精品成人免费电影| 成人xvideos免费视频| 国产精品久久久亚洲| 国产精品草莓在线免费观看| 96精品视频在线| 久久久爽爽爽美女图片| 成人免费在线视频网址| 国产日本欧美在线观看| 国产精品永久免费| 午夜欧美不卡精品aaaaa| 精品视频在线播放免| 国产午夜精品全部视频播放| 不用播放器成人网| 一二美女精品欧洲| 日本精品久久久| 亚洲国产婷婷香蕉久久久久久| 在线视频欧美日韩| 国产自产女人91一区在线观看| 日韩最新中文字幕电影免费看| 色99之美女主播在线视频| 亚洲欧美日韩精品久久奇米色影视| 亚洲免费人成在线视频观看| 欧美日韩免费区域视频在线观看| 亚洲日本成人网| 亚洲一区二区中文字幕| 欧美成人精品一区二区| 亚洲国产精品小视频| 国产69精品久久久久99| 色综合天天综合网国产成人网| 91精品国产综合久久久久久久久| 欧美日韩中文字幕综合视频| 国产精品美女免费| 亚洲欧美在线一区| 国产欧美久久久久久| 热99久久精品| 亚洲精品日韩在线| 777午夜精品福利在线观看| 国产在线精品成人一区二区三区| 国产精品久久久久免费a∨| 久久亚洲综合国产精品99麻豆精品福利| 91久久久久久久一区二区| 久久精品成人欧美大片| 国产一区二区丝袜高跟鞋图片| 亚洲黄色www网站| 78色国产精品| 国产成人亚洲综合青青| 亚洲综合国产精品| 丝袜美腿亚洲一区二区| 成人精品视频99在线观看免费| 精品久久久久久国产91| 亚洲女人被黑人巨大进入| 97香蕉久久夜色精品国产| 久久久极品av| 欧美午夜女人视频在线| 色婷婷亚洲mv天堂mv在影片| 亚洲精品网站在线播放gif| 国产精品一区二区久久久久| 日韩一区二区久久久| 欧美电影在线免费观看网站| 欧美在线不卡区| 亚洲电影免费观看高清完整版在线| 欧美成人免费视频| 欧美午夜美女看片| 精品国产一区二区三区久久久狼| 97精品欧美一区二区三区| 久久久久亚洲精品| 国产成人一区二区三区| 91香蕉电影院| 亚洲午夜激情免费视频| 精品色蜜蜜精品视频在线观看| 欧美激情图片区| 91免费精品国偷自产在线| 国产欧美日韩中文字幕| 亚洲欧美精品一区二区| 欧美午夜片欧美片在线观看| 日本精品久久久久久久| 亚洲欧洲一区二区三区在线观看| 亚洲人高潮女人毛茸茸| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲毛茸茸少妇高潮呻吟| 这里只有精品久久| 中文字幕少妇一区二区三区| 91老司机精品视频| 亚洲免费视频在线观看| 精品久久中文字幕| 欧美中文在线视频| 日韩精品一二三四区| 成人在线精品视频| 91欧美视频网站| 欧美第一淫aaasss性| 亚洲成人黄色网| 538国产精品一区二区在线| 日韩av在线导航| 成人情趣片在线观看免费| 亚洲精品视频免费| 中文字幕亚洲欧美日韩2019| 欧日韩不卡在线视频| 国产精品吴梦梦| 日韩激情av在线免费观看| 狠狠色香婷婷久久亚洲精品| 国产偷国产偷亚洲清高网站| 国产精品99蜜臀久久不卡二区| 亚洲精品自拍偷拍| 亚洲色图美腿丝袜| 日韩经典第一页| 91伊人影院在线播放| 久99九色视频在线观看|