首页 > 解决方案 > 用其他数据库的副本替换数据库

问题描述

作为我们测试过程的一部分,我正在尝试自动化以下操作:

  1. 删除数据库 B.
  2. 创建 DatabaseA 的备份
  3. 从 DatabaseA 的备份重新创建 DatabaseB

我曾希望这样的事情能奏效RESTORE DATABASE DatabaseB FROM DISK = 'c:\temp\DatabaseA.bak' WITH REPLACE,但结果是要覆盖 DatabaseA 的现有 ldf 和 mdf 文件。

Azure 的 SQL Server 似乎具有此功能:CREATE DATABASE DatabaseB AS COPY OF DatabaseA,但我们的本地服务器不支持此功能。

有没有一种简单的(和干净的)方法来做到这一点?

标签: sqlsql-serverdatabase-administration

解决方案


根据@Larnu 的反馈和更多研究,我得出了以下结论:

USE Master

--Drop the existing testing database
IF DB_ID('DatabaseB') IS NOT NULL
BEGIN
    ALTER DATABASE DatabaseB 
    SET SINGLE_USER 
    WITH ROLLBACK IMMEDIATE

    DROP DATABASE [DatabaseB]
END


--create a backup of the database we want
BACKUP DATABASE DatabaseA TO DISK = 'c:\temp\DatabaseA.bak'
WITH CHECKSUM, COPY_ONLY, FORMAT, INIT, STATS = 10;

-- List the files (for dev purposes only, any file listed here needs a MOVE statement below, you may have user and memory files as well as db and logs)
--RESTORE FILELISTONLY FROM DISK = 'c:\temp\Database.bak'

-- restore the backup top
RESTORE
DATABASE [DatabaseB]  
FROM DISK = 'c:\temp\DatabaseA.bak'
WITH CHECKSUM,
MOVE 'DatabaseA' TO 'c:\temp\DatabaseB.mdf',
MOVE 'DatabaseA_log' TO 'c:\temp\DatabaseB.ldf',
RECOVERY, REPLACE, STATS = 10;

推荐阅读