代码之家  ›  专栏  ›  技术社区  ›  NonProgrammer

从多个.bak文件还原数据库SQL Server 2012[已关闭]

  •  -1
  • NonProgrammer  · 技术社区  · 7 年前

    第三方正在向我们发送分割备份,我们每天都需要将其还原到单个数据库中。有没有一种低维护的自动化方法?

    首选项是写入T-SQL或SQL Server作业:

    • 冒险工作07182018.back0
    • 冒险工作07182018.back1
    • 冒险工作07182018.back2
    • 冒险工作07182018.back3
    1 回复  |  直到 7 年前
        1
  •  1
  •   S3S    7 年前

    注释太长,但通常在SQL代理作业中完成。

    分割备份意味着(至少)4件事情中的1件,如果您还不知道,您需要从供应商那里得到澄清。我排除了部分备份:

    1. 供应商将在一天内发送上面列出的所有备份,这意味着它是一个基本备份和3个差异备份或日志备份(可能)
    2. 供应商只发送差异备份,因为他们最初向您发送了基本备份(不太可能)
    3. 供应商在不同的日期备份文件组或文件(可能是VLDB),并在它们发生时发送给您(不太可能的情况)
    4. 供应商每天都会向您发送完整备份,其中最后一个备份是最新的(最有可能)

    不包括文件和文件组还原,您将:

    1. 还原完整备份
    2. 恢复 最后的 差异备份(如果适用)
    3. 还原在 最后的 差异备份,或者自上次完全备份之后,如果没有发生差异

    您还可以在步骤2中选择任何差异,然后如果存在该差异,则返回所有日志备份。当然,如果他们是 只有 向您发送完整备份,然后您只需要恢复完整备份。

    沿着这条线它将根据您的环境而变化(AlwaysOn、设置为只读、设置为待机等)

    ALTER DATABASE AdventureWorks SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    
    RESTORE DATABASE [AdventureWorks] FROM  DISK ='\\UNC\AdventureWorks.back0'
    WITH
    --what ever options... but likely a file move
    MOVE 'data_file_1' TO 'E:\somefolder\data.mdf',
    MOVE 'db_log' TO 'E:\somefolder\log.ldf',
    REPLACE, --overwrites the database
    RECOVERY --sets the DB to READ/WRITE. Use NORECOVERY if you need to restore logs / differentials
    GO
    
    --if using logs...
    RESTORE LOG AdventureWorks
       FROM '\\UNC\AdventureWorks.back01' --assuming this is a log
       WITH FILE = 1,  --this is the first log
       WITH NORECOVERY;  --keep in norecovery to restore other logs...
    GO  
    

    等。。。