回答:
以下を使用して、現在のイベントログサイクルにあるこれらのイベントをすべて検出できます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
)。
OFFLINE
。でoffline
、実際の状態ではsys.databases
?
データベースがオフラインに設定されている場合:
すなわち
alter database AdventureWorks2012
set offline;
go
実際、SQL Serverエラーログにログメッセージが表示されます。
データベース 'AdventureWorks2012'のデータベースオプションOFFLINEをONに設定します。
select *
from sys.messages
where language_id = 1033
and text like '%setting database option%for database%';
データベースオプションの変更を監視している場合、メッセージID 5084。