2017-01-17 11 views
1

H2からSQL Serverに移行する機能テストがあります。いくつかのテストを実行する間に、私は(自動的に)データベースをバックアップし、データベースからすべてを削除し、SQLを使用してデータベースをすべて復元します。SQL Server - トランザクションをコミットする機能テストによるバックアップ/リストアまたはロールバック

復元するために、私はALTER DATABASE mydatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATEに電話する必要があるため、標準のBACKUP DATABASEコマンドとRESTORE DATABASEコマンドを使用してSQL Serverでバックアップ/リストアを実行することはできません。

セーブポイントを作成してからロールバックしたいのですが、ロールバックは機能しません。これは、APIのトランザクションがセーブポイントの作成とロールバックの間にコミットしているためです。機能テストコードで自動コミットをfalseに設定していますが、自動コミットエラーが発生していません。

1つのアイデアは、すべてのテーブルを削除して復元することによってSQLを使用して復元することです。私はそれについてどうやって行くのか分かりません。

アイデア?

+0

、右の[スクリプトを生成し、タスクに移動し、データベース名をクリックしてください。ウィザードは、現時点ではテーブルのすべての行とともにテーブルスキーマをスクリプト化する方法を説明します。スキルとデータをスクリプト化してテーブルを削除し、全体を再作成することもできます。 – dfundako

答えて

0

接続を強制終了せずにデータベースをバックアップできるはずです。 DBを別の名前に復元することもできます。これにより、テストを行い、接続を強制終了することはできません。

バックアップと自動リストアに関しては、すでに公開されています。 SQL Serverでの

Backup scripts

Automated restore

+1

Alas、no。 a)データベースコンテキストが前記データベースに設定されているアクティブな接続、またはb)前記データベースに対するアクティブなトランザクションが存在する場合、復元できないデータベースロックを取ろうとする。私は数え切れないほど多くの時間をかけてきました。あなたは上記の 'alter database ...'メソッドを削除するために明示的なアクションを取らなければなりません(私が採用したOPが '前に 'single_user'によって(具体的には、データベースに入って私をロックアウトする前に他のトランザクションが行われていました) –

+1

良い情報は、何かをダブルチェックして編集しました。バックアップを復元してから別のものを起動して、復元が完了した後にサーバーに新しい接続を確立します(復元前にOPからメソッドによってセッションが強制的に切断されるため) – Shaulinator

+0

バックアップ/リストアを使用してしまいました接続を再確立する。 – Anonymous1

関連する問題