Azure SQL 数据库 Bacpac 本地还原

Posted

技术标签:

【中文标题】Azure SQL 数据库 Bacpac 本地还原【英文标题】:Azure SQL Database Bacpac Local Restore 【发布时间】:2011-12-12 10:17:52 【问题描述】:

我已经使用 Azure 管理控制台中的“导出”选项为我的 Azure SQL 数据库创建了 BACPAC 备份。

将它下载到我的机器后,我有点不知道如何将它恢复到本地 SQL Server 实例。我遇到了 DacImportExportCli 工具,但找不到本地恢复的示例。

此外,如果有人编写了执行此操作的脚本(因此可以安排),那就太棒了。

【问题讨论】:

这可能是 SQL Server 2012 的问题,但在 SQL Server Management Studio 中,如果我右键单击本地服务器的数据库文件夹并选择导入数据层应用程序,该应用程序将启动读取 BACPAC 文件的向导生成我的 Azure 数据库的副本。如果您不想先将 BACPAC 文件复制到本地,该向导还可以直接连接到 blob-store 以获取 BACPAC 文件。 你有想过这个问题吗? @dumbledad 我相信导入数据层应用程序是 SQL 2012 SSMS 的事情,2008R2 似乎只能导出 DACPAC,看不到导入选项。 【参考方案1】:

