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
相关产品推荐
相关产品推荐

