sql - 用其他数据库的副本替换数据库
问题描述
作为我们测试过程的一部分,我正在尝试自动化以下操作:
- 删除数据库 B.
- 创建 DatabaseA 的备份
- 从 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
,但我们的本地服务器不支持此功能。
有没有一种简单的(和干净的)方法来做到这一点?
解决方案
根据@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;
推荐阅读
- git - Git LFS 不会推送 LFS 文件,除非我用 object-id 指定它们
- powerbi - 如何在 Power BI 或 Power 查询中操作数据行
- python-3.x - 在目录中查找文件夹(Python 3)
- bash - Bash multiple ors 不适用于否定词
- google-cloud-platform - GKE / Cloud IAM 工作负载身份设置错误 403
- swiftui - SwiftUI:步进绑定在子视图中不起作用
- reactjs - React:在函数内部访问 this.state 会引发错误
- python - 如何编写创建随机用户名和密码 selenium python
- gobblin - 安装地精时构建失败
- java - 如何在结果集响应上使用 Group by