web-dev-qa-db-fra.com

Quand une base de données a-t-elle été mise hors ligne

J'essaie de trouver un moyen de savoir quand mes deux bases de données SQL ont été mises hors ligne.

J'ai vérifié les journaux mais je n'ai pas pu trouver de telles informations et de plus, aucune trace par défaut n'est activée.

J'ai juste une information que plus tôt il y avait un DBA qui l'a mis hors ligne, mais pas d'e-mails ou d'une communication écrite en tant que telle ..

Pouvons-nous trouver une information à ce sujet?

veuillez suggérer, merci!

9
KASQLDBA

Vous pouvez découvrir tous ces événements qui se trouvent dans le cycle actuel du journal des événements à l'aide de sp_readerrorlog:

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

Vous pouvez parcourir les valeurs de @p1 si vous ne le trouvez pas dans le journal des événements en cours. Par défaut, vous devriez pouvoir lire les 6 fichiers journaux d'erreurs actuels et antérieurs, utilisez donc 0-6 comme arguments pour remonter le plus loin possible (sur mon système, je n'ai pas pu obtenir 0/NULL pour agréger tous les fichiers journaux; YMMV).

Renvoie quelque chose comme ceci:

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

Il y a une chance, bien sûr, que le journal des erreurs soit suffisamment rempli pour que le ou les événements se soient produits avant l'ensemble actuel des journaux d'erreurs. Dans ce cas, vous n'avez pas de chance. Pour conserver un historique d'exécution plus long à l'avenir, vous pouvez modifier le nombre de journaux d'erreurs conservés. Dans l'Explorateur d'objets, développez Gestion, cliquez avec le bouton droit sur Journaux SQL Server et choisissez Configurer. Vous pouvez y modifier les paramètres de recyclage des fichiers journaux d'erreurs, notamment en conservant les 99 fichiers précédents. Voir également cette réponse .

Notez que sp_readerrorlog n'est pas documenté et n'est pas pris en charge, cependant beaucoup de gens ont écrit à ce sujet . En fin de compte, les fichiers journaux d'erreurs ne sont que des fichiers texte, vous pouvez donc écrire votre propre PowerShell, CLR, etc. qui analyse simplement les fichiers et renvoie les mêmes informations. Vous pouvez déterminer où se trouvent les fichiers journaux d'erreurs pour cette instance à l'aide de:

SELECT SERVERPROPERTY('ErrorLogFileName');

Les fichiers seront nommés ERRORLOG, ERRORLOG.1, ERRORLOG.2, etc. Vous pouvez aller ouvrir les fichiers dans un éditeur de texte de base pour voir la structure, mais je serais prudent quant à l'ouverture du fichier en cours d'utilisation (ERRORLOG).

11
Aaron Bertrand

Si la base de données a été mise hors ligne:

c'est à dire.

alter database AdventureWorks2012
set offline;
go

Vous verriez en effet un message enregistré dans le journal des erreurs SQL Server:

Définition de l'option de base de données OFFLINE sur ON pour la base de données 'AdventureWorks2012'.

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

ID de message de 5084 si vous surveillez les modifications des options de base de données.

4
Thomas Stringer