Sql 用其他数据库的副本替换数据库

Sql 用其他数据库的副本替换数据库,sql,sql-server,database-administration,Sql,Sql Server,Database Administration,作为测试过程的一部分,我正在尝试自动化以下内容: 删除数据库b 创建数据库的备份a 从数据库A的备份中重新创建数据库B 我曾希望类似的操作能够从磁盘恢复数据库DatabaseB='c:\temp\DatabaseA.bak',并替换为,但结果是要覆盖数据库a的现有ldf和mdf文件 Azure的SQL Server似乎具有以下功能:将数据库B创建为数据库A的副本,但这在我们的on-prem服务器上不受支持 有没有一种简单(干净)的方法可以做到这一点?根据@Larnu和更多研究的反馈,我的结论如下

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

  • 删除数据库b
  • 创建数据库的备份a
  • 从数据库A的备份中重新创建数据库B
  • 我曾希望类似的操作能够从磁盘恢复数据库DatabaseB='c:\temp\DatabaseA.bak',并替换为,但结果是要覆盖数据库a的现有ldf和mdf文件

    Azure的SQL Server似乎具有以下功能:
    将数据库B创建为数据库A的副本
    ,但这在我们的on-prem服务器上不受支持


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

    根据@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'
    
    -- resotre 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;
    

    在恢复过程中,您需要为数据和日志文件包含一个
    MOVE
    子句,否则它们会默认原来的路径;这就是
    数据库a
    的文件所在的位置。这似乎是一个问题。