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

9

J'essaie de trouver un moyen de savoir quand deux de mes 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 une communication écrite en tant que telle ..

Pouvons-nous trouver une information à ce sujet?

veuillez suggérer, merci!

KASQLDBA
la source

Réponses:

11

Vous pouvez découvrir tous ces événements qui sont en cours du cycle du journal des événements à l' aide sp_readerrorlog:

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

Vous pouvez parcourir les valeurs de @p1si vous ne les 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 ne pouvais pas obtenir 0/ NULLagré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 cela sp_readerrorlogn'est pas documenté et n'est pas pris en charge, bien que de nombreuses personnes aient é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, bien que je serais prudent quant à l' ouverture du fichier en cours d'utilisation ( ERRORLOG).

Aaron Bertrand
la source
Bonjour Aaron, je n'ai pas de connexion hors connexion dans mes journaux SQL Server. Y a-t-il des paramètres pour nous permettre d'attraper cette modification? Merci,
DBALUKE HUANG
@DBALUKEHUANG Non, si cela s'est produit avant la première entrée dans le journal des erreurs et qu'il n'y a rien dans l'Observateur d'événements , vous n'avez pas de chance.
Aaron Bertrand
Oui Aaron, il n'y a rien de lié au hors ligne dans les journaux SQL Server. Pour les en ligne, il a les journaux ... Je me demande simplement s'il y a des paramètres spéciaux pour laisser SQL Server attraper cela?
DBALUKE HUANG
@DBALUKEHUANG N'oubliez pas qu'une base de données peut être mise hors ligne pour des raisons autres que quelqu'un qui la définit explicitement OFFLINE. Le offlinestatut est-il en fait sys.databases?
Aaron Bertrand
4

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.

Thomas Stringer
la source