web-dev-qa-db-fra.com

Trouver le dernier horaire mis à jour

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?

18
Ramesh Durai

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.

41
marc_s

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')
6
MERT DOĞAN

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

2
Julian Joseph
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

1

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

0
Ayaat Shifa