FAQ: SQL Server 起動後、接続が可能となるタイミングは?
神谷 雅紀
Escalation Engineer
SQL Server の起動が開始し、サービスステータスが RUNNING になった時点でクライアント接続は可能です。
ただし、既定のデータベースが master 以外に設定されているログインについては、既定のデータベースの復旧が完了するまでは接続することはできません。既定のデータベースの復旧が完了する前の接続試行は、エラー 18456 「ユーザー 'XXX' はログインできませんでした。 理由: 明示的に指定されたデータベースを開けませんでした。」で失敗します。
エラーログファイルでは以下のタイミングです。(エラーログファイルについては [SQL Troubleshooting] 第1回 : Tips - SQL Server エラーログとイベント ログを採取する (SQL 2000 ~ 2008 R2))
起動開始。 2012-05-08 14:13:56.10 Server Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) 2012-05-08 14:13:56.10 Server (c) Microsoft Corporation. 2012-05-08 14:13:56.10 Server All rights reserved. 2012-05-08 14:13:56.10 Server Server process ID is 1234. ... master データベースの復旧。 2012-05-08 14:13:56.33 spid6s Starting up database 'master'. 2012-05-08 14:13:56.43 spid6s Recovery is writing a checkpoint in database 'master' (1). ... クライアント接続用待ち受け開始。 2012-05-08 14:13:57.42 Server Server is listening on [ 'any' <ipv6> 1433]. 2012-05-08 14:13:57.43 Server Server is listening on [ 'any' <ipv4> 1433]. 2012-05-08 14:13:57.43 Server Server local connection provider is ready to accept connection on [ \\.\pipe\SQLLocal\MSSQLSERVER ]. 2012-05-08 14:13:57.43 Server Server local connection provider is ready to accept connection on [ \\.\pipe\sql\query ]. 2012-05-08 14:13:57.44 Server Server is listening on [ ::1 <ipv6> 1434]. 2012-05-08 14:13:57.44 Server Server is listening on [ 127.0.0.1 <ipv4> 1434]. 2012-05-08 14:13:57.45 spid10s Clearing tempdb database. ... このメッセージが記録された時点でクライアント接続が可能。この時点でサービスステータスは START PENDING (開始中) から RUNNING (実行中) になる。 2012-05-08 14:13:57.59 Server SQL Server is now ready for client connections. ... ただし、まだ復旧が完了していないデータベースが既定のデータベースになっているログインは接続不可。 既定のデータベースの復旧が完了していない時点での接続試行は、エラー 18456「ユーザー 'XXX' はログインできませんでした。 理由: 明示的に指定されたデータベースを開けませんでした。」で失敗する。 2012-05-08 14:13:57.95 spid13s Starting up database 'msdb'. 2012-05-08 14:13:57.95 spid14s Starting up database 'testdb1'. 2012-05-08 14:13:57.96 spid15s Starting up database 'testdb2'. 2012-05-08 14:13:57.96 spid16s Starting up database 'testdb3'. 2012-05-08 14:13:57.97 spid17s Starting up database 'testdb4'. 2012-05-08 14:13:57.99 spid18s Starting up database 'testdb5'. 2012-05-08 14:13:58.76 spid10s Starting up database 'tempdb'. ... このメッセージが記録された時点で、 結果的に復旧に失敗したデータベースがあったとしても 、全データベースの復旧処理は完了。 復旧に成功してオンラインとなったデータベースが既定のデータベースになっているログインはすべて接続可能となる。 2012-05-08 14:14:05.78 spid6s Recovery is complete. |
以下は、全データベースの復旧処理が完了した直後 (Recovery is complete. がエラーログファイルに記録された直後) に実行されます。SQL Server へのアクセスを行うアプリケーションやサービスを全データベースの復旧処理が完了した後に起動したい場合は、以下の方法を用いて起動することで、確実に全データベースの復旧処理が完了した後に起動を行うことができます。
- SQL Server のスタートアップストアドプロシージャとして登録されているストアドプロシージャ (sp_procoption (Transact-SQL), ストアド プロシージャの実行 参照)
- SQL Server Agent サービスの起動時に実行されるようにスケジュールされている SQL Server Agent ジョブ (sp_add_schedule (Transact-SQL), ジョブのスケジュール設定 参照)
※ SQL Server 2008 CU7 以降、SQL Server 2008 SP1 CU3 以降では、既定では、SQL Server Agent サービスの起動時に実行されるようにスケジュールされているジョブは、すべてのデータベースではなく msdb の復旧が完了した時点で実行が開始されるように動作変更されています。
すべてのデータベースの復旧完了後にジョブが開始されるようにするためには、KB 2640027 に従って SQL Server 2008 SP2 CU8 以降または SP3 CU7 (2012 年 9 月リリース予定) 以降をインストールし、レジストリを設定する必要があります。
または、スタートアッププロシージャから sp_start_job を呼び出すことで、すべてのデータベース復旧完了後にジョブを実行することもできます。