首页 > 解决方案 > 将 SQL 备份从目录还原回服务器

问题描述

我有作为备份并存储在 D:\Backup\ 驱动器中的 SQL 数据库列表,任务是恢复所有备份,回到 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

谢谢

标签: sqlsql-serverbackuprestore

解决方案


我强烈建议您为此查看 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 的那个是有意义的)。


推荐阅读