将 BacPac 导入 Azure 时出现类型为“System.OutOfMemoryException”的异常

将 BacPac 导入 Azure 时出现类型为“System.OutOfMemoryException”的异常

因为这个问题我想尝试将 BACPAC 文件导入 Azure SQL Server。

当我尝试将数据层应用程序(BACPAC 文件)导入新的 Azure 数据库时,出现内存不足异常。

在此处输入图片描述

当我运行数据迁移助手时,我收到 1 个不受支持的功能 Azure SQL 数据库不支持跟踪标志

我想知道这是否就是我收到该错误的原因 在此处输入图片描述

答案1

由于评论很受欢迎,因此将其作为答案发布......

尝试关闭 SSMS,然后重新打开它,并再次尝试导入。我发现,如果您之前运行了一些返回数百万行的非常大的选择语句,则 SSMS 进程已经使用了大量内存,并且更容易出现 OutOfMemory 错误。因此,关闭并重新打开 SSMS 有助于避免这种情况。

System.OutOfMemoryException是一个 .NET 错误,通常意味着 SSMS 客户端工具内存不足,而不是服务器内存不足。

答案2

将 1TB BacPac 文件导入 Azure SQL 数据库时遇到了类似的问题。

有效的解决方案是:

  • 创建具有 64GB RAM 的 Azure VM (D16ds_v4) - 用于还原过程的临时 VM
  • 将 4TB 托管磁盘附加到 Azure VM,对其进行格式化并挂载为驱动器 T:
  • 将 BacPac 文件传输到虚拟机中
  • 下载适用于 .Net Core 的 64 位 SqlPackage命令行工具进入 Azure VM
  • 在 Azure VM 内的命令提示符中运行以下命令(禁用 QuickEdit):
mkdir T:\Temp
SET TEMP=T:\Temp
SET TMP=T:\Temp
sqlpackage.exe /a:import /tcs:"Data Source=[ServerName].database.windows.net;Initial Catalog=[DatabaseName];User Id=[UserName];Password=[Password]" /sf:E:\BacPacDir\BacPacFile.bacpac /p:DatabaseEdition=Hyperscale /p:DatabaseServiceObjective=HS_Gen5_2
  • 将 E:\BacPacDir\BacPacFile.bacpac 更改为您的 bacpac 的位置。
  • 相应地更改 Azure SQL 数据库参数:/p:DatabaseEdition=Hyperscale /p:DatabaseServiceObjective=HS_Gen5_2
  • 对于标准/高级 SQL DB,有一个额外的 DatabaseMaximumSize 参数:/p:DatabaseEdition=Premium /p:DatabaseServiceObjective=P11 /p:DatabaseMaximumSize=1024

答案3

您可以尝试使用 Azure 门户而不是数据库导入 Bacpac 文件。您可以使用类似以下工具将 Bacpac 上传到 Azure 存储Azure 存储资源管理器,然后将门户指向该门户以将其导入 -https://docs.microsoft.com/en-us/azure/sql-database/sql-database-import

相关内容