真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle日志表怎么寫,oracle操作日志記錄

oracle 數(shù)據(jù)文件 日志文件 寫法

深入分析Oracle數(shù)據(jù)庫(kù)日志文件

建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁(yè)設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁(yè)設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)專業(yè)提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站開發(fā)、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!

作為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ù)字典的,詳見下面的分析過(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)開啟日志分析,同時(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ù)打開的狀態(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ǔ)上,開始支持基于實(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;

怎么樣在Oracle中寫操作系統(tǒng)文件,如寫日志

必須配置Utl_file_dir初始化參數(shù),并保證日志路徑與Utl_file_dir路徑一致或者是其中一個(gè)

CREATE OR REPLACE PROCEDURE sp_Write_log(text_context VARCHAR2)

IS

file_handle utl_file.file_type;

Write_content VARCHAR2(1024);

Write_file_name VARCHAR2(50);

BEGIN

Oracle中怎樣用自治事務(wù)保存日志表

數(shù)據(jù)庫(kù)事務(wù)是一種單元操作,要么是全部操作都成功,要么全部失敗。在Oracle中,一個(gè)事務(wù)是從執(zhí)行第一個(gè)數(shù)據(jù)治理語(yǔ)言(DML)語(yǔ)句開始,直到執(zhí)行一個(gè)COMMIT語(yǔ)句,提交保存這個(gè)事務(wù),或者執(zhí)行一個(gè)ROLLBACK語(yǔ)句,放棄此次操作結(jié)束。 事務(wù)的“要么全部完成,要么什么都沒(méi)完成”的本性會(huì)使將錯(cuò)誤信息記入數(shù)據(jù)庫(kù)表中變得很困難,因?yàn)楫?dāng)事務(wù)失敗重新運(yùn)行時(shí),用來(lái)編寫日志條目的INSERT語(yǔ)句還未完成。 針對(duì)這種困境,Oracle提供了一種便捷的方法,即自治事務(wù)。自治事務(wù)從當(dāng)前事務(wù)開始,在其自身的語(yǔ)境中執(zhí)行。它們能獨(dú)立地被提交或重新運(yùn)行,而不影響正在運(yùn)行的事務(wù)。正因?yàn)檫@樣,它們成了編寫錯(cuò)誤日志表格的理想形式。在事務(wù)中檢測(cè)到錯(cuò)誤時(shí),您可以在錯(cuò)誤日志表格中插入一行并提交它,然后在不丟失這次插入的情況下回滾主事務(wù)。 因?yàn)樽灾问聞?wù)是與主事務(wù)相分離的,所以它不能檢測(cè)到被修改過(guò)的行的當(dāng)前狀態(tài)。這就似乎在主事務(wù)提交之前,它們一直處于單獨(dú)的會(huì)話里,對(duì)自治事務(wù)來(lái)說(shuō),它們是不可用的。然而,反過(guò)來(lái)情況就不同了:主事務(wù)能夠檢測(cè)到已經(jīng)執(zhí)行過(guò)的自治事務(wù)的結(jié)果。 要?jiǎng)?chuàng)建一個(gè)自治事務(wù),您必須在匿名塊的最高層或者存儲(chǔ)過(guò)程、函數(shù)、數(shù)據(jù)包或觸發(fā)的定義部分中,使用PL/SQL中的PRAGMA AUTONOMOUS_TRANSACTION語(yǔ)句。在這樣的模塊或過(guò)程中執(zhí)行的SQL Server語(yǔ)句都是自治的。 觸發(fā)無(wú)法包含COMMIT語(yǔ)句,除非有PRAGMA AUTONOMOUS_TRANSACTION標(biāo)記。但是,只有觸發(fā)中的語(yǔ)句才能被提交,主事務(wù)則不行。 列表A展示了對(duì)一個(gè)簡(jiǎn)單但靈活的錯(cuò)誤日志表格所作的CREATE TABLE和CREATE SEQUENCE語(yǔ)句。 CREATE TABLE errorlog ( errorlog_id NUMBER, logged_on TIMESTAMP DEFAULT SYSTIMESTAMP, logged_by VARCHAR2(30) DEFAULT USER, num1 NUMBER, num2 NUMBER, num3 NUMBER, text1 VARCHAR2(1000), text2 VARCHAR2(1000), text3 VARCHAR2(1000) ); CREATE SEQUENCE errorlog_seq START WITH 1 INCREMENT BY 1; 列表B是一個(gè)獨(dú)立的存儲(chǔ)過(guò)程,用于更新錯(cuò)誤日志表格。 CREATE OR REPLACE PROCEDURE log_error ( n1 IN NUMBER:=NULL, t1 IN VARCHAR:=NULL, n2 IN NUMBER:=NULL, t2 IN VARCHAR:=NULL, n3 IN NUMBER:=NULL, t3 IN VARCHAR:=NULL ) IS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN INSERT INTO errorlog (errorlog_id, num1, num2, num3, text1, text2, text3) VALUES (errorlog_seq.NEXTVAL, n1, n2, n3, t1, t2, t3); COMMIT; END; 該過(guò)程接受最多三個(gè)數(shù)字和三個(gè)文本變量,然后將它們和時(shí)間戳以及調(diào)用過(guò)程的用戶一起儲(chǔ)存在表格中。 要測(cè)試這個(gè)過(guò)程,就要更新(UPDATE)或刪除(DELETE)表格中的某些行;這就引發(fā)了主事務(wù)。然后執(zhí)行存儲(chǔ)過(guò)程,將您選擇的要記入日志的數(shù)據(jù)傳遞給它。

已經(jīng)在oracle數(shù)據(jù)庫(kù)中建好了日志記錄表,我怎么把系統(tǒng)里的用戶操作添加進(jìn)去,是每個(gè)方法寫一個(gè)SQL語(yǔ)句?

1:在程序中把操作用SQL記錄到日志表中

2:在被操作的數(shù)據(jù)表建觸發(fā)器,在觸發(fā)器中記錄用戶操作情況


文章題目:oracle日志表怎么寫,oracle操作日志記錄
文章出自:http://weahome.cn/article/phjeoh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部