Найти последнюю таблицу времени была обновлена - программирование
Подтвердить что ты не робот

Найти последнюю таблицу времени была обновлена

Я хочу получить последнюю таблицу времени, обновленную (вставить, удалить, обновить).

Я попробовал этот запрос.

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

но данные там не сохраняются на перезагрузках службы.

Я хочу сохранить статистику, даже если служба перезагрузится. Как я могу это достичь?

4b9b3361

Ответ 1

Если вы говорите о последнем обновлении таблицы с точки зрения ее структурированного изменения (добавлен новый столбец, изменился столбец и т.д.) - используйте этот запрос:

SELECT name, [modify_date] FROM sys.tables

Если вы говорите об операциях DML (вставляете, обновляете, удаляете), вам необходимо либо постоянно сохранять то, что DMV предоставляет вам на регулярной основе, либо создавать триггеры во всех таблицах, чтобы записать "последний измененный" date - или проверить функции, такие как Изменить сбор данных в SQL Server 2008 и новее.

Ответ 2

Если вы хотите увидеть обновления данных, вы можете использовать этот метод с необходимыми разрешениями:

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

Ответ 3

Чтобы сохранить данные аудита, касающиеся модификаций данных, вам потребуется реализовать триггер DML для каждой интересующей вас таблицы. Вам нужно будет создать таблицу аудита и добавить код к вашим триггерам для записи в эту таблицу.

Подробнее о том, как реализовать триггеры DML, см. в этой статье MDSN http://msdn.microsoft.com/en-us/library/ms191524%28v=sql.105%29.aspx

Ответ 4

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;

это поможет получить изменение таблицы с именем таблицы

Ответ 5

Найти время последнего обновления таблицы

'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

Ответ 6

Почему бы просто не запустить это: нет необходимости в специальных разрешениях

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

Ответ 7

SELECT SCN_TO_TIMESTAMP(MAX(ora_rowscn)) from my_table;

Приведенная выше команда дает вам последнюю метку времени, когда данные таблицы были изменены.

ORA_ROWSCN: для каждой строки ORA_ROWSCN возвращает консервативный верхний системный номер изменения системы (SCN) последнего изменения в строке.