Когда база данных была отключена

9

Я пытаюсь найти способ выяснить, когда пара моих баз данных sql были отключены.

Я проверил журналы, но не смог найти такую ​​информацию, и, кроме того, трассировка по умолчанию не включена.

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

Можем ли мы найти информацию об этом?

пожалуйста, предложите, спасибо!

KASQLDBA
источник

Ответы:

11

Вы можете обнаружить все эти события в текущем цикле регистрации событий, используя sp_readerrorlog:

EXEC sys.sp_readerrorlog @p1 = 0, @p2 = 1, @p3 = N'OFFLINE';

Вы можете переключаться между значениями, @p1если вы не нашли его в текущем журнале событий. По умолчанию вы должны иметь возможность читать текущие и предыдущие 6 файлов журнала ошибок, поэтому используйте 0-6 в качестве аргументов, чтобы вернуться туда как можно дальше (в моей системе я не мог получить 0/ NULLагрегировать по всем файлам журнала; YMMV ).

Вернет что-то вроде этого:

LogDate        ProcessInfo Text
-------------  ----------- ---------------------------------------------------------
yyyy-mm-dd...  spid72      Setting database option OFFLINE to ON for database 'foo'.

Конечно, есть вероятность, что журнал ошибок заполняется достаточно, чтобы события происходили до текущего набора журналов ошибок. В этом случае вам не повезло. Чтобы сохранить более длительную историю в будущем, вы можете изменить количество сохраняемых журналов ошибок. В обозревателе объектов разверните Управление, щелкните правой кнопкой мыши Журналы SQL Server и выберите Настроить. Там вы можете изменить настройки утилизации файла журнала ошибок, включая сохранение до предыдущих 99 файлов. Также посмотрите этот ответ .

Обратите внимание, что sp_readerrorlogэто недокументировано и не поддерживается, хотя многие люди писали об этом . В конце концов, файлы журнала ошибок - это просто текстовые файлы, так что вы можете написать свой собственный PowerShell, CLR и т. Д., Который просто анализирует файлы и возвращает ту же информацию. Вы можете определить, где находятся файлы журнала ошибок для этого экземпляра, используя:

SELECT SERVERPROPERTY('ErrorLogFileName');

Файлы будут названы ERRORLOG, ERRORLOG.1, ERRORLOG.2и т.д. Вы можете пойти и открыть файлы в базовом текстовом редакторе , чтобы увидеть структуру, хотя я бы быть осторожным об открытии текущего файла в использовании ( ERRORLOG).

Аарон Бертран
источник
Привет, Аарон, я не вошел в автономный режим в журналах SQL Server. Есть ли какие-либо настройки, чтобы мы могли поймать этого изменения? Спасибо,
DBALUKE HUANG
@DBALUKEHUANG Нет, если это произошло до самой ранней записи в журнале ошибок, и в средстве просмотра событий ничего нет , вам не повезло.
Аарон Бертран
Да, Аарон, в журналах SQL Server нет ничего, связанного с оффлайн. Для онлайн он имеет журналы ... Мне просто интересно, есть ли какие-то специальные настройки, позволяющие SQL Server ловить это?
DBALUKE HUANG
@DBALUKEHUANG Просто помните, что база данных может быть отключена по причинам, отличным от того, кто явно ее установил OFFLINE. На offlineсамом деле статус в sys.databases?
Аарон Бертран
4

Если база данных была отключена:

т.е.

alter database AdventureWorks2012
set offline;
go

Вы действительно увидите зарегистрированное сообщение в журнале ошибок SQL Server:

Для параметра базы данных OFFLINE установлено значение ON для базы данных AdventureWorks2012.

select *
from sys.messages
where language_id = 1033
and text like '%setting database option%for database%';

Идентификатор сообщения 5084, если вы отслеживаете изменения базы данных.

Томас Стрингер
источник