とまと あんらいぷ…

エンジニアの活動記録とかつぶやきとか

GitHub
スポンサードリンク

【SQL Server】ユーザー <user> はログインできませんでした。 理由: 明示的に指定されたデータベースを開けませんでした。

遅いだけじゃなかった


以前 【SQL Server】Expressが遅い理由【アタッチで設定が変わる】 なんて記事を書いたけど、
遅いだけじゃなかった。

どうやらSQL Serverが自動終了するタイミングによっては、ログオンできないというエラーが発生するようです。

自動終了オプション(AUTO_CLOSE)がONの時、SQL Server内部では以下のシーケンスで
DBのクローズ処理が行われます。

1.DBのアクセスが無くなる
2.自動終了オプションにより、DBのクローズ処理が発生
3.DBのクローズ完了

この、2のタイミングの時に再びデータベースへのログオンを試みると

エラー 18456 「ユーザー 'XXX' はログインできませんでした。 理由: 明示的に指定されたデータベースを開けませんでした。」

が発生します。

Microsoft SQL Server Japan Support Team Blogによると


AUTO_CLOSE オプションが有効になっているデータベースは、通常はクローズされた状態になっています。誰かがそのデータベースにアクセスしようとすると、その時点でデータベースはオープンされます。誰もアクセスしていない状態になると、データベースは自動的にクローズされますが、クローズ処理中はデータベースにはアクセスできません。そのため、あるユーザーがデータベースへのアクセスを終えてデータベースのクローズ処理が実行されている最中に、別のユーザーがそのデータベースを指定してログインしようとすると、その「別のユーザー」は、エラー 18456 「ユーザー 'XXX' はログインできませんでした。 理由: 明示的に指定されたデータベースを開けませんでした。」となり、ログインに失敗します。


とのこと・・・


しかもエラーログにはこのエラーメッセージそのままで表示されるため
理由を知らないとSQL実行ログをトレースして追跡調査を行うハメになります。

回避するには自動終了オプション(AUTO_CLOSE) オプションを OFFにすること。
▼この記事を読んだ方は、こんな記事も読んでいます。▼

スポンサードリンク

テーマ:プログラミング - ジャンル:コンピュータ

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://dalmore.blog7.fc2.com/tb.php/93-37c4ed4c
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad