查找上次更新时间表

时间:2013-07-05 12:56:25

标签: sql-server-2008-r2

我想检索上次更新表(插入,删除,更新)。

我尝试了这个查询。

SELECT last_user_update
FROM sys.dm_db_index_usage_stats
WHERE object_id=object_id('T')

但是服务重新启动时数据不会持续存在。

即使服务重新启动,我也希望保留统计信息。我怎样才能实现它?

7 个答案:

答案 0 :(得分:48)

如果您在谈论上次更新表的结构已更改(添加了新列,更改列等) - 请使用此查询:

SELECT name, [modify_date] FROM sys.tables

如果您正在讨论DML操作(插入,更新,删除),那么您需要保持DMV定期提供的内容,或者您​​需要在所有表上创建触发器以记录“上次修改“日期 - 或检查SQL Server 2008及更新版本中的Change Data Capture等功能。

答案 1 :(得分:8)

如果您想查看数据更新,可以使用具有所需权限的this technique

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'DATABASE')
AND OBJECT_ID=OBJECT_ID('TABLE')

答案 2 :(得分:3)

要保留有关数据修改的审计数据,您需要在您感兴趣的每个表上实现DML触发器。您需要创建一个Audit表,并将代码添加到触发器以写入此表。 / p>

有关如何实现DML触发器的更多详细信息,请参阅此MDSN文章http://msdn.microsoft.com/en-us/library/ms191524%28v=sql.105%29.aspx

答案 3 :(得分:2)

SELECT so.name,so.modify_date

FROM sys.objects as so

INNER JOIN INFORMATION_SCHEMA.TABLES as ist

ON ist.TABLE_NAME=so.name where ist.TABLE_TYPE='BASE TABLE' AND 

TABLE_CATALOG='DbName' order by so.modify_date desc;

这有助于使用表名

来修改表

答案 4 :(得分:1)

查找表格的最新更新时间

`SELECT
tbl.name
,ius.last_user_update
,ius.user_updates
,ius.last_user_seek
,ius.last_user_scan
,ius.last_user_lookup
,ius.user_seeks
,ius.user_scans
,ius.user_lookups
FROM
sys.dm_db_index_usage_stats ius INNER JOIN
sys.tables tbl ON (tbl.OBJECT_ID = ius.OBJECT_ID)
WHERE ius.database_id = DB_ID()
`
  

http://www.sqlserver-dba.com/2012/10/sql-server-find-last-time-of-update-on-a-table.html

答案 5 :(得分:0)

为什么不只运行它:不需要特殊权限

SELECT
    name, 
    object_id, 
    create_date, 
    modify_date
FROM
    sys.tables 
WHERE 
    name like '%yourTablePattern%'
ORDER BY
    modify_date

答案 6 :(得分:-4)

SELECT SCN_TO_TIMESTAMP(MAX(ora_rowscn)) from my_table;

以上命令为您提供修改表数据时的最后一个时间戳。

ORA_ROWSCN:对于每一行,ORA_ROWSCN返回对该行的最新更改的保守上限系统更改编号(SCN)。