我有一个PowerShell脚本,该脚本从生产环境中复制备份并将其还原到本地sql服务器实例,以便在数据库上执行某些操作,然后将其重新备份到本地驱动器。
此命令的一部分使用Restore-SqlDatabase命令。
此错误是由于我的机器(4096)和生产环境(512)中的扇区大小不同引起的。
无法使用备份文件“ .bak”,因为它最初是 扇区大小为512的格式,现在在扇区大小的设备上 4096
我想自动执行此工作流程,因此无论目标计算机或生产环境的扇区大小如何,我都在寻找一种运行此脚本的方法。在PowerShell中反正可以解决此问题吗?
Restore-SqlDatabase -ServerInstance $DatabaseServer -Database $DatabaseName -RelocateFile $relocate -BackupFile $BackupFilePath -RestoreAction Database
我知道答案in this question,但我想特别在Powershell(使用Restore-SqlDatabase命令)而不是SQL中实现。
答案 0 :(得分:2)
可以通过Restore-SqlDatabase
参数在BlockSize
期间指定扇区大小。您在此处传递的块大小必须是物理硬盘驱动器的块大小。
例如。
Restore-SqlDatabase -BlockSize 4096 -ServerInstance $DatabaseServer -Database $DatabaseName -RelocateFile $relocate -BackupFile $BackupFilePath -RestoreAction Database
可以使用以下命令以编程方式确定块大小:
Get-CimInstance -ClassName Win32_Volume | Select-Object BlockSize
Backup-SqlDatabase
命令还接受一个-BlockSize
参数,但是在覆盖原始备份文件时将其设置为原始块大小或我的计算机的块大小无效。
可以完全省略该参数,而只需将备份保存在磁盘上的其他位置即可。在这种情况下,SQL Server将选择硬盘驱动器的块大小(在我的情况下为4096)。