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

使用Restore-DbaDatabase报错:Cannot index into a null array 求助

问题分析与解决

错误原因

出现Cannot index into a null array错误的核心原因是备份文件的传递顺序不符合DbaTools的备份链识别逻辑。原脚本通过Get-ChildItem同时获取全量备份和日志备份目录的文件,返回的文件顺序随机(取决于系统文件排序规则),可能导致日志文件排在全量备份之前,使得Restore-DbaDatabase无法识别有效的备份起始点,内部处理时触发空数组索引错误。

解决方案

需要手动对备份文件按备份链顺序排序:先处理最新的全量备份,再按时间升序处理全量备份之后的所有日志备份。修改后的脚本如下:

# 获取最近24小时内的最新全量备份
$fullBackups = Get-ChildItem '\\bckp01\sql_backups$\Business\FULL_COPY_ONLY' | 
    Where-Object {$_.CreationTime -gt (Get-Date).AddDays(-1)} |
    Sort-Object CreationTime -Descending | Select-Object -First 1

# 仅获取全量备份之后生成的日志备份,并按时间升序排列(恢复顺序)
$logBackups = Get-ChildItem '\\bckp01\sql_backups$\Business\LOG' | 
    Where-Object {$_.CreationTime -gt $fullBackups.CreationTime} |
    Sort-Object CreationTime -Ascending

# 按恢复顺序合并备份文件:先全量,后日志
$File = $fullBackups + $logBackups

# 执行恢复操作
$File | Restore-DbaDatabase -SqlInstance Server2 -Database Business -NoRecovery -OutputScriptOnly -ReuseSourceFolderStructure -WhatIf

额外验证步骤

  1. 若仍报错,可先移除-OutputScriptOnly参数,直接执行恢复测试,排除脚本生成环节的潜在问题;
  2. 加入全量备份存在性判断,避免空值传递:
if (-not $fullBackups) {
    Write-Error "未找到符合条件的全量备份文件"
    exit
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:38:19