web-dev-qa-db-ja.com

SQL Server:上書きによる単純なデータベース復元

私がやろうとしていることは、本番データベースの1つをバックアップし、それらを開発データベースとして復元することです(そこにあったものを上書きします)。

それが私がバックアップする方法です:

backup database [authfx] to disk = N'f:\db_backups\authfx\authfx-latest.bak' 
  with
    noformat, 
    init, 
    name = N'authfx Latest Full Database Backup', 
    skip, 
    norewind, 
    nounload, 
    stats = 1;

今私が復元しようとするとotherを使用してデータベース

restore database [dev-authfx] from disk = N'f:\db_backups\authfx\authfx-latest.bak' 
  with 
    file = 1, 
    nounload, 
    replace, 
    stats = 1;

それはいたるところに鳴きます:

Msg 1834, Level 16, State 1, Line 10
The file 'E:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\authfx.mdf' cannot be overwritten.  It is being used by database 'authfx'.
Msg 3156, Level 16, State 4, Line 10
File 'authfx' cannot be restored to 'E:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\authfx.mdf'. Use WITH MOVE to identify a valid location for the file.
Msg 1834, Level 16, State 1, Line 10
The file 'F:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\authfx_log.ldf' cannot be overwritten.  It is being used by database 'authfx'.
Msg 3156, Level 16, State 4, Line 10
File 'authfx_log' cannot be restored to 'F:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\authfx_log.ldf'. Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 10
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 10
RESTORE DATABASE is terminating abnormally.

with moveを追加してdevデータベースの元のデータとログファイルの場所を指定する必要があることを理解していますが、これを省略して次のように言うだけの方法はありますか。復元thisthis他のバックアップからのデータベース。他には何も触れないで、以前ここにあったものを上書きしないでください。

4
Anton Gogolev

残念ながら違います。 SQL Serverは、明示的に指定しない限り(この場合はMOVEを使用して)、バックアップファイルに記録されている正確にへの復元を常に試みます。

REPLACEオプションは、復元するデータベースが所有するファイルを置き換える場合にのみ機能します(これは理にかなっています。DB_Aを復元することにより、DB_Aを強制終了することはできますが、SQLは実際には機能しません。 DB_Bを強制終了することについてもどう思いますか)。

これが定期的に行うことである場合は、すべてを記述した小さなsqlスクリプトを記述し、それを保存して、復元を行うたびにそれを使用します。これは、製品からのdev/UAT/Trainingの夜間復元を行う方法です。

10
Stuart Moore