2016-09-19 3 views
12

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

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

+0

SQL Source Control? – ManOnAMission

+0

@ManOnAMission как? – user6594294

+1

Это было бы лучше опубликовано на dba.stackexchange.com –

ответ

3

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

+0

Как я узнаю, что MSSQL Audit включен или нет? или это даст мне все записи, не включив его. – user6594294

+0

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

+0

создал новый аудит под защитой в проводнике объектов, а затем включил его. затем я создал демо-базу данных, таблицу внутри нее. щелкните правой кнопкой мыши по вновь созданному аудиту, просмотрите журналы ... но не было ничего, просто показывая одну запись. AUDIT SESSION CHANGED – user6594294

7

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

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

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

select * from sys.dm_server_audit_status 

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

2.Default trace также фиксирует созданные таблицы, но для этого используется механизм roll over files для переопределения последних файлов, когда пространство заполнено, поэтому вы можете (из-за того, что вы просите трехмесячный диапазон), но попробуйте следующее: What event information can I get by default from SQL Server?, чтобы узнать все, что предлагается по умолчанию.

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

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

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

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

+0

Никто из них не полезен для моего дела – user6594294

6

Возможно, это вы можете получить на полпути. 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 проекта данных для управления изменениями.

1

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

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 
0

Возьмите снимки определений метаданных с помощью "Generate Scripts ..." вариант задачи из среды SQL Server Management Studio.

enter image description here

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

1

Вы можете запустить отчет из меню правой кнопки мыши на БДЕ:

enter image description here

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

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

1

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

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

Смежные вопросы