You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Restore-DbaDatabase恢复数据库时提示无备份文件的问题

问题:Restore-DbaDatabase提示无备份文件但$backupFiles非空的原因

问题场景

通过以下PowerShell命令获取到了存在的备份文件:

$backupFiles = Get-ChildItem -Path $BackupPath -Filter "*$tstamp*.bak" -Recurse | Sort-Object -Property CreationTime | Select-Object

$backupFiles输出显示存在目标bak文件:

Mode                LastWriteTime         Length Name                                                                                                                                                                                                                            
----                -------------         ------ ----                                                                                                                                                                                                                            
-a----         9/8/2022  10:36 PM      130576384 WP04034XXXXX_WebStrat_20220908223605_full.bak

但执行恢复命令时:

$backupFiles | Restore-DbaDatabase -SqlInstance $primaryReplica -useDestinationDefaultDirectories -WithReplace

出现警告导致恢复失败:

WARNING: [16:12:02][Restore-DbaDatabase] No backups passed through.
This could mean the SQL instance cannot see the referenced files, the file's headers could not be read or some other issue

使用的Restore-DbaDatabase版本为0.9.188。

可能原因及解决方法

  • 对象属性未正确传递
    0.9.188版本的Restore-DbaDatabase对FileInfo对象的解析存在局限,直接传递Get-ChildItem返回的对象可能无法被识别为有效备份路径。需要明确传递文件的完整路径:

    # 方法1:直接传递FullName属性
    $backupFiles.FullName | Restore-DbaDatabase -SqlInstance $primaryReplica -useDestinationDefaultDirectories -WithReplace
    
    # 方法2:修改获取文件的命令,直接返回路径字符串
    $backupFiles = Get-ChildItem -Path $BackupPath -Filter "*$tstamp*.bak" -Recurse | Sort-Object CreationTime | Select-Object -ExpandProperty FullName
    
  • SQL Server服务账户无文件访问权限
    本地用户能看到备份文件,但SQL Server服务账户(运行SQL实例的账户,如NT SERVICE\MSSQLSERVER)可能没有$BackupPath路径的读取权限:

    • 若为本地目录:检查目录的NTFS权限,确保SQL服务账户拥有读取权限;
    • 若为网络共享:确保SQL服务账户能访问共享路径,且共享权限和NTFS权限均配置正确。
  • 备份文件损坏或无法读取
    备份文件存在但可能损坏,或SQL Server无法读取其头部信息。可通过以下方式验证:

    # 使用dbatools命令测试备份有效性
    Test-DbaBackup -SqlInstance $primaryReplica -Path $backupFiles.FullName
    

    或在SSMS中执行SQL命令:

    RESTORE HEADERONLY FROM DISK = '备份文件的完整路径'
    

    若命令返回错误,说明文件损坏或格式不被当前SQL实例支持。

  • 旧版本dbatools的bug
    0.9.188是较旧的dbatools版本,存在已知的参数解析或对象处理bug。建议升级到最新稳定版dbatools,新版本对备份恢复的逻辑做了大量优化。

内容的提问来源于stack exchange,提问作者Leo Torres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:45:49