【问题标题】:How do I copy SQL Azure database to my local development server?如何将 SQL Azure 数据库复制到本地开发服务器?
【发布时间】:2011-07-25 10:07:48
【问题描述】:

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

有什么建议吗?

【问题讨论】:

  • 这变得非常容易。请参阅下面的 Atom 回答(2018 年 2 月),说明如何在 SSMS 中使用 Tasks=>Deploy Database...

标签: sql-server azure azure-sql-database database-migration


【解决方案1】:

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

  1. 使用 SSIS(SQL Server 集成服务)。它只在您的表中导入data。不传输列属性、约束、键、索引、存储过程、触发器、安全设置、用户、登录等。然而,这是一个非常简单的过程,只需通过 SQL Server Management Studio 中的向导即可完成。
  2. 结合使用SSIS 和数据库创建脚本。这将为您提供 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) 的连接参数。选择“.Net Framework Data Provider for SqlServer”作为提供者。
  • 选择现有的空本地数据库作为目标。
  • 按照向导 - 您将能够选择要复制的表数据。您可以选择跳过任何不需要的表格。例如。如果您将应用程序日志保存在数据库中,您可能不需要在备份中使用它。

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

方法#2(SSID 数据加上模式对象)非常简单。首先执行上述步骤,然后创建 DB Creation 脚本(在 SSMS 中右键单击数据库,选择 Generate Scripts -> Database Create)。然后在本地数据库上重新播放此脚本。

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

【讨论】:

  • 这行得通,只是一个更正。在服务器导入/导出向导中,数据源是 '.Net Framework Data Provider for SqlServer'
  • 太棒了!谢谢指正。我记得其中一个提供者有效,而其他一些不适合我,但不记得具体是哪一个。
  • 我失败了:'插入只读列“id”失败'
  • 对我来说,诀窍是开始在空数据库上复制 PK/FK/约束,然后在导入数据时暂时禁用约束。更准确地说:1-手动创建空目标数据库。 2-右键单击源数据库 > 任务 > 生成脚本。 3-在空目标数据库上运行脚本文件(现在数据库有正确的 PK/FK/约束,但没有数据)。 4-禁用所有约束 (stackoverflow.com/a/161410)。 5-导入数据(右键单击目标数据库>任务>导入数据)。 6-重新启用约束。希望这会有所帮助!
  • @JoSmo,方法 #1 和 #2 不需要存储帐户。但是,我建议在与 SQL Azure 数据库相同的数据中心中拥有一个存储帐户。原因是您可以将其用于数据库备份和恢复。如果你没有 Azure 订阅的管理权限,请在你的组织中查找有权创建新存储帐户并为你提供访问密钥的人员。由于您已经有权访问数据库,因此没有理由拒绝访问存储帐户。
【解决方案2】:

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

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

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

【讨论】:

  • 真棒?? 这在 SSMS 中不是很清楚,因为“将数据库部署到 SQL AZURE”有点误导......
  • 迄今为止最简单的解决方案与迄今为止最具误导性的菜单名称混合在一起。感谢您发布此内容。
  • 这是最简单的,但缺点是您无法选择要备份的表和不需要的表。在我的公司,我们有一个附件表,其中包含千兆字节的附件(图片等)。通常我们不希望这样,因为它将永远被复制。我们无法使用此方法排除此表。
【解决方案3】:

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

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

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

【讨论】:

  • 就是这样。注意。 “导出数据层”包括数据,“提取数据层”只为您提供定义
  • 很棒,无缝...效果很好!
【解决方案4】:

我只是想添加一个简化版的dumbledad's answer,因为它是正确的。

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

【讨论】:

  • 我收到一条错误消息,说目标不能是 sql azure v12?
  • 确保您有一个可以导入 BACPAC 的 SSMS 版本:msdn.microsoft.com/en-us/library/mt238290.aspx
  • 即使使用此版本的 SSMS,由于目标 Azure sql db 12,我仍然会收到错误。
【解决方案5】:

我觉得现在容易多了。

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

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

