从Azure Blob存储中恢复数据库由于扇区大小错误而导致失败

时间:2017-03-20 11:49:13

标签: sql-server azure amazon-web-services amazon-s3

我正在尝试将SQL Server数据库从AWS SQL Server导入Azure SQL Server。 以下是我为导入过程所做的步骤:

  1. 将数据库从AWS SQL Server备份到AWS S3存储桶。
  2. 将.bacpac文件从S3存储桶复制到本地文件路径。
  3. 将.bacpac文件从本地文件路径上传到Azure blob存储。
  4. 在上传过程之后,当我将Azure blob存储中的.bacpac文件还原到Azure SQL Server时,我收到以下异常。

    *无法使用备份文件' https://sqlmigrateassistant.blob.core.windows.net/sql2005backup/demodatabase.bacpac'因为它最初使用扇区大小512格式化,现在位于扇区大小为65536的设备上。 RESTORE FILELIST异常终止 *

    在上面的第2步之后,我还尝试从本地文件路径手动将.bacpac文件从SQL Server Management studio(SSMS)导入Azure SQL Server。那时我得到以下异常。

    *文件包含损坏的数据。 (Microsoft.Data.Tools.Schema.Sql) *

    任何人都可以提供有关如何将数据库还原到Azure SQL Server的任何信息吗?

    非常感谢任何信息。

1 个答案:

答案 0 :(得分:2)

您必须使用带有URL的还原数据库,并指定块大小为512 ..

RESTORE DATABASE [AdventureWorks2012] FROM  URL = N'your bacpac path'
WITH  CREDENTIAL = N'My_Credential'
, FILE = 1,  NOUNLOAD,  STATS = 5,BLOCKSIZE= 512;

此处已解释失败的原因:Database restore failure when restoring from URL并且上下文也适用于您的方案

  

备份到URL时,SQL Server默认使用64K块大小,因为Azure blob存储提供的扇区大小为64K。因此,由Managed Backup创建的URL的常规计划备份具有与媒体扇区大小相同的块大小,并且不会发生此问题。但是,当将具有4K扇区大小的本地磁盘上创建的备份复制到存储帐户,然后尝试从中还原时,SQL Server会使用上述错误消息阻止它