Azure SQL数据库Bacpac本地还原


130

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

将其下载到我的计算机后,我对如何将其还原到本地SQL Server实例有些困惑。我遇到了DacImportExportCli工具,但找不到本地还原的示例。

同样,如果有人编写了执行此操作的脚本(这样就可以安排它了),那就太好了。


8
这可能是SQL Server 2012,但在SQL Server Management Studio中,如果我右键单击本地服务器的数据库文件夹并选择“导入数据层应用程序”,该应用程序将启动一个向导,该向导读取BACPAC文件以生成Azure数据库的副本。如果您不想先在本地复制BACPAC文件,该向导也可以直接连接到Blob存储。
dumbledad

你有没有想通这个?
Nate 2012年

3
@dumbledad我认为导入数据层应用程序是SQL 2012 SSMS,2008R2似乎只具有导出DACPAC的功能,看不到导入选项。
jamiebarrow

Answers:


179

只需通过SQL Server Management Studio 2012即可完成

  1. 右键单击“ 连接”>“数据库”节点,然后选择“ 导入数据层应用程序...
  2. 在介绍步骤中选择“ 下一步 ”。
  3. 在此处输入图片说明
  4. 浏览或连接到保存备份的存储帐户。

2
太棒了。RedGate工具可以是flakey。我很高兴看到MS支持的选项。
gilly3

2
它适用于sql express 2012吗?因为我有以下错误消息:计数不从程序包加载架构模型。(Microsoft.SqlServer.Dac)------------------------------其他信息:内部错误。内部目标平台类型SqlAzureDatabaseSchemaProvider不支持架构文件版本“ 2.5”。(文件:C:\ Users \ xxxxx \ Downloads \ dbname-2013-10-10-20-2.bacpac)(Microsoft.Data.Tools.Schema.Sql)
Antoine Meltzheim 2013年

@ElTone我刚刚使用Management Studio将bacpac直接从Azure存储还原到了本地SQL Server Express 2012数据库。没有看到任何错误,数据似乎在那里。有人提到,在安装新的SQL Server数据工具的版本帮助他们(但他们不是指Management Studio中)social.msdn.microsoft.com/Forums/windowsazure/en-US/...
尤哈Palomäki

@JuhaPalomäki正确:安装最新版本的SSDT解决了此问题。现在一切都好了。
Antoine Meltzheim

4
使用Management Studio可以导入多少个bacpac文件似乎有些限制。如果你打的内存溢出的异常,检查旧货的关于如何使用命令行工具SqlPackage.exe答案
尤哈Palomäki

52

我需要导出一个SQL Azure数据库,然后将其导入到本地SQL 2008 R2服务器中(请注意,我也在使用Visual Studio 2010)。微软当然会竭尽全力使这项任务很痛苦,但是,我能够做到以下几点:

  1. 转到此链接http://msdn.microsoft.com/zh-cn/jj650014并安装用于Visual Studio 2010的SQL Server数据工具

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

  3. 通过命令行或Powershell浏览到此

  4. 您将要执行SqlPackage.exe

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

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

    。\ SqlPackage.exe / a:导入/sf:C:\mydatabasefile.bacpac / tdn:NorthWind / tsn:BINGBONG

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

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


如果安装了SSMS 2012,则可以更轻松地完成此操作。您甚至可以使用上述@Josiah所述的向导,即使是使用2008 R2服务器也是如此。
DanO 2014年

2
我花了很多时间寻找这个解决方案,以至于我同时下载了整个management studio 2014。
桑索斯2014年

SqlPackage挂了我的“更新数据库”步骤,直到我完全放弃了目标数据库
michael_hook

10

您可以使用客户端工具还原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组件上具有先决条件)。
David Airapetyan 2012年

我已经在计算机上安装了所有组件,因此我尝试使用DacCli导入bacpac-它起作用了(请参阅我先前的评论中的命令行)。100 MB bacpac大约需要20分钟。
David Airapetyan 2012年

7

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


几个问题:1. SQL Azure Backup的主动开发暂时停止(运行该工具的最新版本时会显示此注释)2.直接从Azure备份到本地SQL时,它似乎并没有通过bacpac,而是实现某种本地模式/数据副本。根据我的经验,它的速度非常慢。3.要建立在以前的点,其机制是越野车-我有多个表未转移,因为该工具无法检测到的唯一键
大卫Airapetyan

2
该答案应被更新,或者不再是被接受的答案。此后,链接的工具已成为“云”解决方案,并且不支持本地备份。
蒂莫西·斯特鲁普


5

如果您使用的是SSMS 2012,只需在对象资源管理器中的服务器下的“数据库”文件夹上单击鼠标右键,然后选择“导入数据层应用程序...”,就很容易。

有一点需要注意:从2013年3月26日起(当我需要自己了解如何做的时候),当您从Azure导出.bacpac时,它将以.zip文件下载,而不是 .bacpac文件,并且导入向导中的“浏览”按钮打开的文件对话框将仅显示* .bacpac或在文件过滤器中,表示不支持.zip。但是,如果将过滤器更改为,选择下载的.zip,然后单击“下一步”,向导将正常进行。


2
这是正确的答案。现在,您可以安装SSMS 2016的免费独立版本,它提供所有这些功能
Aaron

3

这是一个可一次还原一堆bacpac文件的脚本: 批量还原本地bacpac文件

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] }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.