我刚刚将.bacpac
文件还原到本地SQL服务器实例(64b v12.0.4213),备份来自azure sql实例。
因OOM异常而失败了几次。我关闭了机器上的所有内容,在恢复结束时,SQL Server服务实例从700MB文件中消耗了13GB的内存!
恢复幸运地完成了,但似乎内存没有被释放/垃圾收集。我写这篇文章的时候仍然只有12GB。
这是一个已知问题吗?有什么方法可以恢复.bacpac
并选择要忽略的表吗?您可以通过正常的数据恢复来执行此操作,最令人反感的表是dbo。[Logs]表,obvs。
答案 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 才是可行的。这听起来像是一个愚蠢的建议,但我以前一直在运行一些大型查询,这些查询肯定会导致内存问题。