如何将SQL Azure数据库复制到本地开发服务器?


164

有谁知道如何将SQL Azure数据库复制到开发计算机?我想停止支付在云中拥有开发数据库的费用,但这是获取生产数据的最佳方法。我将生产数据库复制到新的开发数据库中,但我希望在本地拥有相同的数据库。

有什么建议?


2
我几乎总是用那个!它小巧,免费,可不断更新,不会安装任何不必要的文件,像超级按钮一样工作,不会在数据库中创建任何不需要的对象并且完全按照其名称所说。
astaykov

4
这变得非常容易。请参阅下面的Atom答案(2018年2月),解释如何在SSMS中使用Tasks => Deploy Database ....
乔恩·克罗威尔

Answers:


128

有多种方法可以做到这一点:

  1. 使用SSIS(SQL Server集成服务)。只进口data在您的表中。列属性,约束,键,索引,存储过程,触发器,安全设置,用户,登录等不被传输。但是,此过程非常简单,只需通过SQL Server Management Studio中的向导即可完成。
  2. 结合使用SSIS和DB创建脚本。这将为您获取数据以及SSIS未传输的所有丢失的元数据。这也很简单。首先使用SSIS传输数据(请参阅下面的说明),然后从SQL Azure数据库创建DB Create脚本,然后在本地数据库上重播它。
  3. 最后,您可以在SQL Azure中使用导入/导出服务。这会将数据(带有架构对象)作为BACPAC传输到Azure Blob存储。您将需要一个Azure存储帐户,并在Azure Web门户中执行此操作。选择要导出的数据库时,只需在Azure Web门户中按“导出”按钮一样简单。缺点是,这只是手动过程,我不知道通过工具或脚本自动执行此操作的方法-至少第一部分需要单击网页。

方法1(使用SSIS)的手动过程如下:

  • 在Sql Server Management Studio(SSMS)中,在本地SQL实例上创建新的空数据库。
  • 从上下文菜单中选择导入数据(右键单击数据库->任务->导入数据...)
  • 输入源的连接参数(SQL Azure)。选择“ .Sql Server的.Net Framework数据提供程序”作为提供程序。
  • 选择现有的空本地数据库作为目标。
  • 按照向导进行操作-您将能够选择要复制的表数据。您可以选择跳过任何不需要的表。例如,如果将应用程序日志保留在数据库中,则备份中可能不需要它。

您可以通过创建SSIS包并在需要重新导入数据的任何时间重新执行它来使其自动化。请注意,您只能使用SSIS导入到干净的数据库,一旦完成一次就不能对本地数据库进行增量更新。

方法2(SSID数据和架构对象)非常简单。首先执行上述步骤,然后创建数据库创建脚本(在SSMS中右键单击数据库,选择“生成脚本”->“数据库创建”)。然后在本地数据库上重新播放此脚本。

方法#3在以下博客中进行了描述:http : //dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/。有一个视频剪辑,其中包含将数据库内容作为BACPAC传输到Azure Blob存储的过程。之后,您可以在本地复制文件并将其导入到SQL实例。此处介绍了将BACPAC导入到Data-Tier应用程序的过程:http : //msdn.microsoft.com/en-us/library/hh710052.aspx


2
这行得通,只是一项更正。在“服务器导入/导出”向导中,数据源为“用于SqlServer的.Net Framework数据提供程序”
BZink 2011年

大!感谢您的指正。我记得其中一个提供者有效,而另一些提供者却不适合我,但没有确切记得哪个。
塞瓦·蒂托夫(Seva titov)2011年

对我而言失败:“无法将其插入只读列“ id””
dumbledad 2012年

3
我的诀窍是开始在空数据库上复制PK / FK /约束,然后在导入数据时暂时禁用约束。更准确地说:1-手动创建空的目标数据库。2-右键单击源数据库>任务>生成脚本。3在空的目标数据库上运行脚本文件(现在,数据库具有正确的PK / FK /约束,但没有数据)。4-禁用所有约束(stackoverflow.com/a/161410)。5-导入数据(右键单击目标DB>任务>导入数据)。6-重新启用约束。希望这可以帮助!
Mathieu Frenette 2014年

