
1、可以使用默认的Log工具或者第三方的(比如:LiteSpeed)的工具。
2、做Trace机制,下次出现问题可以溯源。
3、一个简单的办法:
--Step #1:
USE DBName
GO
SELECT
[Transaction ID],
Operation,
Context,
AllocUnitName
FROM
fn_dblog(NULL, NULL)
WHERE
Operation = 'LOP_DELETE_ROWS' and
AllocUnitName= 'dbo.Test.PK__Test__5F573DD6'
-- 这里 'dbo.Test.PK__Test__5F573DD6'指表名的PK_Name
-- 可以使用 SP_Pkeys SourceTableName 查到
--Step #2:
SELECT
Operation,
[Transaction ID],
[Begin Time],
[Transaction Name],
[Transaction SID]
FROM
fn_dblog(NULL, NULL)
WHERE
[Transaction ID] ='0000:0005afba' -- 这里 '0000:0005afba' 指Step #1中的Transaction ID
AND
[Operation] = 'LOP_BEGIN_XACT'
--Step #3:
USE MASTER
GO
SELECT SUSER_SNAME(0x01) 'UserID' --这里'0000:0005afba' 值Step #2中的Transaction SID
方法一:FLASH BACK针对情况是:修改表的时间离你发现的时间不远。如果过了几天了基本上也就不能查到了。9i只能回闪查询。10G支持的功能更强大。
例子:select * from scott.emp as of timestamp (systimestamp -interval '10'second)
可以参考文档:http://warehouse.itpub.net/post/777/397272
方法二:LOG MINER
针对情况是:只要数据库在归档方式就可以对这些日志进行分析,找到你那个时间点对数据库中表的 *** 作。
*** 作步骤大概如下:
-----------------日志挖掘------------------------------
set directory:设置init.ora中的参数utl_fie_dir
alter system set utl_file_dir='/u01' scope=spfile
begin
sys.dbms_logmnr_d.build('tanyunlin.log','/u01')
end
/
添加日志文件列表
exec dbms_logmnr.add_logfile(logfilename =>'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG',options =>dbms_logmnr.new)
添加一个新的日志文件
execute dbms_logmnr.add_logfile(LogFileName =>'C:\oracle\product\10.1.0\oradata\orcl\REDO02.LOG',Options =>dbms_logmnr.ADDFILE)
运行LOGMINER分析
1.使LOGMINER使用当前数据库的数据字典(OPEN状态、只用于跟踪DML *** 作)
exec dbms_logmnr.start_logmnr(options =>dbms_logmnr.dict_from_online_catalog)
exec dbms_logmnr.start_logmnr(dictfilename=>'/u01/tanyunlin.log',options =>dbms_logmnr.ddl_dict_tracking)
2.无限制条件,即用数据字典文件对要分析的日志文件所有内容做分析
execute dbms_logmnr.start_logmnr(DictFileName =>'/u01/tanyunlin')
3.带限制条件,可以用scn号或时间做限制条件,也可组合使用
execute dbms_logmnr.start_logmnr(startTime =>to_date('20070228100000','yyyy-mm-dd hh24:mi:ss'),
endTime =>to_date('20070228150000','yyyy-mm-dd hh24:mi:ss'),DictFileName =>'G:\oracle\logs\dict.ora')
查看日志分析结果
col username for a8
col sql_redo for a60
select username,to_char(timestamp,'yyyymmdd hh24:mi:ss'),sql_redo from v$logmnr_contents where sql_redo like '%delete%'
结束LOGMINER
exec dbms_logmnr.end_logmnr
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)