SQLServer数据库怎么查看表的修改记录

SQLServer数据库怎么查看表的修改记录,第1张

可以尝试如下建议:

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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9933701.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存