You need to enable JavaScript to run this app. 如何编写按文件名顺序还原SQL Server 2019多TRN/BAK备份的PowerShell脚本
优惠活动
大模型
产品
解决方案
定价
更多

如何编写按文件名顺序还原SQL Server 2019多TRN/BAK备份的PowerShell脚本

基于dbatools实现SQL Server 2019按文件名顺序还原的脚本方案

核心逻辑对齐要求

  • 全程不依赖文件的创建/修改时间,完全以文件名内容为排序依据
  • 解决默认字符串排序的顺序错乱问题(例如未带前导零的序号4会被排到10之后的异常情况)
  • 兼容全量BAK备份+后续连续TRN日志的还原流程,适配每日定时任务的运行节奏

分步实现代码

  1. 前置环境准备

    首次运行前需完成dbatools模块安装:Install-Module dbatools -Scope CurrentUser -Force,避免定时任务触发时出现模块找不到的错误。

  2. 配置脚本基础参数

    # 替换为Python拉取备份文件的实际存放路径
    $backupFileDir = "C:\DailyRestore\IncomingBackups"
    # 替换为实际的SQL Server 2019实例名
    $sqlInstance = "localhost\MSSQL2019"
    # 替换为需要还原的目标数据库名
    $targetDatabase = "TestRestoreDB"
    
  3. 获取文件并执行自定义文件名排序
    该步骤完全跳过文件系统自带的时间属性,仅通过文件名中的数字序号做自然排序,匹配你提到的..04到..12类的文件名场景:

    # 获取目录下所有BAK、TRN格式的备份文件
    $rawFiles = Get-ChildItem -Path $backupFileDir -File | Where-Object { $_.Extension -in ".bak", ".trn" }
    
    # 自定义排序:提取文件名末尾、扩展名前的数字序号,按数值大小升序排列
    $orderedBackupFiles = $rawFiles | Sort-Object -Property @{
        Expression = {
            # 匹配扩展名前的连续数字段,转为整数用于排序
            $numberMatch = [regex]::Match($_.Name, "(\d+)(?=\.(bak|trn)$)")
            if ($numberMatch.Success) { [int]$numberMatch.Value } else { 999999 }
        }
    }
    
  4. 按排序后的顺序执行还原
    通过dbatools参数关闭备份链的自动校验逻辑,严格按照我们手动排好的文件顺序执行操作,不参考系统记录的备份时间:

    $orderedBackupFiles | Restore-DbaDatabase `
        -SqlInstance $sqlInstance `
        -DatabaseName $targetDatabase `
        -UseDestinationDefaultDirectories `
        -ReplaceExisting `
        -NoRecovery `
        -TrustDbBackupHistory
    
    # 所有备份处理完成后,将数据库切换为可访问状态
    Set-DbaDbState -SqlInstance $sqlInstance -Database $targetDatabase -Online
    

定时任务运行注意事项

  • 运行PowerShell脚本的Windows账号,需要同时满足两个权限:对备份文件夹的读取权限、SQL Server实例上的sysadmin服务器角色
  • 排序逻辑不受文件复制时间的影响:哪怕Python拉取的所有文件在目标目录的系统创建时间都是当日,排序依然严格基于文件名内容执行
  • 可在排序完成后增加前置校验:确认排序后的第一个文件为.bak全量备份文件,避免备份文件拉取不全导致的还原失败

内容的提问来源于stack exchange,提问作者Java。

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 06:45:02