国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

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

2024-08-29 13:43:31
字體:
來源:轉載
供稿:網友
四、如何利用LogMiner分析Oracle8的日志文件

雖然說LogMiner是Oracle8i才推出來,但我們同樣可以用它來分析Oracle8的日志文件,只不過稍微麻煩了一點,并且有一定的限制,下面是具體做法:

我們首先復制Oracle8i的$ORACLE_HOME/rdbms/admin/dbmslmd.sql腳本到Oracle8數據庫所在主機的同樣目錄;這個腳本用于創建dbms_logmnr_d包(注重,Oracle9i中還將創建dbms_logmnr包),假如是8.1.5腳本名字為dbmslogmnrd.sql。然后在Oracle8的數據庫上運行這個腳本,之后使用dbms_logmnr_d.build過程創建字典信息文件。現在我們就可以把Oracle8的歸檔日志連同這個字典信息文件復制到Oracle8i數據庫所在的主機上,之后在Oracle8i數據庫中從上面分析過程的第三步開始分析Oracle8的日志,不過

dbms_logmnr.start_logmnr()中使用的是Oracle8的字典信息文件。

按照我前面所說的那樣,假如不是字典文件,我們則可以直接將Oracle8的歸檔日志復制到Oracle8i數據庫所在主機,然后對它進行分析。

其實這里涉及到了一個跨平臺使用LogMiner的問題,筆者做過試驗,也可以在Oracle9i中來分析Oracle8i的日志。但這些都是有所限制的,主要表現在:

1、LogMiner所使用的字典文件必須和所分析的日志文件是同一個數據庫所產生的,并且該數據庫的字符集應和執行LogMiner數據庫的相同。這很好理解,假如不是同一個數據庫所產生就不存在對應關系了。

2、生成日志的數據庫硬件平臺和執行LogMiner數據庫的硬件平臺要求一致,操作系統版本可以不一致。筆者做試驗時(假如讀者有愛好可以到我網站http://www.ncn.cn上下載試驗全過程,因為太長就不放在這里了),所用的兩個數據庫操作系統都是Tru64 UNIX,但一個是 V5.1A,另一個則是V4.0F。假如操作系統不一致則會出現下面的錯誤:

ORA-01284: file /data6/cyx/logmnr/arch_1_163570.arc cannot be openedORA-00308: cannot open archived log '/data6/cyx/logmnr/arch_1_163570.arc'ORA-27048: skgfifi: file header information is invalidORA-06512: at "SYS.DBMS_LOGMNR", line 63ORA-06512: at line 1

五、分析v$logmnr_contents

前面我們已經知道了LogMiner的分析結果是放在v$logmnr_contents中,這里面有很多信息,我們可以根據需要追蹤我們感愛好的信息。那么我們通常感愛好的有哪些呢?

1、追蹤數據庫結構變化情況,即DDL操作,如前所述,這個只有Oracle9i才支持:

SQL> select timestamp,sql_redo from v$logmnr_contents2 where upper(sql_redo) like '%CREATE%';TIMESTAMP-------------------SQL_REDO-------------------------2003-09-21 10:01:55create table t (c1 number);

2、追蹤用戶誤操作或惡意操作:

例如我們現實中有這樣需求,有一次我們發現一位員工通過程序修改了業務數據庫信息,把部分電話的收費類型改成免費了,現在就要求我們從數據庫中查出到底是誰干的這件事?怎么查?LogMiner提供了我們分析日志文件的手段,其中v$logmnr_contents的session_INFO列包含了下面的信息:

login_username=NEW_97 client_info= OS_username=oracle8 Machine_name=phoenix1 OS_terminal=ttyp3 OS_PRocess_id=8004 OS_program name=sqlplus@phoenix1 (TNS V1-V3)

雖然其中信息已經很多了,但在我們的業務數據庫中,程序是通過相同的login_username登錄數據庫的,這樣單從上面的信息是很難判定的。

不過我們注重到,因為公司應用服務器不是每個人都有權限在上面寫程序的,一般惡意程序都是直接通過他自己的PC連到數據庫的,這就需要一個準確的定位。ip追蹤是我們首先想到的,并且也滿足我們的實際要求,因為公司內部IP地址分配是統一治理的,能追蹤到IP地址我們就可以準確定位了。但從面的SESSION_INFO中我們并不能直接看到IP,不過我們還是有辦法的,因為這個SESSION_INFO里面的內容其實是日志從V$SESSION視圖里提取的,我們可以在生產數據庫中創建一個追蹤客戶端IP地址的觸發器:


create or replace trigger on_logon_triggerafter logon on databasebegin dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));end;/


現在,我們就可以在V$SESSION視圖的CLIENT_INFO列中看到新登錄的客戶端IP地址了。那么上面的提出的問題就可以迎刃而解了。假如被更新的表名為HMLX,我們就可以通過下面的SQL來找到所需信息:

SQL > select session_info ,sql_redo from v$logmnr_contents 2 where upper(Operation) = 'UPDATE' and upper(sql_redo) like '%HMLX%'3 /SESSION_INFO-----------------------------------------SQL_REDO-----------------------------------------login_username=C client_info=10.16.98.26 OS_username=sz-xjs-chengyx Machine_name=GDTEL/SZ-XJS-CHENGYXupdate "C"."HMLX" set "NAME" = 'free' where "NAME" = 'ncn.cn' and ROWID = 'AAABhTAAFAAABRaAAE';

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富民县| 鄂托克前旗| 海淀区| 年辖:市辖区| 武平县| 团风县| 商城县| 宁陕县| 织金县| 巴马| 民县| 酒泉市| 金乡县| 阿合奇县| 电白县| 澎湖县| 南安市| 常德市| 平远县| 城市| 莱阳市| 邵阳市| 佛山市| 扶绥县| 定远县| 海林市| 盐山县| 祁连县| 咸宁市| 交城县| 宾川县| 富源县| 克山县| 九龙县| 砀山县| 滨海县| 新民市| 江华| 宁津县| 鱼台县| 南乐县|