Je veux récupérer la dernière fois que le tableau a été mis à jour (insérer, supprimer, mettre à jour).
J'ai essayé cette requête.
SELECT last_user_update
FROM sys.dm_db_index_usage_stats
WHERE object_id=object_id('T')
mais les données ne sont pas conservées lors des redémarrages de service.
Je veux conserver les statistiques même si le service redémarre. Comment puis-je y arriver?
Si vous parlez de la dernière mise à jour de la table, sa structure a été modifiée (nouvelle colonne ajoutée, colonne modifiée, etc.) - utilisez cette requête:
SELECT name, [modify_date] FROM sys.tables
Si vous parlez d'opérations DML (insertion, mise à jour, suppression), vous devez soit conserver ce que DMV vous offre régulièrement, soit créer des déclencheurs sur toutes les tables pour enregistrer cette date de "dernière modification" - ou consultez des fonctionnalités telles que Change Data Capture dans SQL Server 2008 et versions ultérieures.
Si vous souhaitez voir les mises à jour des données, vous pouvez utiliser cette technique avec les autorisations requises:
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')
Pour conserver les données d'audit concernant les modifications de données, vous devez implémenter un déclencheur DML sur chaque table qui vous intéresse. Vous devez créer une table d'audit et ajouter du code à vos déclencheurs pour écrire dans cette table.
Pour plus d'informations sur l'implémentation des déclencheurs DML, consultez cet article MDSN http://msdn.Microsoft.com/en-us/library/ms191524%28v=sql.105%29.aspx
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;
ceci est une aide pour obtenir une table à modifier avec le nom de la table
Trouver la dernière heure de mise à jour sur une table
`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-atable.html