データベースを復元する前に、データベースをシングルユーザーモードにする必要がありますか?その場合、SQLサーバーをシングルユーザーモードにするか、復元する前にデータベースをシングルユーザーモードのみにする方が望ましいです。ありがとうございました。
master
データベースを復元する場合にのみ、SQL Serverインスタンスをシングルユーザーモードにする必要があります。 user
データベースの場合、復元するデータベースへのアクティブな接続がないことを確認する必要があります。アクティブなSPID(データベースがシングルユーザーモードである必要はない)を特定して強制終了するか、次のいずれかを使用してデータベースをシングルユーザーモードにする必要があります(Greg Robidouxによる投稿を参照 SQL Serverデータベースを復元するための排他的アクセスを取得しています :
ALTER DATABASE [Test4] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
OR
ALTER DATABASE [Test4] SET SINGLE_USER WITH ROLLBACK AFTER 30
OR
ALTER DATABASE [Test4] SET SINGLE_USER WITH NO_WAIT
データベースをシングルユーザーモードにすると、データベースへの排他的アクセスが可能になり、問題なく復元できます。
注:ROLLBACKオプションを使用すると、データベースにまだ存在する開いているトランザクションがロールバックされます。ロールバックプロセスは問題なく機能するはずですが、トランザクションの実行時間が非常に長い場合、ロールバックプロセスに時間がかかる可能性があるため、システムで何が実行されているかに注意してください。テストおよび開発システムでは、復元を実行しているのでトランザクションは関係ありません。したがって、ロールバックは問題になりませんが、長時間実行されているトランザクションのロールバックには時間がかかる場合があることに注意する必要があります。
このデータベースに接続している場合、データベースを復元できません。エラーが発生します。
データベース 'my_db_name'はこのセッションで使用されているため、RESTOREはデータベースを処理できません
つまり、別のデータベースに接続されているデータベースを復元する必要があります(推奨)master
。
しかし、データベースをmaster
からsingle_user
に(復元前に)配置すると、データベースをsingle_user
に配置してから復元するまでの間に、誰かがそのデータベースに接続する可能性があります。
この状況を回避するには、single_user
ではなく、データベースをoffline
に配置します。
alter database ... set offline with rollback immediate;
restore database ...;