sql-server - 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。
解决方案
恢复
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)。
推荐阅读
- java - 如何使用 Android Java 将条形码打印到斑马 ez320?
- python - 使用内部有字典的 pandas 列在 DataFrame 中创建新列
- python - 使用 Python 和 Beautiful Soup 从文本中抓取数字
- python - BeautifulSoup 在有效结果中返回 None
- facebook - facebook 和 google 分析中的 URL Builder 源/媒体问题
- http - net.Dialer#KeepAlive 和 http.Transport#IdleTimeout 有什么区别?
- java - macos镜像中appVeyor中AdoptOpenJDK 8.232的安装路径是什么?
- webpack - 未定义导出 - Storybook + webpack 3 + babel 7 + commonjs
- python - Python ctypes 使用 winmode 加载 DLL
- amazon-web-services - 如何访问 EC2 实例元数据服务?从 EC2 外部