web-dev-qa-db-ja.com

別のデータベースからのバックアップ/復元により、復元に失敗した排他的アクセスを取得できませんでした

データベースAがあります。A.bakと呼ばれるデータベースAのバックアップを取りました。新しいデータベースBを作成しました。今、右クリックしてA.bakからBを復元します。復元ダイアログで、既存のデータベースを上書きし、LogicalFileNameをC:\Program Files\Microsoft SQL Server\MSSQL11.SQLSERVER2012\MSSQL\DATA\A.mdfからC:\Program Files\Microsoft SQL Server\MSSQL11.SQLSERVER2012\MSSQL\DATA\B.mdfそして、ldfファイルでも同じことをしました。しかし、私は得ています

Exclusive access could not be obtained because the database is in use

また、試してみました、

ALTER DATABASE [B] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

また、sp_who2、[B]の既存の接続はありませんでした

24
user960567

排他的アクセスを取得しようとする原因は、SQL Server 2012 Management Studioの復元ダイアログのオプションページにあります。末尾ログをオンにして、SOURCEデータベースの状態オプションを復元します。そのため、このアクションを実行するために、ソースデータベース(この場合はA)への排他的アクセスを試みます。ログの末尾オプションをオフにすると、操作がよりスムーズに機能することがわかります。

69

答えは非常に簡単でしたが、

このコマンドを実行してLogicalNamesを取得し、

RESTORE FILELISTONLY FROM DISK = 'C:\Users\MyUSer\Desktop\A.bak'

次に、以下にLogicalNameを入れるだけで、

RESTORE DATABASE B
   FROM DISK = 'C:\Users\MyUSer\Desktop\A.bak'
   WITH 
   MOVE 'LogicalName' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLSERVER2012\MSSQL\Data\B.mdf', 
   MOVE 'LogicalName_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLSERVER2012\MSSQL\Data\B.ldf'
GO

パスの変更が必要になる場合があることに注意してください。便利なリンク、

SQLサーバーの別のデータベースに復元する方法

http://technet.Microsoft.com/en-us/library/ms186390.aspx

5
user960567

B. [データベースの復元]ダイアログが[全般]ページに表示されます1.復元するデータベースの名前が[データベースへ]リストボックスに表示されます。新しいデータベースを作成するには、リストボックスにその名前を入力します。

  1. 「デバイスから」を選択します

  2. ボタンをクリックして、「バックアップの指定」ダイアログを表示します

  3. [追加]をクリックしてディレクトリから.bakファイルを参照し、[OK]をクリックします

1
Saim Boy