将Azure SQL数据库还原到托管实例

问题描述

我正在尝试每天从Azure sql数据库(弹性池)还原到托管实例。我尝试导出和导入bacpac文件,但失败并出现以下错误

标题:Microsoft sql Server Management Studio


无法导入包。
警告sql72012:对象[XTP]存在于目标中,但是即使选中了“为目标数据库中的对象而不是源中的对象生成放置语句”复选框,也不会删除该对象。
警告sql72012:对象[XTP]存在于目标中,但是即使选中了“为目标数据库中的对象而不是源中的对象生成放置语句”复选框,也不会删除该对象。
警告sql72012:对象[data_0]存在于目标中,但是即使选中了“为目标数据库中的对象而不是源中的对象生成放置语句”复选框,也不会删除该对象。
警告sql72012:对象[log]存在于目标中,但是即使选中了“为目标数据库中的对象而不是源中的对象生成放置语句”复选框,也不会删除该对象。
错误sql72014:.Net sqlClient数据提供程序:消息102,级别16,状态30,行1“类型”附近的语法不正确。
错误sql72045:脚本执行错误。执行的脚本:

CREATE USER [**************]
   WITH SID = 0x6B6F4FABE3FFA848BAFB6C956D9A7E9C,TYPE = E;

我还尝试过使用自动化帐户执行Powershell,但似乎也不支持托管实例。

如何将这些sql数据库还原到托管实例中?

解决方法

恭喜您成功了!

  1. 创建数据库的副本
  2. 在导出之前从数据库中删除所有AAD用户

这可能对其他社区成员有益。谢谢。

,

您还可以做的是:

  1. 将 .bacpac 文件重命名为 .zip 并解压

  2. 转到 model.xml 文件并找到所有类似于以下内容的条目:

    a) <Element Type="SqlRoleMembership">
    b) <Element Type="SqlUser" Name="
    c) <Element Type="SqlLogin" Name="
    d) <Element Type="SqlExternalDataSource"
    
  3. 之后保存model.xml并运行这个powershell:

    $modelXmlPath = Read-Host“model.xml 的路径” $hasher =[System.Security.Cryptography.HashAlgorithm]::Create("System.Security.Cryptography.SHA256CryptoServiceProvider") $fileStream = new-object System.IO.FileStream ` -ArgumentList @($modelXmlPath,[System.IO.FileMode]::Open) $hash = $hasher.ComputeHash($fileStream) $hashString = "" Foreach ($b in $hash) { $hashString += $b.ToString("X2") } $fileStream.Close() $hashString

  4. 取散列并替换 Origin.Xml 中的实际校验和值

  5. 再次压缩所有内容并导入任何地方(几乎)

请找到参考条目:

Error Importing Azure bacpac file to local db error incorrect syntax near EXTERNAL