web-dev-qa-db-ja.com

データベース「XXX」は移行中です。後でステートメントを試してください

sQL Serverデータベースに接続しようとすると、このエラーが発生します

Database 'XXX' is in transition. Try the statement later.

今日の初めに長いクエリをキャンセルしましたが、何らかの理由でデータベースを元に戻すことができません。何か私にできることはありますか?

27
Rod Johnson

これは、DBをオフラインにするか、他の特定の操作を実行しようとして失敗した場合に発生することがあります。操作を試行したSSMSインスタンスを閉じてから再度開くと、ロックがクリアされることがあります。サーバーに接続されているすべてのSSMSインスタンスを閉じて再度開きます。

また、長いクエリの実行中にDBをオフラインにしようとした場合にも発生する可能性があります。アクティビティモニターを確認し、必要に応じて安全であれば、長時間実行されているクエリを強制終了してみてください。

上記のいずれも機能しない場合は、すべてのSSMSインスタンスを閉じてから、SQL Server構成マネージャーを使用してSQLを再起動します。通常、これで問題は解決しますが、DBは最初は回復モードになっている可能性があります。

40
phoebus

不思議なことに、私はSSMSを閉じて再度開くだけでこの問題を修正しました。

11
Josh

SSMSを閉じることも私にとってはうまくいきましたが、問題によっては、これを試すことができます:

ALTER DATABASE [Name] SET SINGLE_USER WITH ROLLBACK IMMEDIATE

ALTER DATABASE [Name] SET MULTI_USER

このアイデアは、この質問(および個人的な経験)に基づいています: https://stackoverflow.com/questions/4230290/sql-server-2008-how-do-i-disconnect-everyone-from-my-db

3
Watki02

SQL Server Management Studioには、データベースをオンライン/オフラインにするためのオプションがあります。ただし、管理者権限が必要です。

これにアクセスするには、データベースを右クリックします->タスク->オンラインにする。

1
rchacko

既に回答済みですが、追加するだけです。オフラインにしようとして失敗した場合は、データベースの状態を変更しようとしているSPIDを強制終了できます。

Sp_whoまたはsp_who2を実行し、データベースをオフラインにしようとしているDBで回転しているSPIDを見つけます。そのSPIDを強制終了すると、移行状態にないオンラインまたはオフラインのDBが残ります。

0
Jun Sato