2013-07-05 11 views
14

Chcę pobrać ostatnią tabelę czasu została zaktualizowana (wstaw, usuń, aktualizacji).Znajdź ostatnią tabelę czasu została zaktualizowana

Próbowałem tego zapytania.

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

ale dane tam nie są zachowywane po ponownym uruchomieniu usługi.

Chcę zachować statystyki, nawet jeśli usługa zostanie uruchomiona ponownie. Jak mogę to osiągnąć?

Odpowiedz

38

Jeśli mówisz ostatnim czasie został zaktualizowany w tabeli pod względem strukturyzowanych zmieniła (nowa kolumna dodana kolumna zmienił itp) - użyj tej kwerendy:

SELECT name, [modify_date] FROM sys.tables 

Jeśli mówisz o operacjach DML (wstawianie, aktualizowanie, usuwanie), musisz albo utrzymywać to, co ten DMV daje regularnie, albo musisz utworzyć wyzwalacze na wszystkich tabelach, aby nagrać datę "ostatniej modyfikacji" - lub sprawdzić funkcje, takie jak Change Data Capture w SQL Server 2008 i nowszych.

+0

Rozwiązanie będzie działać wyłącznie w przedsiębiorstwie, Developer, a edycje Enterprise Evaluation. –

+0

@RameshDurai: o którym rozwiązaniu mówisz? 'Sys.tables' występuje w wersjach ** ALL ** serwera SQL. Ale CDC (Change Data Capture) może być funkcją edycji tylko dla przedsiębiorstw, to jest prawda –

+0

Zmiana przechwytywania danych. Ponieważ muszę uzyskać zaktualizowany czas operacji DML. –

2

Aby zachować dane audytu dotyczące modyfikacji danych, musisz zaimplementować wyzwalacz DML dla każdej tabeli, która Cię interesuje. Musisz utworzyć tabelę Audytu i dodać kod do wyzwalaczy, aby zapisać do tej tabeli.

Aby uzyskać więcej informacji dotyczących sposobu realizacji DML wyzwalacze, odnoszą się do tego MDSN artykule http://msdn.microsoft.com/en-us/library/ms191524%28v=sql.105%29.aspx

4

Jeśli chcesz zobaczyć aktualizacje danych można użyć this technique z wymaganymi uprawnieniami:

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') 
+10

To rozwiązanie nie nie działa, jeśli usługa zostanie uruchomiona ponownie. –

+2

Jest to właśnie to, czego OP próbuje uniknąć. – KyleMit

-4
SELECT SCN_TO_TIMESTAMP(MAX(ora_rowscn)) from my_table; 

The powyższe polecenie podaje ostatni znacznik czasu, gdy dane tabeli zostały zmodyfikowane.

ORA_ROWSCN: Dla każdego wiersza, ORA_ROWSCN zwraca konserwatywny górny limit zmiany numeru systemu (SCN) ostatniej zmiany w wierszu.

+1

Pytanie dotyczy serwera SQL, a nie Oracle! –

0
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; 

to pomaga dostać stolik modyfikować z nazwą tabeli

+0

To zapytanie dotyczy tylko sytuacji, gdy schemat tabeli był ostatnio modyfikowany – Breakskater

Powiązane problemy