0

以下を使用して復元をスクリプト化したい ELMAH データベースがあります。

RESTORE DATABASE [Elmah] 
FROM DISK = N'E:\Elmah_backup_2012_11_02_030003_1700702.bak' 
WITH FILE = 1,  
MOVE N'Elmah' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Elmah.mdf',  
MOVE N'Elmah_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Elmah.ldf',  
NOUNLOAD, STATS = 10
GO

WITH REPLACEこのステートメントを実行するたびに含めているわけではありませんが、既存のデータベースを復元します。

この操作の前に常にすべてのデータベースを削除し、このコードが誤って本番環境のデータベースにデータベースを復元することは決してありません。

このコードを変更して、既存のデータベースを上書きしないようにするにはどうすればよいですか?

私は実際に SMO オブジェクトを介してこれを行っていますが、原理と結果は同じであるため、適切な SMO.Restore で設定する必要があるものにその情報を一般化できることを期待して、これを必要な TSQL に単純化したままにしておきたいと考えています。物体。

4

1 に答える 1

1

(a) 復元されたデータベースに新しい論理名を付け、(b) 新しい物理ファイル名を定義して、既存の名前が上書きされないようにする必要があります。次のようなことを試してください:

RESTORE DATABASE [Elmah_Restored]       <== new (and unique) logical database name
FROM DISK = N'E:\Elmah_backup_2012_11_02_030003_1700702.bak' 
WITH FILE = 1,  
MOVE N'Elmah' TO 
     N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Elmah_restored.mdf',   <== new (and unique) physical file name
MOVE N'Elmah_log' TO 
     N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Elmah_restored_log.ldf',   <== new (and unique) physical file name
NOUNLOAD, STATS = 10
GO
于 2012-11-02T17:57:06.460 に答える