1
@JoSmo,方法#1和#2不需要存储帐户。但是,我建议与SQL Azure数据库在同一数据中心中拥有一个存储帐户。原因是您可以将其用于数据库备份和还原。如果您没有Azure订阅的管理权限,请在组织中查找具有足够权限来创建新存储帐户并为您提供访问密钥的人员。由于您已经可以访问数据库,因此没有理由拒绝访问存储帐户。
seva titov

66

将Azure数据库数据复制到本地数据库:现在,您可以使用SQL Server Management Studio进行以下操作:

  • 连接到SQL Azure数据库。
  • 在对象资源管理器中右键单击数据库。
  • 选择选项“任务” /“将数据库部署到SQL Azure”。
  • 在名为“部署设置”的步骤中,连接本地SQL Server并创建新数据库。

在此处输入图片说明

“下一个” /“下一个” /“完成”


9
太棒了👏🏻这在SSMS中不太清楚,因为“将数据库部署到SQL AZURE”有点误导性……
EeKay,

12
到目前为止,最简单的解决方案与迄今为止最具误导性的菜单名称混合在一起。感谢您发布此信息。
Kevin Giszewski

这是最简单的方法,但是缺点是您无法选择要备份的表和不需要的表。在我的公司中,我们有一个附件表,其中包含千兆字节的附件(图片等)。通常我们不希望这样做,因为它将永远被复制。我们不能使用这种方法排除该表。
Rosdi Kasim

33

我只想添加dumbledad答案的简化版本,因为它是正确的答案

  1. 将Azure SQL数据库导出到Blob存储上的BACPAC文件。
  2. 在SQL Management Studio内部,右键单击您的数据库,然后单击“导入数据层应用程序”。
  3. 系统将提示您输入信息,以获取Azure blob存储上的BACPAC文件。
  4. 再打几下,...完成!

4
我收到一条错误消息,说目标不能是sql azure v12?
Zapnologica

2
确保您具有导入该BACPAC的SSMS版本:msdn.microsoft.com/en-us/library/mt238290.aspx
Paul Bullivant

即使使用此版本的SSMS,由于目标Azure sql db 12,我仍然会收到错误
消息。– Preza8

28

在SQL Server 2016 Management Studio中,简化了将天蓝色数据库获取到本地计算机的过程。

右键单击要导入的数据库,单击任务>导出数据层应用程序,然后将数据库导出到本地.dacpac文件。

在本地目标SQL Server实例中,可以右键单击“ 数据库”>“导入数据层应用程序”,一旦它在本地,就可以执行备份和还原数据库之类的操作。


5
就是这个。注意 “导出数据层”包括数据,“提取数据层”仅提供定义
Colin

20

我认为现在要容易得多。

  1. 启动SQL Management Studio
  2. 右键单击“数据库”,然后选择“导入数据层应用程序...”
  3. 该向导将引导您完成连接到Azure帐户,创建BACPAC文件和创建数据库的过程。

