有没有办法从azure数据库中删除blob存储凭据以允许bacpac本地恢复?

时间:2017-03-07 22:22:51

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

我正在尝试从Azure导出bacpac并在SQLEXPRESS 2016上本地恢复。当我尝试恢复它时,虽然我从SSMS中的导入数据层应用程序向导中收到以下错误:

  

无法导入包。

     

警告SQL72012:对象   [TestBacPacDB_Data]存在于目标中,但不会被删除   即使您选择了“为对象生成删除语句”   在目标数据库中,但不在源'检查中   框。

     

警告SQL72012:对象[TestBacPacDB_Log]存在于   目标,但即使你选择了它也不会被删除   '为目标数据库中的对象生成drop语句   但那不在源'

     

错误SQL72014:。Net   SqlClient数据提供程序:消息33161,级别15,状态1,行1数据库   此版本的SQL不支持没有密码的主密钥   服务器。错误SQL72045:脚本执行错误。执行的脚本:   创建主键;

经过一番挖掘后,我发现数据库中已添加了凭据和主密钥。凭证名称引用了一个blob存储容器,所以我想也许审计是在某个时刻设置的,容器作为外部资源或类似的东西。

我想删除此凭据,以便我可以在本地恢复数据库,但数据库会抛出一个错误,指出它正在使用中。我已尝试禁用Azure中的日志记录,但仍无法删除凭据。

我知道有时Azure会关闭资源需要时间,所以也许这就是原因,但我想知道是否有其他人遇到类似的问题。

我正在努力避免为主密钥设置密码,因为我不像本问题那样在本地关注凭证:SSMS 2016 Error Importing Azure SQL v12 bacpac: master keys without password not supported

2 个答案:

答案 0 :(得分:2)

最终,我们最终创建了一个主密钥。为了以这种方式在本地恢复我们的数据库,我们首先在SSMS中手动创建数据库,然后为其添加一个主密钥。这样可以使数据导入正常工作。

答案 1 :(得分:0)

我遇到了完全相同的问题,并尝试了各种各样的潜在修复程序。大多数都与更新系统,先制作副本等有关......而且绝对没有用。

虽然这很疯狂,但我最终解决它的唯一方法是手动编辑内部结构:

  1. 从原始来源获取bacpac或随时随地复制
  2. 重命名为.zip,并解压缩文件夹结构
  3. 编辑“model.xml”,搜索与“主密钥”和/或“共享访问签名”有关的内容并删除相应的节点
  4. 计算现在修改的model.xml
  5. 的Sha-256校验和
  6. 替换“Origin.xml”
  7. 底部的校验和
  8. 重新压缩所有文件并重命名为xxx.bacpac
  9. 像往常一样导入本地系统