如何确定我的表已在sql server中更新

如何确定我的表已在sql server中更新

问题描述:

我在sql server 2005中有一个表。昨天在表上执行了更新,然后更新回原始记录。
现在我想知道更新的值是什么。至少我想知道它是否真的更新了。
有没有办法从交易日志中确定我想要的东西?
谢谢。如何确定我的表已在sql server中更新

有一个undocumented command

DBCC日志(DBNAME,0 | 1 | 2 | 3 | 4)

其中

0:最小信息(默认)

1:使用0 + 标志,标签和日志记录长度返回可用信息。

2:使用 返回可用信息1 +对象,索引,页面ID和插槽ID。

3:每个操作的最大信息约为 。

4:关于当前事务日志行

而且阅读的每个操作+ 十六进制转储最大的信息:Looking for a SQL Transaction Log file viewer

+0

我在运行命令时收到一些数据。但我怎么能过滤这些返回的记录,看看我的表是否在特定的日期更新?可能吗? – Fer

+0

@Fer可能不是,但你可以尝试有一个相对的时间框架。如果您知道更新是在特定日期完成的(例如每天执行的作业),您可以搜索它。 – xanatos

+0

我知道确切的时间(昨天上午9点19分)。然而,当时在数据库上有更新/插入的呃。所以我需要运行一个特定的表的命令。如果这是不可能的,我想我将无法学习它。 – Fer

虽然不是一个精确的方法(例如你有数据只能从最后一次SQL Server重启),你可以试着用sys.dm_exec_query_stats查看:

CREATE TABLE dbo.LongTableName (ID INT IDENTITY(1,1) PRIMARY KEY, Column1 VARCHAR(10) NOT NULL); 

INSERT LongTableName VALUES ('A'); 
INSERT LongTableName VALUES ('BB'); 
INSERT LongTableName VALUES ('CCC'); 
WAITFOR DELAY '00:00:05'; 
INSERT LongTableName VALUES ('DDDD'); 
GO 

SELECT ca.[text], s.last_execution_time, s.last_logical_reads, s.last_logical_writes, s.execution_count 
FROM sys.dm_exec_query_stats s 
CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) ca 
WHERE ca.[text] LIKE '%INSERT%LongTableName%' 
GO 

DROP TABLE LongTableName; 
GO 

例如,其中一条记录为:

text last_execution_time  last_logical_reads last_logical_writes execution_count 
(@1 varchar(8000))INSERT INTO [LongTableName] values(@1)  
     2011-10-04 10:51:17.070 2     0     4 
+0

这是令人惊叹的方式。但不幸的是,我今天重新启动了系统,因此我无法在今天上午之前显示更改。我需要昨天的记录。 – Fer