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

使用Restore-DbaDatabase报错No backups passed through求助

解决Restore-DbaDatabase提示“No backups passed through”的问题

问题场景

作为PowerShell新手,使用以下脚本恢复SQL Server数据库:

Set-DbatoolsInsecureConnection -SessionOnly

Get-ChildItem "C:\NH\WH_BEE_$(Get-Date -Format "yyyyMMdd")_*.bak" | `
Restore-DbaDatabase `
    -SqlInstance "Bee\BEESQL2022" `
    -DatabaseName "WH_BEE" `
    -FileMapping @{
       "WH_Data1" = "C:\WH_BEE.MDF";
       "WH_Data2" = "C:\WH_BEE.NDF";
       "WH_Log" = "C:\WH_BEE.LDF"
    };

运行后出现警告:

WARNING: [23:48:28][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

Module: sql


FullName                 Value Description                 
--------                 ----- -----------                 
sql.connection.trustcert True  Trust SQL Server certificate
sql.connection.encrypt   False Encrypt connection to server

已为C:\NH文件夹及驱动器添加“SQL Server Agent Account”和“Everyone”完全权限,问题仍未解决。


排查与解决步骤

1. 确认备份文件存在且路径匹配

单独执行Get-ChildItem "C:\NH\WH_BEE_$(Get-Date -Format "yyyyMMdd")_*.bak",检查是否返回目标备份文件:

  • 如果无结果,说明文件名的日期格式不匹配(比如文件是昨天的备份,而脚本用了今日日期),可手动替换日期字符串测试,例如Get-ChildItem "C:\NH\WH_BEE_20241005_*.bak"
  • 确保文件扩展名确实是.bak,没有被隐藏或重命名

2. 修正SQL Server服务账户权限

恢复数据库时,是SQL Server数据库引擎服务的账户在访问备份文件,而非SQL Server Agent账户:

  1. 打开services.msc,找到SQL Server (BEESQL2022)服务,查看其登录账户(通常为NT Service\MSSQL$BEESQL2022)
  2. 给该账户添加C:\NH文件夹的读取和执行权限(无需完全控制,读取权限足够)

3. 测试默认备份目录

将备份文件复制到SQL Server默认备份目录(例如C:\Program Files\Microsoft SQL Server\MSSQL16.BEESQL2022\MSSQL\Backup),该目录默认已配置SQL服务账户权限,修改脚本路径后重新运行测试。

4. 调整脚本参数传递方式

避免管道传递可能的异常,手动指定备份文件路径:

$backupFile = Get-ChildItem "C:\NH\WH_BEE_$(Get-Date -Format "yyyyMMdd")_*.bak"
Restore-DbaDatabase -SqlInstance "Bee\BEESQL2022" -DatabaseName "WH_BEE" -Path $backupFile.FullName -FileMapping @{
   "WH_Data1" = "C:\WH_BEE.MDF";
   "WH_Data2" = "C:\WH_BEE.NDF";
   "WH_Log" = "C:\WH_BEE.LDF"
}

同时可尝试移除Set-DbatoolsInsecureConnection -SessionOnly,改用Restore-DbaDatabase的-TrustServerCertificate参数。

5. 验证备份文件完整性

用SQL Server Management Studio(SSMS)手动尝试恢复该备份文件:

  • 如果SSMS也无法读取,说明备份文件损坏或格式错误,需重新获取有效备份
  • 如果SSMS能正常恢复,说明问题出在PowerShell脚本的参数或权限配置上,回到步骤2-4重新排查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:42:17