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

SqlServer PowerShell模块Restore-SqlDatabase的-AutoRelocate能否自动重命名数据文件?

结论

当前你使用的21.1.18256版本SqlServer模块中,Restore-SqlDatabase没有内置和SSMS恢复向导一致的「自动根据新数据库名重命名物理数据/日志文件」的原生参数,你没有遗漏官方公开的配置项。

替代实现方案

你可以通过动态生成RelocateFile参数的方式,用少量代码实现和SSMS完全一致的效果,无需手动逐个指定文件路径:

# 按需修改以下3个变量即可
$targetInstance = "你的SQL实例名"
$newDbName = "NewDatabaseName"
$backupFilePath = "C:\Folder\BackupFileName.bak"

# 读取备份文件内的文件元数据
$backupFileMeta = Get-SqlBackupFileContent -ServerInstance $targetInstance -Path $backupFilePath
$fileList = $backupFileMeta.Files

# 自动生成重定位规则
$relocateRules = $fileList | ForEach-Object {
    # 替换原文件名为新库名对应的文件名
    $newFileName = $_.PhysicalName.Replace($_.DatabaseName, $newDbName)
    # 生成重定位对象
    New-Object Microsoft.SqlServer.Management.Smo.RelocateFile($_.LogicalName, $newFileName)
}

# 执行恢复,需覆盖同名库可加-ReplaceDatabase参数
Restore-SqlDatabase -ServerInstance $targetInstance `
    -Database $newDbName `
    -BackupFile $backupFilePath `
    -RelocateFile $relocateRules `
    -NoRecovery:$false `
    -ReplaceDatabase

该实现逻辑和SSMS恢复向导的默认处理规则完全一致,自动适配多数据文件、多日志文件的场景,不会出现同实例恢复文件冲突的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:24:00