1:在程序中把操作用SQL記錄到日志表中
創(chuàng)新互聯(lián)2013年開創(chuàng)至今,先為興業(yè)等服務(wù)建站,興業(yè)等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為興業(yè)企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
2:在被操作的數(shù)據(jù)表建觸發(fā)器,在觸發(fā)器中記錄用戶操作情況
一、前提條件
系統(tǒng)必須是使用LOG4J進(jìn)行日志管理,否則方法無效。
系統(tǒng)必須包含commons-logging-xxx.jar,log4j-xxx.jar這兩個(gè)JAR包,XXX為版本號(hào)。
二、操作步驟
1、創(chuàng)建日志表
要把日志持久化,必須在數(shù)據(jù)庫中創(chuàng)建一張用來存儲(chǔ)日志信息的表,表內(nèi)字段為日志
的一個(gè)主要屬性包括:操作類,執(zhí)行方法,打印時(shí)間,日志級(jí)別,日志內(nèi)容。
CREATE TABLE RESLOG (LOGID VARCHAR2(20) NOT NULL,
CLASS VARCHAR2(200),
METHOD VARCHAR2(100),
CREATETIME DATE,
LOGLEVEL VARCHAR2(50),
MSG VARCHAR2(4000))
因?yàn)榇鎯?chǔ)的類為類的全部路徑,所以CLASS字段長(zhǎng)度需要比較大。
2、日志管理配置
LOG4J主要有兩種配置文件.properties和.xml,這里以properties文件為基礎(chǔ)來講
述,關(guān)于XML文件的配置,相信大家看完下面的介紹也一樣能輕松完成。
通常在LOG4J.PROPERTIES文件的第一行是:
log4j.rootLogger= XXX,這句是控制日志的輸出,如果想吧日志輸出到數(shù)據(jù)庫,
則需要在XXX中添加“DB”,如log4j.rootLogger=INFO,stdout,Platform,db。上面
這句就是把日志中級(jí)別為INFO的信息輸出到STDOUT,PLATFORM和DB
(DATABASE)中。
配置好如上的信息,LOG4J就知道用戶是想把信息存入數(shù)據(jù)庫,接下來我們就要來
配置數(shù)據(jù)庫的相關(guān)信息(包括緩存,數(shù)據(jù)庫連接信息,和執(zhí)行SQL),配置信息如下:
###JDBCAppender
log4j.appender.db = org.apache.log4j.jdbc.JDBCAppender
//這個(gè)配置是選擇使用JDBCAppender方法,將日志信息存儲(chǔ)到數(shù)據(jù)庫。當(dāng)然,如果你還要做其他操作,可以自己寫個(gè)類,繼承JDBCAppender就OK了。
log4j.appender.db.BufferSize=1
//這個(gè)配置是告訴LOG4J,有多少條日志信息后才存入數(shù)據(jù)庫,我這里是1,就是說有一條就查一條,顯然這樣在生產(chǎn)環(huán)境下是很影響系統(tǒng)性能的。
log4j.appender.db.driver=oracle.jdbc.driver.OracleDriver
//這個(gè)配置是告訴LOG4J,做數(shù)據(jù)庫存儲(chǔ)所用的驅(qū)動(dòng)。
log4j.appender.db.URL=jdbc:oracle:thin:@ip:port:sid
//這個(gè)配置數(shù)據(jù)庫連接的URL,不用說也都知道。
log4j.appender.db.user=XXX
log4j.appender.db.password=XXX
//上面兩個(gè)是數(shù)據(jù)庫連接時(shí)的用戶名和密碼
log4j.appender.db.sql=insert into RESLOG
(LogId,Class,Method,createTime,LogLevel,MSG)
values (SQ_RESLOG_LOGID.Nextval,'%C','%M',
to_date('%d{yyyy-MM-dd HH:mm:ss}','yyyy-MM-dd
HH24:mi:ss'),'%p','%m')
//這個(gè)配置是告訴當(dāng)LOG4J吧日志存儲(chǔ)數(shù)據(jù)庫時(shí)用的SQL語句。SQ_RESLOG_LOGID.Nextval是我建的一個(gè)SEQUENCE;‘%C’是日志中的CLASS;‘%M’是打印日志是執(zhí)行到類里的方法;‘%d’是打印的時(shí)間,它支持格式化;‘%P’是日志級(jí)別,包括INFO、DEBUG、ERROR等;‘%m’是MSG,日志內(nèi)容。注意這里的參數(shù)區(qū)分大小寫。
log4j.appender.db.layout=org.apache.log4j.PatternLayout
通過上面的配置,現(xiàn)在再啟動(dòng)服務(wù),LOG4J就會(huì)自動(dòng)把原來存儲(chǔ)在.LOG文件中的信息,同時(shí)存儲(chǔ)到數(shù)據(jù)庫了。
可以使用oracle
sql
loader批量導(dǎo)入數(shù)據(jù):
生成測(cè)試數(shù)據(jù)的EXCEL文件,把EXCEL文件另存為CSV(逗號(hào)分隔)(*.csv),控制文件設(shè)置為用逗號(hào)分隔。
示例:
LOAD
DATA
INFILE
‘d:\car.csv’
APPEND
INTO
TABLE
t_car_temp
FIELDS
TERMINATED
BY
","
(phoneno,vip_car)
保存為input.ctl
最后在命令行下輸入:
C:\sqlldr
userid=system/manager
control=input.ctl(在unix環(huán)境下亦同)
默認(rèn)日志文件名為:input.log
默認(rèn)壞記錄文件為:input.bad
1、Oracle日志的路徑的查看:
登錄:sqlplus "/as sysdba"
查看路徑:SQL select * from v$logfile;
SQL select * from v$logfile;(#日志文件路徑)
2、Oracle日志文件包含哪些內(nèi)容:(日志的數(shù)量可能略有不同)
control01.ctl example01.dbf redo02.log ? sysaux01.dbf undotbs01.dbf
control02.ctl redo03.log ? system01.dbf users01.dbf
control03.ctl redo01.log ? ? SHTTEST.dbf temp01.dbf
3、Oracle日志的查看方法語句代碼:
SQLselect * from v$sql ? (#查看最近所作的操作)
SQLselect * fromv $sqlarea(#查看最近所作的操作)
4、LogMiner的使用:
5、查看LogMiner工具分析結(jié)果
SQL select * from dict t where t.table_name like '%LOGMNR%';看所有與logmnr相關(guān)的視圖
6、分析結(jié)果在GV$LOGMNR_CONTENTS 視圖中,可按以下語句查詢:?
selec tscn , timestamp , log_id , seg_owner , seg_type , table_space , data_blk# , data_obj# , data_objd#, session#,serial#,username,session_info,sql_redo,sql_undo from logmnr3 t where t.sql_redo like 'create%';