我需要导出 SQL Azure 数据库,然后将其导入本地 SQL 2008 R2 服务器(注意我也在使用 Visual Studio 2010)。微软当然不遗余力地让这成为一项痛苦的任务,但是,我能够通过执行以下操作来做到这一点:

    转到此链接 http://msdn.microsoft.com/en-us/jj650014 并安装适用于 Visual Studio 2010 的 SQL Server Data Tools

    这将安装在您的本地驱动器上。在我的情况下,它放在这里:C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin

    通过命令行或 powershell 浏览至此

    您将要执行 SqlPackage.exe

    打开此链接可查看 SqlPackage.exe (http://msdn.microsoft.com/en-us/library/hh550080(v=vs.103).aspx) 的所有参数选项列表

    这是我需要执行的命令行,以将 .bacpac 文件导入本地 SQL 2008 R2 服务器:

    .\SqlPackage.exe /a:Import /sf:C:\mydatabasefile.bacpac /tdn:NorthWind /tsn:BINGBONG

/tdn 是您希望将 bacpac 文件还原到的数据库的名称。 /tsn 是您的 SQL 服务器的名称。

您可以在 #5 的链接上看到所有这些参数说明。

【讨论】:

如果您安装了 SSMS 2012,这可以更轻松地完成。您可以简单地使用上面@Josiah 所述的向导,即使使用 2008 R2 服务器也是如此。 我花了很多时间寻找这个解决方案,同时我设法下载了整个管理工作室 2014。 SqlPackage 在“更新数据库”步骤中为我挂起,直到我完全删除目标数据库【参考方案2】:

这是一次恢复一堆 bacpac 文件的脚本: Bulk Restore bacpac files local

cd [FOLDERPATH]
$goodlist = dir
cd 'C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin'
foreach($i in $goodlist) $name = $i.Name; $namer = $i.Name.Substring(0, $i.Name.length - 7); .\SqlPackage.exe /a:Import /sf:[FOLDERPATH]\$name /tdn:$namer /tsn:[SERVERNAME] 

【讨论】:

【参考方案3】:

如果您使用的是 SSMS 2012,只需在对象资源管理器中右键单击服务器下的数据库文件夹并选择“导入数据层应用程序...”即可。

有一个需要注意的问题:截至 2013 年 3 月 26 日(当时我需要自己了解如何执行此操作),当您从 Azure 导出 .bacpac 时,它将被下载为 . zip 文件,不是 .bacpac 文件,通过导入向导中的“浏览”按钮打开的文件对话框只会在文件中显示 *.bacpac 或 .过滤器,表示不支持 .zip。但是,如果您将过滤器更改为 .,请选择您下载的 .zip,然后单击“下一步”,向导将正常进行。

【讨论】:

这是正确答案。您现在可以安装 SSMS 2016 的免费独立版本,它提供所有这些功能【参考方案4】:

这可以通过 SQL Server Management Studio 2012 轻松完成

    右键单击Connection > Databases节点并选择“Import Data-tier application...” 在介绍步骤中选择“下一步”。 浏览或连接到保存备份的存储帐户。

【讨论】:

这是完美的。 RedGate 工具可能很脆弱。我很高兴看到支持 MS 的选项。 它是否适用于 sql express 2012 ?因为我有以下错误消息:Count not load schema model from package. (Microsoft.SqlServer.Dac) ------------------ 附加信息:内部错误。内部目标平台类型 SqlAzureDatabaseSchemaProvider 不支持架构文件版本“2.5”。 (文件:C:\Users\xxxxx\Downloads\dbname-2013-10-10-20-2.bacpac)(Microsoft.Data.Tools.Schema.Sql) @ElTone 我刚刚使用 Management Studio 将 bacpac 直接从 Azure 存储恢复到我的本地 SQL Server Express 2012 数据库。没有看到任何错误,数据似乎在那里。有人提到安装较新版本的 SQL Server Data Tools 对他们有帮助(但他们不是指 Management Studio)social.msdn.microsoft.com/Forums/windowsazure/en-US/… @Juha Palomäki 正确:安装最新版本的 SSDT 解决了这个问题。现在一切都好起来了。 使用 Management Studio 可以导入多大的 bacpac 文件似乎有一些限制。如果您遇到 OutOfMemory 异常,请查看 Flea 关于如何使用命令行工具 SqlPackage.exe 的回答【参考方案5】:

您可以使用客户端工具恢复 BACPAC。视频在这里:

http://dacguy.wordpress.com/2011/09/09/importexport-services/

工具可在此处获得:

http://sqldacexamples.codeplex.com/documentation

【讨论】:

该工具应该支持将bacpac导入本地数据库。例如,使用 Windows Auth 将 bacpac 导入数据库将如下所示:“DacCli -S myserver -E -D nw_restored -F northwind.bacpac -I”。但是,所需程序集的 codeplex 列表已过时 - 所有链接都不起作用,因此该工具无法运行(它对某些 SQL 2012 CTP 组件具有先决条件)。 我已经在我的机器上安装了所有组件,所以我尝试使用 DacCli 导入 bacpac - 它有效(请参阅我之前评论中的命令行)。 100MB bacpac 大约需要 20 分钟。【参考方案6】:

看来我的祈祷得到了回应。 Redgate 今天免费推出了他们的 SQL Azure 备份工具 - http://www.red-gate.com/products/dba/sql-azure-backup/download

【讨论】:

几个问题: 1. SQL Azure Backup 的积极开发暂时停止(运行最新版本的工具时显示此注释) 2. 直接从 Azure 备份到本地 SQL 时,它似乎没有通过 bacpac,而是实现了某种本土模式/数据副本。根据我的经验,它非常缓慢。 3. 建立在前一点的基础上,该机制是有缺陷的——我有多个表无法传输,因为该工具无法检测到唯一键 这个答案应该被更新,或者不再是被接受的答案。链接工具已成为“云”解决方案,不支持本地备份。 备份工具仍可从red-gate.com/products/dba/sql-azure-backup/Discontinued获得

以上是关于Azure SQL 数据库 Bacpac 本地还原的主要内容,如果未能解决你的问题,请参考以下文章

将 Azure bacpac 文件导入本地数据库时出错,在 EXTERNAL 附近出现错误语法

在 Azure 中创建加密的 bacpac 文件

尝试使用 powershell 从 Azure 还原数据库时,Octopus 部署找不到 SQL 凭据

即使选项在防火墙设置中设置为 yes,Azure SQL Server 防火墙也不允许操作连接

Azure sql 数据库导出到存储 blob 失败

从global到mooncake迁移SQL Azure