web-dev-qa-db-ja.com

データベースインスタンス全体を再起動せずに、データベースインスタンスでデータベースを再起動する

データベースのいくつかのインスタンスを実行しているデータベースサーバーがあります。特定のデータベースへのアクセス中に問題が発生し、同じデータベースを再起動したいのですが、インスタンス内の他のデータベースまたは同じサーバー上の他のインスタンスに影響するため、dbサーバー全体を再起動しません。

コマンドラインまたはその他の手段を使用して単一のデータベースを再起動する方法はありますか?

データベースをサーバーから切り離して接続し直すのですか、それともオフラインにしてオンラインに戻すのは、そのデータベースを再起動するのと同じですか?

注:win2k3でホストされているMSSQL2005サーバーを追加するだけです。

3
Viky

個々のDBをオフラインにしてからオンラインに戻すことが、SQLサービスを再起動することと同等かどうかはわかりませんが(少なくともDBの観点からは、サービス用ではありません)、DBを次のように「リセット」します。既存のすべての接続を閉じ、開いているトランザクションをロールバックする範囲。それが目的の効果である場合は、それで十分であり、そのSQLインスタンスで実行されている他のデータベースには影響しません。

SSMSから、次のSQLを使用できます。

-- 'rollback immediate' will disconnect existing users w/out
-- waiting for transactions to finish.
ALTER DATABASE MyDatabase SET OFFLINE WITH ROLLBACK IMMEDIATE
go
ALTER DATABASE MyDatabase SET ONLINE
go
7
Matt

その特定のデータベースにアクセスするときに見られる問題は何ですか?データベースが破損している場合、データベースを再起動しても効果はありませんが、多くの場合試行されます。

破損している場合に備えて、問題の範囲を把握する必要があります:DBCC CHECKDB(yourdb)WITH NO_INFOMSGS、ALL_ERRORMSGS

次に、バックアップから復元するか、データを新しいデータベースに抽出するか、最後の手段としてデータベースの修復を実行します。何が間違っているかに応じて、これらのそれぞれに多くの賛否両論がありますが、実際に破損の問題がない限り、このトピックに詳細とリンクをあふれさせることはしません。また、破損している場合は、フォーラムに頼るのではなく、いつでも製品サポートに電話してリアルタイムで復旧することができます。

ありがとう

4
Paul Randal