从多个 .bak 文件还原数据库 SQL Server 2012
Restore a database from multiple .bak files SQL Server 2012
第三方正在向我们发送我们需要每天恢复到单个数据库中的拆分备份。有没有一种维护成本低的自动化方法?
首选是编写 T-SQL 或 SQL 服务器作业:
- AdventureWorks07182018.back0
- AdventureWorks07182018.back1
- AdventureWorks07182018.back2
- AdventureWorks07182018.back3
评论太长,但这通常在 SQL 代理作业中完成。
拆分备份意味着(至少)4 件事中的 1 件事,如果您还不知道,您需要从供应商那里得到澄清。我排除了部分备份:
- 供应商将在一天内发送上面列出的所有备份,这意味着它是一个基础备份和 3 个差异备份或日志备份(可能)
- 供应商只发送差异备份,因为他们最初向您发送了基础(不太可能)
- 供应商在不同的日期(可能是 VLDB)备份文件组或文件,并在它们发生时发送给您(不太可能的情况)
- 供应商每天向您发送完整备份,其中您获得的最后一个是最新的(最有可能)
不包括文件和文件组恢复,您将:
- 恢复完整备份
- 恢复最后一个差异备份,如果适用
- 恢复在上次 差异备份之后发生的任何日志备份,或者如果没有发生差异
自上次完整备份以来发生的任何日志备份
您还可以在第 2 步中选择任何差异,然后选择自该差异(如果存在)以来的所有日志备份。当然,如果他们只向您发送完整备份,那么您只需要恢复完整备份即可。
类似的东西...这将根据您的环境而有所不同(AlwaysOn、设置为只读、设置为 STANDBY 等...)
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
等...
第三方正在向我们发送我们需要每天恢复到单个数据库中的拆分备份。有没有一种维护成本低的自动化方法?
首选是编写 T-SQL 或 SQL 服务器作业:
- AdventureWorks07182018.back0
- AdventureWorks07182018.back1
- AdventureWorks07182018.back2
- AdventureWorks07182018.back3
评论太长,但这通常在 SQL 代理作业中完成。
拆分备份意味着(至少)4 件事中的 1 件事,如果您还不知道,您需要从供应商那里得到澄清。我排除了部分备份:
- 供应商将在一天内发送上面列出的所有备份,这意味着它是一个基础备份和 3 个差异备份或日志备份(可能)
- 供应商只发送差异备份,因为他们最初向您发送了基础(不太可能)
- 供应商在不同的日期(可能是 VLDB)备份文件组或文件,并在它们发生时发送给您(不太可能的情况)
- 供应商每天向您发送完整备份,其中您获得的最后一个是最新的(最有可能)
不包括文件和文件组恢复,您将:
- 恢复完整备份
- 恢复最后一个差异备份,如果适用
- 恢复在上次 差异备份之后发生的任何日志备份,或者如果没有发生差异 自上次完整备份以来发生的任何日志备份
您还可以在第 2 步中选择任何差异,然后选择自该差异(如果存在)以来的所有日志备份。当然,如果他们只向您发送完整备份,那么您只需要恢复完整备份即可。
类似的东西...这将根据您的环境而有所不同(AlwaysOn、设置为只读、设置为 STANDBY 等...)
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
等...