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

How do I copy SQL Azure database to my local development server?

有人知道我如何将SQL Azure数据库复制到我的开发机器上吗?我想停止花钱在云中建立一个开发数据库,但这是获取生产数据的最佳方法。我将我的生产数据库复制到一个新的开发数据库,但我希望在本地拥有相同的数据库。

有什么建议吗?


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

  • 使用SSIS(SQL Server集成服务)。它只在您的表中导入data。不传输列属性、约束、键、索引、存储过程、触发器、安全设置、用户、登录等。但是,这是一个非常简单的过程,可以通过在SQL Server Management Studio中执行向导来完成。
  • 使用ssis和db创建脚本的组合。这将为您提供数据以及所有不由SSIS传输的丢失元数据。这也很简单。首先使用ssis传输数据(请参阅下面的说明),然后从SQL Azure数据库创建db create脚本,然后在本地数据库上重新播放它。
  • 最后,您可以在SQLAzure中使用导入/导出服务。这会将数据(带有模式对象)作为bacpac传输到Azure Blob存储。您将需要一个Azure存储帐户,并在Azure Web门户中执行此操作。这与选择要导出的数据库时在Azure Web门户中按"导出"按钮一样简单。缺点是它只是手动过程,我不知道如何通过工具或脚本实现自动化——至少第一部分需要单击网页。
  • 方法1(使用SSIS)的手动程序如下:

    • 在SQL Server Management Studio(SSMS)中,在本地SQL实例上创建新的空数据库。
    • 从上下文菜单中选择导入数据(右键单击数据库->任务->导入数据…)
    • 键入源(SQL Azure)的连接参数。选择".net framework data provider for sqlserver"作为提供程序。
    • 选择现有的空本地数据库作为目标。
    • 按照向导操作--您将能够选择要复制的表数据。您可以选择跳过任何不需要的表。例如,如果将应用程序日志保存在数据库中,那么备份时可能不需要它。

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

    方法2(ssid数据加上模式对象)非常简单。首先执行上述步骤,然后创建数据库创建脚本(righ单击SSMS中的数据库,选择生成脚本->数据库创建)。然后在本地数据库上重新播放此脚本。

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


    我只想添加邓布利达答案的简化版本,因为它是正确的。

  • 将Azure SQL数据库导出到Blob存储上的bacpac文件。
  • 在SQL Management Studio中,右键单击数据库,单击"导入数据层应用程序"。
  • 系统将提示您输入信息以访问您的Azure Blob存储区上的bacpac文件。
  • 再打几下…完成!

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

    • 连接到SQL Azure数据库。
    • 右键单击对象资源管理器中的数据库。
    • 选择"tasks"/"deploy database to sql azure"选项。
    • 在名为"部署设置"的步骤中,连接本地SQL Server并创建新数据库。

    enter image description here

    "下一个"/"下一个"/"完成"


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

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

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


    我觉得现在容易多了。

  • 启动SQL Management Studio
  • 右键单击"数据库",然后选择"导入数据层应用程序…"
  • 向导将引导您完成连接到您的Azure帐户、创建bacpac文件和创建数据库的过程。
  • 另外,我使用SQL备份和ftp(https://sqlbackupandftp.com/)每天备份到安全的ftp服务器。我只需从那里提取一个最新的bacpac文件,并将其导入到同一个对话框中,这样就可以更快、更容易地创建本地数据库。


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


    这很容易。这对我很有用……就把一个Azure SQL数据库放到您的本地计算机上而言……:

  • 打开SQL Management Studio并连接到您的Azure SQL Server。
  • 选择要下载到本地计算机上的数据库,然后右键单击…选择"生成脚本"。按照提示操作…
  • 但是,如果您还需要数据和脚本,请务必在开始生成之前检查高级选项…向下滚动到"要编写脚本的数据类型",并确保您有"模式和数据"…或适合您的任何内容。

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

    在我的例子中,我没有fk或其他约束……而且,它没有很多数据。

    我不建议将此作为一般的备份机制…


    使用msdeploy.exe

    注意:msdeploy.exe无法单独创建目标数据库,因此需要先手动创建。

  • 复制"数据库属性"页上的连接字符串。调整它,使其包含正确的密码。database properties page
  • 获取目标数据库的连接字符串。
  • 运行msdeploy.exe如下:

    1
    "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

  • 将Azure DB导出到bacpac包。

    1
    "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"
  • 将包导入本地数据库。

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

  • 请尝试以下操作:http://mooneyblog.mmdbsolutions.com/index.php/2011/01/11/simple database backups with sql azure/。

    另一种选择是SQL Azure数据同步。

    几天前我又浏览了一篇博文,但现在找不到了。我一找到这篇文章就更新。


    无法使SSIS导入/导出工作,因为出现了"插入只读列"id"失败"错误。我也不能让http://sqlazuremw.codeplex.com/工作,上面的链接到SQL Azure数据同步也不适用于我。

    但是我发现了一篇关于bacpac文件的优秀博客文章:http://dacky.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/

    在帖子中的视频中,博客作者经历了六个步骤:

  • 创建或转到Azure管理门户中的存储帐户。您需要Blob URL和存储的主访问密钥帐户。

  • 博客建议为bacpac文件制作一个新的容器,并建议使用Azure存储探险家。(N.B.您需要Blob URL和存储的主访问密钥用于将其添加到Azure存储资源管理器的帐户。)

  • 在Azure管理门户中选择要使用的数据库导出并单击的"导入和导出"部分中的"导出"丝带。

  • 结果对话框需要您的用户名和密码数据库、Blob URL和访问键。别忘了包括blob url中的容器并包含文件名(例如https://testazurestorage.blob.core.windows.net/dbbackups/mytable.bacpac)。

  • 单击"完成"后,数据库将导出到bacpac文件。这可能需要一段时间。您可能会看到一个零字节的文件出现如果您签入Azure存储资源管理器,请立即执行。这就是导入/导出服务检查它是否具有对博客商店。

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

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


    关于"我无法让SSIS导入/导出工作,因为我收到错误"无法插入只读列"id"。"这可以通过在映射屏幕中指定您希望插入标识元素来绕过。

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

    我只有随SQL Server 2008 R2(工作正常)和Visual Studio 2012 Express一起提供的SQL导入/导出向导来创建本地数据库。


    接受的答案已过期。我找到了一个更好的答案:使用导入数据层应用程序

    更多详细信息,请参阅本文:将Azure SQL数据库还原到本地服务器


    您可以使用工具"SQL数据库迁移向导"进行尝试。此工具提供从Azure SQL导入和导出数据的选项。

    请在这里查看更多详细信息。

    https://sqlazuremw.codeplex.com网站/


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

    步骤1:

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

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

    步骤3:就是这样,您已经将数据库从SQL实例备份到本地。让我们把它恢复到本地。将备份的数据库复制到C驱动器。现在打开具有管理员权限的PowerShell并导航到C驱动器

    步骤4:让我们下载PowerShell脚本以删除主密钥removeMasterKey。PS1将脚本放在同一个驱动器上,在本例中是它的C。

    第五步:运行脚本如下:.
    emovemasterkey.ps1-bacpachath"c:identity.bacpac"

    就是这样,现在您可以在您的本地环境中在MSSQL2017上恢复它。

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

    步骤7:为要还原的数据库提供一个名称。

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

    用图表阅读我的博客。


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

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


    下载OptiCollect SQL Azure备份-它有15天的试用期,因此足以移动您的数据库:)


    使用SQL Azure中的导入/导出服务创建.bacpac文件。

    然后在另一篇堆栈溢出文章中查看此方法。

    Azure SQL数据库bacpac本地还原


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

    • 连接到SQL Azure数据库。
    • 右键单击对象资源管理器中的数据库。
    • 选择"tasks"/"deploy database to sql azure"选项。
    • 在名为"部署设置"的步骤中,选择本地数据库连接。
    • "下一个"/"下一个"/"完成"…


    如果有人在导入使用AzureSQL同步的数据库的bacpac时遇到问题,Sandrino di Mattia开发了一个非常简单的应用程序来解决这个问题。

  • 导出数据库的bacpac
  • Dowload di Mattia的二进制
  • 使用此控制台应用程序修复下载的bacpac
  • 劳氏SSMS
  • 右键单击"数据库",然后选择"导入数据层应用程序"
  • 选择已修复的BACPAC。

  • 如果有人想要一个免费且有效的选项(不介意手动执行)将数据库备份到本地,那么请使用最新版本的Microsoft Visual Studio 2015社区版(免费)或专业版/高级版/终极版内置的架构和数据比较功能。它真是魅力四射!

    我在Azure有BizPark帐户,如果不付费,就无法直接备份数据库。我在vs works中找到了这个选项。

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


    嗨,我正在使用sqlazuremw工具进行sqlazare数据库迁移和管理。非常有用。它是从codeplex下载的,但目前它不可用。codeplex将关闭,相同的应用程序工具现在在gtthub中可用。下面的链接将解释如何使用此工具,并提供下载应用程序。

    https://github.com/twright-msft/azure-content/blob/master/articles/sql-database/sql-database-migration-wizard.md


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

    更确切地说:

  • 手动创建空目标数据库;
  • 右键单击源数据库>任务>生成脚本;
  • 在空目标数据库上运行脚本文件(现在数据库具有正确的pks/fks/约束,但没有数据);
  • 禁用所有约束;
  • 导入数据(右键单击目标数据库>任务>导入数据);
  • 重新启用约束。
  • 希望这有帮助!