sql-server – 将一个数据库复制到同一服务器上的另一个(现有)数据库

我有一个“实时”数据库和一个“开发”数据库,偶尔,我想用实时数据替换开发数据库的全部内容.理想情况下,不使实时数据库脱机.基于此处和其他论坛上的类似问题,我将这个TSQL脚本拼凑在一起:

USE MASTER;

BACKUP DATABASE LiveDB TO DISK = '[tempfile]' WITH COPY_ONLY

GO

ALTER DATABASE DevDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

GO

RESTORE DATABASE DevDB
FROM DISK = '[tempfile]' 
WITH
MOVE 'Live_db'   TO N'...\Dev.mdf',
MOVE N'Live_db_log' TO N'...\Dev_log.ldf',
REPLACE, RECOVERY, NOUNLOAD

GO

ALTER DATABASE DevDB SET MULTI_USER

脚本运行,我没有收到错误消息,但如果我之后查询开发数据库中的任何表,我会看到旧的,未更改的开发数据.

我收到一条成功消息(德语),转换为:

RESTORE DATABASE has successfully processed 49809 pages in 16.393 seconds (23.737 MB/s).”

恢复后,我立即执行:

SELECT * FROM [LiveDB].dbo.SomeTable; 
SELECT * FROM [DevDB].dbo.SomeTable

……我看到两个完全不同的结果.看起来DevDB根本没有改变.我看到在恢复操作之前看到的相同行.

实时数据没有变化;该特定表至少在过去两周内没有变化.

我究竟做错了什么?我以为WITH REPLACE会强制RESTORE覆盖开发数据库.

最佳答案
我怀疑此备份文件中可能存在多个备份.如果您运行:

RESTORE HEADERONLY from disk = [tempfile]

这将显示文件中的所有备份.您没有还原最新的备份,请使用FILE = X来还原相应的备份.

转载注明原文:sql-server – 将一个数据库复制到同一服务器上的另一个(现有)数据库 - 代码日志