Wann wurde eine Datenbank offline geschaltet?

9

Ich versuche herauszufinden, wann einige meiner SQL-Datenbanken offline geschaltet wurden.

Ich habe die Protokolle überprüft, konnte aber keine solchen Informationen finden und außerdem ist keine Standardablaufverfolgung aktiviert.

Ich habe nur eine Information, dass es früher einen DBA gab, der das offline geschaltet hat, aber keine E-Mails oder eine schriftliche Mitteilung als solche.

Können wir dazu eine Info finden?

bitte vorschlagen, danke!

KASQLDBA
quelle

Antworten:

11

Sie können alle diese Ereignisse im aktuellen Ereignisprotokollzyklus ermitteln, indem Sie Folgendes verwenden sp_readerrorlog:

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

Sie können die Werte von durchlaufen, @p1wenn Sie sie nicht im aktuellen Ereignisprotokoll finden. Standardmäßig sollten Sie in der Lage sein , die aktuellen und vorherige 6 Fehlerprotokolldateien zu lesen, verwenden Sie so 0-6 als Argumente sich wieder so weit wie möglich gehen (auf meinem System konnte ich nicht bekommen 0/ NULLüber alle Log - Dateien zu aggregieren; YMMV ).

Wird so etwas zurückgeben:

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

Es besteht natürlich die Möglichkeit, dass das Fehlerprotokoll so gut gefüllt wird, dass die Ereignisse vor dem aktuellen Satz von Fehlerprotokollen aufgetreten sind. In diesem Fall haben Sie kein Glück. Um in Zukunft einen längeren Verlauf zu gewährleisten, können Sie die Anzahl der gespeicherten Fehlerprotokolle ändern. Erweitern Sie im Objekt-Explorer die Option Verwaltung, klicken Sie mit der rechten Maustaste auf SQL Server-Protokolle und wählen Sie Konfigurieren. Dort können Sie die Einstellungen für das Recycling von Fehlerprotokolldateien ändern, einschließlich der Beibehaltung der vorherigen 99 Dateien. Siehe auch diese Antwort .

Beachten Sie, dass dies nicht sp_readerrorlogdokumentiert und nicht unterstützt wird, obwohl viele Leute darüber geschrieben haben . Am Ende sind die Fehlerprotokolldateien nur reine Textdateien, sodass Sie Ihre eigene PowerShell, CLR usw. schreiben können, die nur die Dateien analysiert und dieselben Informationen zurückgibt. Sie können bestimmen, wo sich die Fehlerprotokolldateien für diese Instanz befinden, indem Sie:

SELECT SERVERPROPERTY('ErrorLogFileName');

Die Dateien werden benannt werden ERRORLOG, ERRORLOG.1, ERRORLOG.2usw. Sie können die Dateien in einem einfachen Texteditor gehen und öffnen Sie die Struktur , um zu sehen, ob ich die aktuelle Datei in Gebrauch zu öffnen (vorsichtig sein würde ERRORLOG).

Aaron Bertrand
quelle
Hallo Aaron, ich habe keine Offline-Protokollierung in meinen SQL Server-Protokollen erhalten. Gibt es irgendwelche Einstellungen, mit denen wir diese Änderung erfassen können? Danke,
DBALUKE HUANG
@DBALUKEHUANG Nein, wenn es vor dem frühesten Eintrag im Fehlerprotokoll passiert ist und die Ereignisanzeige nichts enthält , haben Sie kein Glück.
Aaron Bertrand
Ja Aaron, in den SQL Server-Protokollen gibt es nichts, was mit Offline zu tun hat. Für das Online hat es die Protokolle ... Ich frage mich nur, ob es spezielle Einstellungen gibt, damit SQL Server dies abfängt?
DBALUKE HUANG
@DBALUKEHUANG Denken Sie daran, dass eine Datenbank aus anderen Gründen als einer expliziten Einstellung offline gehen kann OFFLINE. Ist offlineeigentlich der Status in sys.databases?
Aaron Bertrand
4

Wenn die Datenbank offline eingestellt wurde:

dh

alter database AdventureWorks2012
set offline;
go

Im SQL Server-Fehlerprotokoll wird tatsächlich eine protokollierte Nachricht angezeigt:

Setzen Sie die Datenbankoption OFFLINE für die Datenbank 'AdventureWorks2012' auf ON.

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

Nachrichten-ID 5084, wenn Sie Änderungen der Datenbankoptionen überwachen.

Thomas Stringer
quelle