Как перечислить таблицы, где данные были вставлены удалены или обновлены на прошлой неделе

У меня есть базы данных sql server 2008, я хотел бы знать, какие таблицы были обновлены на прошлой неделе, т.е. таблицы, в которых есть новые строки, обновлены существующие строки или какие строки удалены.

Есть ли способ сделать это для существующей базы данных.

Попробуй это –

SELECT [db_name] = d.name , [table_name] = SCHEMA_NAME(o.[schema_id]) + '.' + o.name , s.last_user_update FROM sys.dm_db_index_usage_stats s JOIN sys.databases d ON s.database_id = d.database_id JOIN sys.objects o ON s.[object_id] = o.[object_id] WHERE o.[type] = 'U' AND s.last_user_update IS NOT NULL AND s.last_user_update BETWEEN DATEADD(wk, -1, GETDATE()) AND GETDATE() 

Попробуйте сменить захват данных . Это хороший способ отслеживать изменения в БД. Вы должны включить эту функцию в одной или нескольких БД, затем в одной или нескольких таблицах (это функция таблицы, поэтому вы сделаете это для каждой таблицы, в которой вы нуждаетесь).


Включить CDC в базе данных.

Предположим, мы хотим включить CDC для базы данных AdventureWorks. Мы должны запустить следующий SP, чтобы убедиться, что эта функция будет работать:

 USE AdventureWorks GO EXEC sys.sp_cdc_enable_db GO 

В результате мы найдем новую схему cdc и автоматически добавим несколько таблиц:

  • cdc.captured_columns – Эта таблица возвращает результат для списка захваченного столбца.
  • cdc.change_tables – Эта таблица возвращает список всех таблиц, которые разрешены для захвата.
  • cdc.ddl_history – эта таблица содержит историю всех изменений DDL с момента включения данных захвата.
  • cdc.index_columns – Эта таблица содержит индексы, связанные с таблицей изменений.
  • cdc.lsn_time_mapping – эта таблица отображает номер и время LSN.

Включить CDC на столе.

После включения CDC в нужные DB (ы) пришло время проверить, есть ли таблицы с этой функцией:

 USE AdventureWorks GO SELECT [name], is_tracked_by_cdc FROM sys.tables GO 

Если нет, мы можем включить захват изменений для таблицы HumanResources.Shift со следующей процедурой:

 USE AdventureWorks GO EXEC sys.sp_cdc_enable_table @source_schema = N'HumanResources', @source_name = N'Shift', @role_name = NULL GO 

Убедитесь, что SQL Agent запущен и запущен, потому что он создаст задание (возможно, cdc.AdventureWorks_capture), чтобы уловить изменения. Если все процедуры выполнены правильно, мы найдем новую таблицу cdc.HumanResources_Shift_CT из системных таблиц, содержащую все изменения HumanResources.Shift.

Примечание : будьте осторожны с параметром @role_name, он указывает доступ к информации о базе данных.

Невозможно узнать эту информацию по умолчанию, если у вас уже не установлена ​​какая-либо система аудита.

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

Вы можете попробовать прочитать журнал транзакций с помощью SQL-сервера DBCC LOG и fn_dblog или с использованием сторонних инструментов, таких как ApexSQL Log .

Как прокомментировали другие, изменение данных захвата и отслеживания изменений будет идеальным решением, если вы их внедрили. Если вы этого не сделали, то это быстрый способ, который частично даст вам информацию:

 SELECT OBJECT_NAME(OBJECT_ID) AS Object, last_user_update FROM sys.dm_db_index_usage_stats WHERE database_id = DB_ID( <YourDBName>) AND OBJECT_ID=OBJECT_ID(<YourTableName>) 

Это скажет вам, какие таблицы были обновлены, но не может действительно служить вашей цели, если вы столкнулись со сценарием whodunnit. Кроме того, он предоставит вам только обновленную временную метку, то есть, если кто-то обновит последнюю неделю, а кто-то еще обновил вчера, вы не увидите последние обновления.

Радж

Попробуйте это. Он предоставит последнюю обновленную дату для каждой таблицы в базе данных.

 USE database_name GO SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,* FROM sys.dm_db_index_usage_stats GO 

Для получения дополнительной информации нажмите здесь

Interesting Posts
Давайте будем гением компьютера.