如何确定我的表在 sql server 中已更新
Posted
技术标签:
【中文标题】如何确定我的表在 sql server 中已更新【英文标题】:how to determine that my table was updated in sql server 【发布时间】:2011-10-04 07:16:58 【问题描述】:我在 sql server 2005 中有一个表。昨天对表执行了更新,然后更新回原始记录。 现在我想弄清楚更新的值是什么。至少我想知道它是否真的更新了。 有没有办法从事务日志中确定我想要什么? 谢谢。
【问题讨论】:
【参考方案1】:有一个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
【讨论】:
我在运行命令时收到了一些数据。但是我如何过滤这些返回记录以查看我的表是否在特定日期更新?有可能吗? @Fer 可能不是,但你可以尝试有一个相对的时间范围。如果您知道某个更新在某个日期完成(例如每天执行的作业),您可以搜索它。 我知道确切的时间(昨天上午 9:19)。但是,当时数据库上有数百个更新/插入。所以我需要为一个特定的表运行命令。如果这不可能,我想我将无法学习它。【参考方案2】:虽然不是一个精确的方法(例如,你只有上次 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
【讨论】:
这是一个了不起的方式。但不幸的是,我今天重新启动了系统,所以我无法显示今天早上之前的更改。我需要昨天的记录。以上是关于如何确定我的表在 sql server 中已更新的主要内容,如果未能解决你的问题,请参考以下文章
当数据库中的表在java中更新时如何立即更新jcombobox
出现:“数据库中已存在名为 'Assembles' 的对象。”问题,无法更新数据库,请问知道如何处理吗??
在 SQL Server 2008 R2 中为每个表创建创建触发器