【讨论】:

    【解决方案6】:

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

    【讨论】:

    • SQL 数据同步不应用作备份策略的一部分,因为存在一些限制。它没有版本,它只备份数据而不备份其他对象。有关详细信息,请参阅 SQL 数据同步常见问题解答主题。 (msdn.microsoft.com/en-us/library/windowsazure/jj650016.aspx)
    • 数据同步非常糟糕——即使在今天(这篇文章发布几年后)仍然存在大量错误,它真的会搞砸你的数据库——它仍然有很多限制。
    【解决方案7】:

    使用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. 将 azure DB 导出到 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
      

    【讨论】:

      【解决方案8】:

      这很容易。这对我有用...就将 Azure SQL 数据库下载到您的本地计算机而言...:

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

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

      它会给你一个很好的 SQL 脚本文件,然后可以在你的本地机器上运行,它会创建数据库并用所有数据填充它。

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

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

      【讨论】:

      • 我不得不说这非常好用,没有大惊小怪;完美地重新创建了外键。生成的 SQL 脚本太大而无法在 SSMS 或许多文本编辑器中打开,但我能够使用命令行 sqlcmd /S <server> /d <database> -E -i <azure_dump.sql>
      【解决方案9】:

      在 SQL Server Management Studio 中

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

      在您本地的目标 SQL 服务器实例中,您可以右键单击数据库 > 导入数据层应用程序,一旦它在本地,您就可以执行备份和恢复数据库等操作。

      【讨论】:

        【解决方案10】:

        我无法让 SSIS 导入/导出工作,因为我收到错误“插入只读列“id”失败”。我也无法让http://sqlazuremw.codeplex.com/ 工作,并且上面指向 SQL Azure 数据同步的链接对我不起作用。

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

        the video in the post博文的作者经历了六个步骤:

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

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

        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 数据库的副本。巫师 也可以直接连接到blob-store获取BACPAC 如果您不想先在本地复制文件,请先将其复制到本地。

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

        【讨论】:

        • 虽然我没有完全遵循这一点,但它引导我朝着正确的方向前进。您可以跳过 bacpac 文件的下载,直接从 SQL Server Management Studio 中指向 Azure Blob 存储。
        【解决方案11】:

        关于“我无法让 SSIS 导入/导出工作,因为我收到错误“插入只读列“id”失败”。 这可以通过在映射屏幕中指定您确实希望允许插入标识元素来解决。

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

        我只有 SQL Server 2008 R2 附带的 SQL 导入/导出向导(运行良好)和 Visual Studio 2012 Express 来创建本地数据库。

        【讨论】:

          【解决方案12】:

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

          更多详细信息请看这篇文章: Restoring Azure SQL Database to a Local Server

          【讨论】:

            【解决方案13】:

            您可以尝试使用“SQL 数据库迁移向导”工具。 此工具提供从 azure sql 导入和导出数据的选项。

            请在此处查看更多详细信息。

            https://sqlazuremw.codeplex.com/

            【讨论】:

              【解决方案14】:

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

              第 1 步:

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

              第 2 步: 为备份文件指定一个特定名称并将其保存在您想要的位置

              第 3 步: 至此,您已将数据库从 sql 实例备份到本地。让我们将其还原到本地。将备份的数据库复制到 C 盘。现在以管理员权限打开 PowerShell 并导航到 C 盘

              第 4 步:让我们下载 powershell 脚本以删除主控 keyRemoveMasterKey.ps1 将脚本放在同一驱动器上,在本例中为 C。

              第 5 步: 运行脚本如下, .\RemoveMasterKey.ps1 -bacpacPath "C:\identity.bacpac"

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

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

              第 7 步:为要恢复的数据库命名。

              现在你会看到一切都是绿色的!

              阅读我的 blog 图表。

              【讨论】:

              • 您的 powershell 链接不再有效...只是好奇它应该做什么?
              【解决方案15】:

              您可以使用新的 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 联合?
              • @Tim 抱歉,我不知道。通过移动服务执行此操作是一种解决方法,因此如果不这样做,我不会感到惊讶。
              【解决方案16】:

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

              【讨论】:

              【解决方案17】:

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

              更准确地说:

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

              希望这会有所帮助!

              【讨论】:

                【解决方案18】:

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

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

                【讨论】:

                • 我无法执行此操作,因为在我选择另一个 Azure 数据库作为目标连接之前,“下一步”按钮是灰色的
                【解决方案19】:

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

                然后在另一篇 Stack Overflow 文章中看看这个方法。

                Azure SQL Database Bacpac Local Restore

                【讨论】:

                  【解决方案20】:

                  如果有人在导入使用 Azure SQL Sync 的数据库的 Bacpac 时遇到问题,Sandrino Di Mattia 开发了一个great simple application 来解决这个问题。

                  1. 导出数据库的 Bacpac
                  2. 下载 Di Mattia 的binary
                  3. 使用此控制台应用程序修复下载的 Bacpac
                  4. 启动 SSMS
                  5. 右键单击“数据库”并选择“导入数据层应用程序”
                  6. 选择修复后的 Bacpac。

                  【讨论】:

                    【解决方案21】:

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

                    我有 Azure 的 BizPark 帐户,没有办法直接备份数据库而不付费。我在 VS 中发现了这个选项。

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

                    【讨论】:

                      【解决方案22】:

                      您好,我正在使用 SQLAzureMW 工具进行 SQLAzure DB 迁移和管理。非常有用的一个。它是从 codeplex 下载的,但目前它不可用,codeplex 将关闭,相同的应用程序工具现在在 GttHub 中可用。下面这个链接解释了如何使用这个工具,也可以下载应用程序。

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

                      【讨论】:

                        猜你喜欢
                        • 2015-09-16
                        • 2022-01-24
                        • 1970-01-01
                        • 2021-08-19
                        • 2021-11-16
                        • 1970-01-01
                        • 2017-11-14
                        • 1970-01-01
                        • 2023-04-05
                        相关资源
                        最近更新 更多