4

データベース スナップショットを作成し、単体テストを実行するたびにデータベースを復元したいと考えています。スナップショットを作成できますが、復元中に以下のエラーが発生します。

メッセージ 5070、レベル 16、状態 2、行 1
データベースの状態は、他のユーザーがデータベース 'ImportData' を使用している間は変更できません

メッセージ 3013、レベル 16、状態 1、行 1
RESTORE DATABASE が異常終了しています。

データベースを作成してスナップショットに戻すための SQL クエリを以下に示します。

スナップショットを作成します。

CREATE DATABASE Data_SShot
ON (NAME=Data,
    FILENAME='C:\Snapshot\DataSnapshot.ss'),
   (NAME=Data_Data1,
    FILENAME='C:\Snapshot\Data1Snapshot.ss'),
   (NAME=Data_Index1,
    FILENAME='C:\Snapshot\DataIndexSnapshot.ss')
AS SNAPSHOT OF Data

スナップショットに復元

use master
go

RESTORE DATABASE Data 
FROM DATABASE_SNAPSHOT = 'Data_SShot'

それは次のように述べています

他のユーザーがデータベースを使用している間は、データベースの状態を変更できません

この問題を克服するにはどうすればよいですか?これを行うために .NET (C#) を使用しています。RESTORE DATABASE正常に実行するために接続を閉じる方法は?

スナップショットを作成し、後で DB を元に戻すこのプロセス全体を、テスト スイートの各テストで実行したいと考えています。

4

2 に答える 2

6

DB を復元する前に、いくつかの作業を行う必要があります。

  1. DB のアクティブ ユーザー数を取得し、セッションを終了します。
  2. DB をオフラインおよびオンラインにすると、非表示の接続がすべて終了します。
  3. ここで、DB を復元します。失敗した場合は、DB をオフラインにして復元を試みます。
  4. 復元が完了したら、DB をオンラインにします。

これらは、DB の復元に使用してきた手順であり、長い間機能しています。

于 2016-04-22T10:04:05.490 に答える