ivanmp Asked: 2012-03-07 10:54:02 +0800 CST2012-03-07 10:54:02 +0800 CST 2012-03-07 10:54:02 +0800 CST 上次在表中插入/更新/删除数据是什么时候? 772 我找到了这个解决方案,但是每次重新启动 SQL Server 服务时,此信息都会丢失,或者换句话说,它不是持久的。 即使服务器在事后关闭,还有其他方法可以找出上次更新表的时间吗? sql-server 4 个回答 Voted Best Answer Aaron Bertrand 2012-03-07T15:12:25+08:002012-03-07T15:12:25+08:00 如果您可以接受其他解决方案中的数据,那么您可以简单地滚动您自己的数据集合以使其持久化。例如,创建一个表来存储 object_id 和 last seek/scan/update。每 n 分钟拍摄一次 DMV 的快照。然后检查快照中的最大值,如果它大于汇总中的最大值,则更新汇总。您可以将快照保留为历史记录,也可以在合并后随时间清理它们。 Dean Goodman 2012-03-07T12:06:40+08:002012-03-07T12:06:40+08:00 如果您有权访问 SQL Server 企业版,请查看更改跟踪。然而,这是一个相当复杂的解决方案。最终,正如已经建议的那样,添加 LastUpdated 列可能会更容易。 Jakub 2012-03-07T12:25:19+08:002012-03-07T12:25:19+08:00 我还要指出,您将通过创建日志表(跟踪插入/删除/更新)或在记录中添加带有日期的标志(这将花费每条记录的一些额外磁盘空间)来获得更好的里程。 无论哪种方式,SQL Server 默认情况下都不会跟踪这一点,因为它对于高事务数据库来说会变得昂贵 Aslam Khan 2013-09-09T22:31:42+08:002013-09-09T22:31:42+08:00 这可能对您有帮助: SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update, * FROM sys.dm_db_index_usage_stats WHERE database_id = DB_ID( 'Database Name');
如果您可以接受其他解决方案中的数据,那么您可以简单地滚动您自己的数据集合以使其持久化。例如,创建一个表来存储 object_id 和 last seek/scan/update。每 n 分钟拍摄一次 DMV 的快照。然后检查快照中的最大值,如果它大于汇总中的最大值,则更新汇总。您可以将快照保留为历史记录,也可以在合并后随时间清理它们。
如果您有权访问 SQL Server 企业版,请查看更改跟踪。然而,这是一个相当复杂的解决方案。最终,正如已经建议的那样,添加 LastUpdated 列可能会更容易。
我还要指出,您将通过创建日志表(跟踪插入/删除/更新)或在记录中添加带有日期的标志(这将花费每条记录的一些额外磁盘空间)来获得更好的里程。
无论哪种方式,SQL Server 默认情况下都不会跟踪这一点,因为它对于高事务数据库来说会变得昂贵
这可能对您有帮助: