質問

SQL Server 2005 を実行しているデータベース A があります。A のバックアップからデータベース B に復元しようとしています。データベース A を保持し、以前のデータ セットから新しいテスト データベース B を作成したいと考えています。

B を作成し、.bak から復元し、Management Studio からデータベースを B に復元しようとしました。

エラーは...

タイトル:Microsoft SQL Serverの管理

スタジオ

サーバー「195448-APP2」の復元が失敗しました。(Microsoft.SqlServer.Smo)

ヘルプが必要な場合は、次をクリックしてください。 http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.1399.00&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Restore+Server&LinkId=20476

- - - - - - - - - - - - - - - 追加情報:

System.Data.SqlClient.SqlError:バックアップセットには、既存の「B」データベース以外のデータベースのバックアップが保持されます。(Microsoft.SqlServer.Smo)

ヘルプが必要な場合は、次をクリックしてください。 http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.1399.00&LinkId=20476

------------------------------ ボタン:

わかりました

このスニペットを見つけましたが、使用するのをためらっています。データベースの復元プロセス中に mdf と ldf の場所を変更するという問題が解決されるのか、それともデータベース A の項目を完全に置き換えるのかを尋ねたいと思います。

ALTER DATABASE AdventureWorks
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE
RESTORE DATABASE AdventureWorks
FROM DISK = 'C\:BackupAdventureworks.bak'
WITH MOVE 'AdventureWorks_Data' TO 'C:\Data\datafile.mdf',
MOVE 'AdventureWorks_Log' TO 'C:\Data\logfile.ldf',
REPLACE

[http://blog.sqlauthority.com/2007/04/30/sql-server-fix-error-msg-3159-level-16-state-1-line-1-msg-3013-level-16-state- 1-line-1/][1]

そして私ならそれを成し遂げるだろう...

RESTORE DATABASE B
FROM DISK = 'C:\backupofA.bak'
WITH    
MOVE 'B' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\B.mdf',
MOVE 'B_log' to 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\B_log.ldf',
REPLACE

私が知らないのは、それがデータベース A に影響を与えるかどうかです。置換が B に関連付けられたファイルを参照することを願っています。

あるいはそうあるべきかどうか

RESTORE DATABASE B
FROM DISK = 'C:\backupofA.bak'
WITH    
MOVE 'A' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\B.mdf',
MOVE 'A_log' to 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\B_log.ldf',
REPLACE

私が使っているデータベースではないので、誰かがエラーを手伝ってくれたり、この修正を確認してくれたら、とても感謝します。

ありがとう。

役に立ちましたか?

解決

単純に使用できます データベースコピーウィザード。プロのようにやりたい場合は、T-SQL を使用して RESTORE を実行します。動く ...REPLACE は期待通りの動作をします。2 つのファイルを目的の場所に移動し、データベース B をバックアップのコンテンツで置き換えます。A は影響を受けません。

他のヒント

私があなただったら、ウィザードを使用するでしょう:SQL Server Management Studio で、[データベース] を右クリックし、[データベースの復元...] を選択します。このダイアログ/ウィザードは、あなたが求めていることを正確に実行します。復元元のソース .bak ファイル/データベースを選択し、復元先のデータベースの名前を入力して、[OK] をクリックするだけです。

いくつかの注意事項 - まだ存在しないデータベースの名前を入力すると (これがやりたいことのように思えます)、そのデータベースが自動的に作成されます。既存のデータベースの名前を入力すると、そのデータベースへの復元が試行されます。別のデータベースで作成されたバックアップから既存のデータベースに復元しようとすると失敗しますが、[オプション] に移動して [既存のデータベースを上書きする] チェックボックスをオンにすることで、SQL Server に既存のデータベースを強制的に上書きさせることができます。

また、既存のデータベースのバックアップを復元して、そのデータベースの新しい 2 番目のコピーを作成する場合、ソースで現在使用されているものと同じデータベース ファイル パスを使用してデータベースを作成しようとするため、ウィザードが失敗することがあります。データベース。これを修正するには、[オプション] をクリックし、すべての [名前を付けて復元] ファイル パスをまだ存在しないファイルに変更する必要があります。

実際に復元を実行する代わりに、このウィザードで SQL スクリプトを生成することもできます (上部の「スクリプト」ボタンをクリック)。これは、代わりに生の SQL でこの種の処理を行う方法を学びたい場合に便利です。

SQL Server 7、SQL Server 2000、SQL Server 2005 のデータベースを復元できます。これは、restore と replace コマンドを使用して実現できます。

use master 

restore database mydatabase from disk ='c:\mybackup.bak' with replace 

外部ツールを使用せずに、このスクリプトを使用して SQL サーバーのバックアップを簡単に取得できます。

チェックアウト 例を使用して復元する.

まずデータベース b を削除します。その後、復元を実行します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top