web-dev-qa-db-ja.com

同じサーバーで別の名前のデータベースを復元する

テスト目的で、同じサーバーにCarersというライブデータベースのコピーが必要です。テストデータベース名はCarers_Test

SSMSを使用して介護者のバックアップを取った。そして、GUIを使用してそれを復元しようとしました。手順を実行したときに変更したのは、データベースの名前だけでした。

しかし、復元は次のエラーで失敗します。

データベースが使用中のため、排他アクセスを取得できませんでした。

現在のライブデータベースで何もしたくないのですが、データベースが使用されているのはなぜですか?ローカルホストで同じバックアップを復元しようとしましたが、正常に復元されました。ライブデータベースと同じサーバーで復元しようとすると、このエラーが発生します。

誰か助けてください...私は狂っています!

3
Junior_dba

解決するのは非常に簡単です。このようにmoveオプションを使用する必要がある元のファイルを上書きしようとしています

restore database <Your-Database> from disk ='<backup-file-path>' 
with move 'mdf_file_name' to '<new-path>',
move 'log_file_name' to '<new-path>'

ちなみにバックアップからファイル名を見つけるには、このコマンドを使用します

restore filelistonly from disk ='<backup-file-path>' 
5
Krismorte

また、使用しているManagement Studioのバージョンにも依存すると思います。 2016+では、宛先データベースの名前を変更すると、SSMSがRestore Asファイルの名前を変更します(スクリーンショットを参照)。古いバージョンのSSMSでは、ファイルの名前を手動で変更する必要がありました。変更しないと、既存のファイルと競合します。

また、[既存のデータベースを上書きする]オプションと[復元前にログ末尾のバックアップを取る]オプションにも十分注意してください。これらの両方をオフにする必要があります!

最後に、私があなただったら、運用データベースの復元を試みる直前に、運用データベースのバックアップを取ります。

ここで、新しいデータベースの名前を変更しました: page 1

ここで、新しいファイルの名前はSSMSによって変更されます。これらを手動で変更する必要がある場合があります。いずれにせよ、SSMSが何をしようとしているのかを確認してください: page 2

ここでは、2つの重要なオプションがオフになっています: page 3

3
Conrad S.

エラーの原因はデータベースファイルにあることが示唆されています(現在のデータベースまたは既存のデータベースと同じファイルを使用してください)。それがnotエラーの理由です。それが原因である場合は、別のエラーメッセージが表示されたはずです。以下は、既存のTSQLデータベースと同じファイル名を使用して、TSQLという名前のデータベースをTSQLTestという名前に復元しようとする場合の例です。

ファイル「C:\ DemoDatabases\DbFiles\a\TSQL.mdf」は上書きできません。データベース「TSQL」で使用されています。

SSMSは、復元するデータベースの名前を入力するときに、データベースファイルの名前を変更するのに適しています。古いSSMSはこれをかなり愚かな方法で行った後、名前を変更しない1つのバージョンが登場し、次のバージョンでは、今日見られる「インテリジェントな」ファイルが変更されました。これらの変更がいつ行われたかについては、バージョン履歴を思い出しませんが、それは少し前のことです。

エラーの理由は、復元GUIがデフォルトでNORECOVERYオプションを使用してログ末尾のバックアップを実行しようとするためです。そのデータベースにユーザーがいる場合は失敗します。

2
Tibor Karaszi

そのようなものはどうですか? [Northwind]という名前のデータベースを[NORTHWND_new]という新しいデータベースに復元しています

データとログファイルの名前を変更していることに注意してください。

USE [master]

RESTORE DATABASE [NORTHWND_new]
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\Northwind.bak'
WITH FILE = 1, MOVE N'Northwind' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\NORTHWND_new.MDF', 
    MOVE N'Northwind_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\NORTHWND_new_log.ldf', NOUNLOAD, STATS = 5
GO
0
Nathan L

すべての回答をありがとうございました。TiborKarasziとConrad S.、特に問題はテールバックアップだったので、両方に感謝します。元々はチェックされており、エラーが原因でした。

私は今安心しています:)

0
Junior_dba