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

229

有人知道我如何将 SQL Azure 数据库复制到我的开发机器吗?我希望停止支付云端开发数据库的费用,但这是获取生产数据的最佳方式。我将生产数据库复制到新的开发数据库,但我希望本地有同样的数据库。

有任何建议吗?


8
这变得极为简单。请看下面的Atom回答(2018年2月),解释如何在SSMS中使用“任务=>部署数据库…”。 - Jon Crowell
24个回答

2

看起来在2022版的管理工作室中缺少了这个功能。以下是我使用Azure Data Studio的方法:

  1. 安装Azure Data Studio
  2. 打开Azure Data Studio
  3. 安装名为Admin Pack for SQL Server的扩展程序
  4. 重新启动Azure Data Studio
  5. 为源数据库(Azure)和目标数据库(本地计算机)设置连接
  6. 在主数据库上执行语句,即在本地DB引擎上执行:
sp_configure 'contained database authentication', 1; 
GO  
RECONFIGURE;
GO
  1. 右键单击源数据库,选择数据层应用程序向导 选择导出为.bacpac文件[导出bacpac](在我的当前版本中是第四个、最后一个选项)
  2. 完成向导
  3. 右键单击目标数据库,选择数据层应用程序向导
  4. 选择从.bacpac导入[导入bacpac](在我的版本中是第三个选项)
  5. 选择先前创建的.bacpac文件并完成向导

导入后,登录和用户将被创建,但它们的默认模式未设置。如果需要默认模式,则需要手动处理。在这种情况下: 打开本地副本的管理员连接并运行: USE [imported-db]; ALTER USER imported-user WITH DEFAULT_SCHEMA = whatever;


我必须将命令 sp_configure 'contained database authentication', 1; GO; RECONFIGURE; GO; 放在不同的行上。 - DLT

2

2
你可以尝试使用“SQL数据库迁移向导”工具。 该工具提供了从Azure SQL导入和导出数据的选项。 请在此处查看更多详细信息。 https://sqlazuremw.codeplex.com/

2
关于“我无法使SSIS导入/导出工作,因为我遇到了错误'无法将值插入只读列“id”'”。您可以通过在映射屏幕中指定要允许插入标识元素来解决这个问题。
之后,使用SQL导入/导出向导从Azure复制到本地数据库时,一切都正常工作。
我只有SQL Server 2008 R2自带的SQL导入/导出向导(运行良好),以及Visual Studio 2012 Express用于创建本地数据库。

2
我无法让SSIS导入/导出工作,因为我收到了“将数据插入只读列“id”失败”的错误。我也无法让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 存储资源管理器。)

  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 管理工具中右键单击本地服务器的数据库文件夹并选择“导入数据层应用程序”,该向导将读取 BACPAC 文件以生产 Azure 数据库的副本。如果您不想先将其复制到本地,则向导还可以直接连接到 blob 存储获取 BACPAC 文件。

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

虽然我没有完全按照这个做,但它引导了我朝着正确的方向。您可以跳过下载bacpac文件,并直接从SQL Server Management Studio内部指向Azure Blob存储。 - Josh Mouch

2
我通常使用最简单的Import/Export功能进行操作。 步骤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链接已经失效了...只是好奇它应该做什么? - pcnate

1

这看起来非常有前途!不知道它是否能与Azure联邦一起使用? - Tim Lentine
@Tim 抱歉,我不知道。通过移动服务来完成这个操作本来就是一个变通方法,所以如果它不能正常工作,我也不会感到惊讶。 - Ben Barreth

0

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


这是一个指向内部工具的链接。假设 OP 想要链接到已经下线的 Red Gate 工具 (http://www.red-gate.com/products/dba/sql-azure-backup/) 或者 CodePlex 上的这个项目 (http://sqlazurebackup.codeplex.com/)。 - Josh

0

如果有人想要免费且有效的选项(并且不介意手动操作),备份数据库到本地,那么可以使用最新版本的 Microsoft Visual Studio 2015 Community Edition(免费)或Professional / Premium / Ultimate版内置的模式和数据比较功能。它很好用!

我在Azure上有BizPark帐户,并且没有直接备份数据库的方法,除非付费。我发现VS中的这个选项很有用。

答案取自https://dev59.com/03RB5IYBdhLWcg3wN1AQ#685073


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接