【问题标题】:Restore SQL Back ups back to server from Directory从目录将 SQL 备份恢复到服务器
【发布时间】:2021-07-02 10:48:23
【问题描述】:

我有一个 SQL 数据库列表作为备份并存储在 D:\Backup\ 驱动器中,任务是恢复所有备份,回到 SQL Server。寻找将从目录中打开每个文件并将所有文件一一还原到服务器的存储过程。

Sample list of Databases

restore database master from disk='D:\BACKUP\DB1.bak' with replace
restore database master from disk='D:\BACKUP\DB2.bak' with replace
restore database master from disk='D:\BACKUP\DB3.bak' with replace
restore database master from disk='D:\BACKUP\DB4.bak' with replace
restore database master from disk='D:\BACKUP\DB5.bak' with replace
restore database master from disk='D:\BACKUP\DB6.bak' with replace
restore database master from disk='D:\BACKUP\DB7.bak' with replace

谢谢

【问题讨论】:

  • 您是要恢复到进行备份的同一台服务器还是不同的 Sql Server?
  • 是同一台服务器
  • 不存在为您执行此操作的神奇程序,您需要推出自己的定制解决方案以满足您的需求。这是一个复杂的过程,因为每个数据库备份都需要针对各种数据文件、日志文件和每个路径的自定义恢复命令。有关服务器上的备份列表,请参阅 msdb.dbo.backupset。我已经为此构建了自定义解决方案,您需要使用restore filelistonly from disk 和一些dynamic sql 来迭代数据库列表并构建适当的restore 命令。
  • 您是否有多个要恢复的master 备份日志?一遍又一遍地恢复同一个数据库真的没有意义。而恢复master是一项复杂的操作,需要非常具体的步骤,其中一些步骤超出了SQL批处理的范围。

标签: sql sql-server backup restore


【解决方案1】:

我强烈建议您为此查看 dbatools powershell 模块。满足您的需求:

$server = 'yourServer';

$backups = get-dbabackupinformation -SqlInstance $server -Path 'D:\BACKUP';
$backups | restore-dbadatabase -SqlInstance $server -withreplace;

注意 - restore-dbadatabase 有很多选项。对于大多数情况,默认值非常好,但看看有什么可用的。


还有!关于您的样本,有两件事引起了我的注意:

  1. 您正在恢复主数据库。只有在发生异常情况时才应该这样做(例如磁盘损坏、管理员或恶意行为者破坏了服务器等)。
  2. 您正在从多个不同的文件中恢复同一个数据库,但未指定 with norecovery

我猜这两者都归因于示例代码的快速和松散。但值得一提的是,恢复主服务器将对您的服务器产生影响,并且恢复多个文件可能会使您的恢复时间超过应有的时间(例如,如果这些备份中的每一个都代表每日备份,则仅恢复代表所需 RPO 的那个是有意义的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多