首页 > 解决方案 > Restore-SqlDatabase 使用具有不同扇区大小的备份

问题描述

我有一个 PowerShell 脚本,它从生产环境复制备份并将它们还原到本地 sql 服务器实例,以便对数据库执行一些操作,然后将它们重新备份到本地驱动器。

此命令的一部分使用了Restore-SqlDatabase命令。

此错误是由于我的机器 (4096) 和生产环境 (512) 中的扇区大小差异造成的。

无法使用备份文件“.bak”,因为它最初格式化为扇区大小 512,现在位于扇区大小为 4096 的设备上

我想自动化这个工作流,所以我正在寻找一种方法来运行这个脚本,而不管目标机器的扇区大小或生产环境如何。PowerShell中是否有解决此问题的方法?

Restore-SqlDatabase -ServerInstance $DatabaseServer -Database $DatabaseName -RelocateFile $relocate -BackupFile $BackupFilePath -RestoreAction Database

我知道这个问题的答案,但特别是我想在 powershell 中执行此操作(使用 Restore-SqlDatabase 命令),而不是 SQL。

标签: sql-serverdatabasepowershell

解决方案


恢复

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)。


推荐阅读