sql - 将 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
谢谢
解决方案
我强烈建议您为此查看 dbatools powershell 模块。满足您的需求:
$server = 'yourServer';
$backups = get-dbabackupinformation -SqlInstance $server -Path 'D:\BACKUP';
$backups | restore-dbadatabase -SqlInstance $server -withreplace;
注意 -restore-dbadatabase
有很多选项。对于大多数情况,默认值非常好,但请查看可用的内容。
但是也!关于您的样本,有两件事引起了我的注意:
- 您正在恢复主数据库。只有在发生异常情况时才应该这样做(例如磁盘损坏、管理员或恶意行为者破坏了服务器等)。
- 您正在从多个不同的文件中恢复同一个数据库,而没有指定
with norecovery
.
我猜这两者都归因于示例代码的快速和松散。但值得一提的是,恢复主服务器将对您的服务器产生影响,并且恢复多个文件可能会使您的恢复时间超过应有的时间(例如,如果这些备份中的每一个都代表每日备份,则仅恢复代表所需 RPO 的那个是有意义的)。
推荐阅读
- python - 如何保存、加载或使用学习数据?使用 Keras 音频学习机时
- spring-boot - Springboot+webflux+Websocket如何在服务器端处理会话超时
- python - 如何计算按一个属性分组的值,但在熊猫的第二列中提供
- python-2.7 - 用另一个词替换句子中的一个词
- bash - groovy 中的 grep 命令用法
- c# - 你调用的对象是空的。需要帮助
- git - 有没有办法冲突合并同一分支的过去提交?
- python - 在 S3 对象到达时从 Lambda 触发 EMR 上的 python 脚本以及对象详细信息
- javascript - 无论屏幕尺寸如何,如何使字符居中并始终在其周围填充
- go - 就地修改切片类型的映射值