bacpac还原到SQL Server的内存使用情况

时间:2016-01-07 10:43:56

标签: sql-server ssms azure-sql-database data-tier-applications

我刚刚将.bacpac文件还原到本地SQL服务器实例(64b v12.0.4213),备份来自azure sql实例。

因OOM异常而失败了几次。我关闭了机器上的所有内容,在恢复结束时,SQL Server服务实例从700MB文件中消耗了13GB的内存!

恢复幸运地完成了,但似乎内存没有被释放/垃圾收集。我写这篇文章的时候仍然只有12GB。

这是一个已知问题吗?有什么方法可以恢复.bacpac并选择要忽略的表吗?您可以通过正常的数据恢复来执行此操作,最令人反感的表是dbo。[Logs]表,obvs。

3 个答案:

答案 0 :(得分:3)

我有同样的问题;修改服务器可用的内存没有影响。

对我来说,解决方法是使用命令行(PowerShell)执行导入。

[string]$myBacpac = 'c:\temp\myBacpac123.bacpac'
[string]$connectionString = 'Data Source=.;Initial Catalog=MyNewCatalog; Integrated Security=true;'
[string]$action = 'Import'

[string[]]$commandParameters = @(
    "/Action:`"$action`"" 
    "/SourceFile:`"$myBacpac`"" 
    "/TargetConnectionString:`"$connectionString`""
)
[string]$LatestSqlPackage = Get-Item 'C:\*\Microsoft SQL Server\*\DAC\bin\sqlpackage.exe' | %{get-command $_}| sort version -Descending | select -ExpandProperty source -First 1
if ($LatestSqlPackage) {
    Write-Verbose "Found: $LatestSqlPackage" 
    & $LatestSqlPackage $commandParameters
} else {
    Write-Error "Could not find SqlPackage.exe"
}

第一次尝试时,我收到关于不支持的型号版本的错误:

  

将服务器'。'上的数据库'MyNewCatalog'导入。创建部署计划   初始化部署SqlPackage.exe: *导入错误   database:无法从包中读取模式模型头信息。   在第1行:char:1   +&$ sqlPackage / Action:Import /SourceFile:"c:\temp\myBacpac123.bacpac“ / T ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:未指定:(* 错误不正确...来自包的错误:.String)[],RemoteException       + FullyQualifiedErrorId:NativeCommandError不支持模型版本“ 3.5”。

对于该错误,我遵循此处的指导:https://stackoverflow.com/a/40541210/361842;即安装了Microsoft SQL Server Data-Tier Application Framework (16.4)。在重新运行时,一切都成功了。

答案 1 :(得分:2)

要配置SQL Server对内存的使用,请打开SQL Server Management Studio,连接到服务器,在“对象资源管理器”窗口中右键单击服务器,单击“属性”,然后单击“服务器属性”窗口的“内存”选项卡。

对于bacpac,您无法在导入操作期间选择要还原的表,但可以选择导出哪些表。您可以将SqlPackage.exe的export命令与/ p:TableData参数一起使用,以指定bacpac中应包含哪些表。遗憾的是,没有办法只指定应排除哪些表。 = ^ /

此处提供了SqlPackage.exe文档:https://msdn.microsoft.com/en-us/hh550080(v=vs.103).aspx

答案 2 :(得分:0)

其他答案都对我没有帮助,关闭并重新启动SSMS 才是可行的。这听起来像是一个愚蠢的建议,但我以前一直在运行一些大型查询,这些查询肯定会导致内存问题。