如何确定我的表已在sql server中更新
问题描述:
我在sql server 2005中有一个表。昨天在表上执行了更新,然后更新回原始记录。
现在我想知道更新的值是什么。至少我想知道它是否真的更新了。
有没有办法从交易日志中确定我想要的东西?
谢谢。如何确定我的表已在sql server中更新
答
DBCC日志(DBNAME,0 | 1 | 2 | 3 | 4)
其中
0:最小信息(默认)
1:使用0 + 标志,标签和日志记录长度返回可用信息。
2:使用 返回可用信息1 +对象,索引,页面ID和插槽ID。
3:每个操作的最大信息约为 。
4:关于当前事务日志行
而且阅读的每个操作+ 十六进制转储最大的信息:Looking for a SQL Transaction Log file viewer
答
虽然不是一个精确的方法(例如你有数据只能从最后一次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
我在运行命令时收到一些数据。但我怎么能过滤这些返回的记录,看看我的表是否在特定的日期更新?可能吗? – Fer
@Fer可能不是,但你可以尝试有一个相对的时间框架。如果您知道更新是在特定日期完成的(例如每天执行的作业),您可以搜索它。 – xanatos
我知道确切的时间(昨天上午9点19分)。然而,当时在数据库上有更新/插入的呃。所以我需要运行一个特定的表的命令。如果这是不可能的,我想我将无法学习它。 – Fer