Подтвердить что ты не робот

Журнал активности базы данных MS SQL Server

У меня есть база данных с более чем ста таблицами. Я постоянно добавляю столбцы к существующим таблицам (если требуется), и я также добавил несколько новых таблиц.

Теперь я хочу проверить, какие изменения я внес в последние 3 месяца. Существует ли какой-либо журнал активности в MS SQL Server 2012 для этой конкретной базы данных для отслеживания изменений.

4b9b3361

Ответ 1

Сейчас ваши варианты ограничены, и вы можете попробовать ниже, а также проверить, не помогают ли они вам сейчас.

1.Если вы включили аудит, вы можете отслеживать изменения

Чтобы проверить, если вы включили аудит, вы можете использовать ниже запрос.

select * from sys.dm_server_audit_status

Если вы не включили аудит, вы можете включить его, следуя следующему: Введение в SQL Server Audit.. Я бы не рекомендовал позволяя проводить аудит, если вам не требуется захват, кроме того, что упоминается в вашем вопросе

Трассировка 2.Default также фиксирует созданные таблицы, но для этого используется механизм roll over files для переопределения последних файлов, когда пространство заполнено, поэтому вам может быть не повезло (поскольку вы запрашиваете диапазон в три месяца), но попробуйте это: Какую информацию о событиях я могу получить по умолчанию от SQL Server?, чтобы узнать все, что предлагается по умолчанию трассировкой

Я бы воспользовался этой опцией и попытался выполнить резервное копирование этих файлов, в зависимости от того, когда они свернутся (так как вам нужно только проверить изменения таблицы)

3. Наконец, последний вариант заключается в запросе Tlog

select * from fn_dblog(null,null) where [transaction name]='CREATE TABLE'

вышеуказанная опция Tlog работает только в том случае, если у вас есть резервные копии Tlog более трех месяцев, а также вам необходимо восстановить их.

Ответ 2

Возможно, это может помочь вам разобраться. sys.objects имеет дату создания и изменения, но, к сожалению, sys.columns этого не делает. Однако последние добавленные столбцы будут иметь более высокий столбец. Я не знаю, что вы сможете легко удалить удаленные столбцы. Обратите внимание, что изменения, отличные от изменений столбцов, могут быть отражены в дате изменения.

select  s.name [schema], o.name [table], o.modify_date [table_modify_date], c.column_id, c.name
from    sys.schemas s
join    sys.objects o on o.schema_id = s.schema_id
left    join sys.columns c on c.object_id = o.object_id
where   o.type = 'U'    --user tables only
and     o.modify_date >= dateadd(M,-3, getdate())
order   by s.name, o.name, column_id;

Чтобы облегчить этот аудит в будущем, вы можете создать триггер DDL, который будет регистрировать все изменения схемы в таблице или в исходном элементе управления, если вы используете что-то вроде проекта данных SSDT для управления вашими изменениями.

Ответ 3

Чтобы проверить все действия в прошлый раз, вы можете работать с MSSQL Audit. Это лучший способ отслеживать любые изменения в любое время. Пожалуйста, проверьте https://msdn.microsoft.com/en-us/library/cc280386.aspx

Ответ 4

Вы можете запустить отчет из контекстного меню DB:

введите описание изображения здесь

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

Отчет My Schema восходит только к 9/3/2016, но у меня есть 1000+ таблиц с 60 + столбцами с множеством обновлений ежедневно. Ваш может вернуться назад.

Ответ 5

Вы можете использовать триггер DDL:

CREATE TRIGGER ColumnChanges  
ON DATABASE   
FOR ALTER_TABLE  
AS  
DECLARE @data XML  
SET @data = EVENTDATA()  
INSERT alter_table_log   
   (PostTime, DB_User, Event, TSQL)   
   VALUES   
   (GETDATE(),   
   CONVERT(nvarchar(100), CURRENT_USER),   
   @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),   
   @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;  
GO  

Ответ 6

Если у вас есть резервные копии, возвращающиеся на 3 месяца, скажем, на ленте, вы можете восстановить резервную копию как другое имя или на другой сервер, а затем выполнить сравнение схемы с помощью стороннего инструмента - Visual Studio, Devart Schema Compare и т.д.

В противном случае превентивная настройка механизмов до того, как они вам понадобятся, как описано Gameiswar и другими, - единственный способ.

Ответ 7

Сделайте снимки определений метаданных с помощью опции "Создать скрипты..." из Studio SQL Server Management Studio.

введите описание изображения здесь

Храните сгенерированные файлы script в папке, имя которой ссылается на текущую дату. Как только это было сделано несколько раз, WinDiff можно использовать для выделения изменений базы данных, сделанных между любыми двумя моментальными снимками. Выбирайте опции "Сгенерировать скрипты" тщательно и последовательно, чтобы сравнение на основе времени было более полезным.

Ответ 8

Этот запрос даст последнюю дату создания и изменения хранимых процедур:

select name,create_date,modify_date
from sys.procedures
order by modify_date desc