另外,我使用Sql Backup和FTP(https://sqlbackupandftp.com/)每天备份到一个安全的FTP服务器。我只是从那里拉一个最近的BACPAC文件,然后将其导入到同一对话框中,这样可以更快,更轻松地创建本地数据库。


9

您还可以在Windows Azure管理门户中签出SQL Azure数据同步。它允许您检索和还原整个数据库,包括SQL Azure和SQL Server之间的架构和数据。


1
由于存在一些限制,因此不应将SQL Data Sync用作备份策略的一部分。它没有版本,仅备份数据,没有其他对象。有关更多信息,请参见SQL Data Sync FAQ主题。(msdn.microsoft.com/en-us/library/windowsazure/jj650016.aspx
肖恩Luttin

1
Data Sync非常糟糕-即使在今天(发布这篇文章后的数年),仍然存在大量错误,并且它确实可以破坏您的数据库-它还具有很多局限性。
威廉

5

很简单 这对我有用...就将Azure SQL数据库下载到本地计算机而言...:

  1. 打开您的SQL Management Studio并连接到Azure SQL Server。
  2. 选择您要进入本地计算机的数据库,然后右键单击...选择“生成脚本”。按照提示进行操作...

但是,请注意,如果您还想要数据和脚本,请确保在开始生成之前检查“高级选项...”,向下滚动到“脚本的数据类型”,并确保您拥有“架构和数据” ...或任何适合您的内容。

它将为您提供一个不错的SQL脚本文件,然后可以在本地计算机上运行该文件,它将创建数据库并使用所有数据填充该数据库。

谨记在我的情况下,我没有FK或其他限制...而且,它的数据也不多。

我一般不建议将此作为备用机制...


2
我必须说,这非常有效,没有大惊小怪。外键完美地重新创建。生成的SQL脚本太大,无法在SSMS中打开,或者实际上在许多文本编辑器中都无法打开,但是我能够使用命令行sqlcmd /S <server> /d <database> -E -i <azure_dump.sql>
重犯了

5

使用 msdeploy.exe

警告:msdeploy.exe无法自行创建目标数据库,因此您需要首先手动创建它。

  1. 在数据库属性页面上复制连接字符串。对其进行调整,使其包含正确的密码。 数据库属性页面
  2. 获取目标数据库的连接字符串。
  3. msdeploy.exe像这样运行:

    "c:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -dest:dbDacFx="destination_DB_connection_string",dropDestinationDatabase=true -source:dbDacFx="azure_DB_connection_string",includeData=true -verbose

使用 SqlPackage.exe

  1. 将天蓝色数据库导出到bacpac程序包。

    "c:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /a:Export /ssn:"azure_db_server" /sdn:"azure_db_name" /su:"user_name" /sp:"password" /tf:"file.bacpac"
  2. 将包导入到本地数据库。

    "c:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /a:Import /SourceFile:"file.bacpac" /TargetServerName:".\SQLEXPRESS" /TargetDatabaseName:CopyOfAzureDb


3

在SQL Server Management Studio中

右键单击要导入的数据库,单击任务>导出数据层应用程序,然后将数据库导出到本地.dacpac文件。

在本地目标SQL Server实例中,可以右键单击“数据库”>“导入数据层应用程序”,一旦它在本地,就可以执行备份和还原数据库之类的操作。


2

我收到错误“无法插入只读列“ id””错误,因此无法使SSIS导入/导出正常工作。我也无法使 http://sqlazuremw.codeplex.com/正常工作,并且上面指向SQL Azure Data Sync的链接对我不起作用。

但我发现了一篇有关BACPAC文件的出色博客文章:http ://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/

帖子中的视频中,博客帖子的作者执行六个步骤:

  1. 在Azure管理门户中创建或转到一个存储帐户。您将需要Blob URL和存储帐户的主访问密钥。

  2. 该博客文章建议为bacpac文件创建一个新容器,并建议为此使用Azure存储资源管理器。(注意,您需要Blob URL和存储帐户的主访问密钥才能将其添加到Azure Storage Explorer。)

  3. 在Azure管理门户中,选择要导出的数据库,然后在功能区的“导入和导出”部分中单击“导出”。

  4. 结果对话框将要求您提供数据库的用户名和密码,blob URL和访问密钥。不要忘记在blob URL中包含容器并包含文件名(例如 https://testazurestorage.blob.core.windows.net/dbbackups/mytable.bacpac)。

  5. 单击完成后,数据库将被导出到BACPAC文件。这可能需要一段时间。如果签入Azure存储资源管理器,则可能会立即显示零字节文件。这是导入/导出服务,用于检查它是否对blob存储具有写访问权。

  6. 完成此操作后,您可以使用Azure存储资源管理器下载BACPAC文件,然后在SQL Server Management Studio中右键单击本地服务器的数据库文件夹,然后选择“导入数据层应用程序”,该应用程序将启动向导,该向导将BACPAC文件读取到生成您的Azure数据库的副本。如果您不想先在本地复制BACPAC文件,该向导也可以直接连接到Blob存储。

最后一步可能仅在SQL Server Management Studio的SQL Server 2012版本(即我正在运行的版本)中可用。我在这台计算机上没有较早的版本要检查。在博客文章中,作者使用命令行工具DacImportExportCli.exe进行导入,我相信可以在http://sqldacexamples.codeplex.com/releases上找到该文件。


尽管我没有完全遵循此步骤,但它却将我引向正确的方向。您可以直接从SQL Server Management Studio内部跳过bacpac文件的下载并指向Azure Blob存储。
乔什·穆奇

2

关于“我无法获得SSIS导入/导出的功能,因为我收到错误信息“无法插入只读列“ id””,这可以通过在映射屏幕中指定要解决的方法来解决。允许插入身份元素。

之后,使用SQL导入/导出向导从Azure复制到本地数据库,一切工作正常。

我只有SQL Server 2008 R2附带的SQL导入/导出向导(工作正常)和Visual Studio 2012 Express可以创建本地数据库。




1

您可以使用新的Azure移动服务每晚执行一次从SQL Azure到Azure存储中托管的.bacpac文件的备份导出。此解决方案是100%的云,不需要第三方工具,也不需要本地托管的SQL Server实例来下载/复制/备份任何内容。

大约有8个不同的步骤,但它们都很容易:http : //geekswithblogs.net/BenBarreth/archive/2013/04/15/how-to-create-a-nightly-backup-of-your-sql-azure .aspx


这看起来真的很有希望!知道这是否适用于Azure联盟吗?
蒂姆·列汀

@蒂姆,对不起,我不知道。通过移动服务进行此操作是一个解决方法,因此,如果不这样做,我不会感到惊讶。
本·巴里斯

1

我一直使用导入/导出功能,这似乎是最简单的功能。

第1步:

如下所示从azure实例获取备份,选择数据库→右键单击→任务→导出数据层应用程序。

步骤2: 为备份文件指定一个特定的名称,并将其保存在所需的位置

步骤3:就这样,您已经将数据库从sql实例备份到本地。让我们将其还原到本地。将备份的数据库复制到C驱动器。现在,以管理员权限打开PowerShell,然后导航到C驱动器

步骤4:让我们下载Powershell脚本以删除主密钥RemoveMasterKey.ps1将脚本放在同一驱动器上,在本例中为C。

步骤5:运行脚本,如下所示:。\ RemoveMasterKey.ps1 -bacpacPath“ C:\ identity.bacpac”

就是这样,现在您可以在本地环境中的MSSQL 2017上还原它。

步骤6:连接到本地服务器,然后单击数据库→导入数据层应用程序

步骤7:为您的数据库命名,以进行还原。

现在您将看到绿色的一切!

阅读有关图表的博客



0

我的诀窍是开始在空数据库上复制PK / FK /约束,然后在导入数据时临时禁用约束(请参阅https://stackoverflow.com/a/161410)。

更确切地说:

  1. 手动创建空的目标数据库;
  2. 右键单击源数据库>任务>生成脚本;
  3. 在空的目标数据库上运行脚本文件(现在该数据库具有正确的PK / FK /约束,但没有数据);
  4. 禁用所有约束;
  5. 导入数据(右键单击目标数据库>任务>导入数据);
  6. 重新启用约束。

希望这可以帮助!


0

现在,您可以使用SQL Server Management Studio来执行此操作。

  • 连接到SQL Azure数据库。
  • 在对象资源管理器中右键单击数据库。
  • 选择选项“任务” /“将数据库部署到SQL Azure”。
  • 在名为“部署设置”的步骤中,选择本地数据库连接。
  • “下一个” /“下一个” /“完成” ...

我无法执行此操作,因为在选择另一个Azure数据库作为目标连接之前,“下一步”按钮呈灰色显示
Colin


0

如果有人在导入使用Azure SQL Sync的数据库的Bacpac时遇到问题,则Sandrino Di Mattia开发了一个非常简单的应用程序来解决此问题。

  1. 导出数据库的Bacpac
  2. 下载Di Mattia的二进制文件
  3. 使用此控制台应用程序修复下载的Bacpac
  4. Lauch SSMS
  5. 右键单击“数据库”,然后选择“导入数据层应用程序”
  6. 选择修复的Bacpac。

0

如果有人想要一个免费且有效的选项(并且不愿意手动执行)将数据库备份到本地,则可以使用最新版本的Microsoft Visual Studio 2015社区版(免费)或Professional / Premium / Ultimate中内置的架构和数据比较功能版。它就像一个魅力!

我在Azure拥有BizPark帐户,没有付款方法无法直接备份数据库。我在VS工作中发现了这个选项。

答案来自https://stackoverflow.com/a/685073/6796187


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.