202

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

有什么建议么?

4

22 回答 22

140

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

  1. 使用 SSIS(SQL Server 集成服务)。它只data在您的表中导入。不传输列属性、约束、键、索引、存储过程、触发器、安全设置、用户、登录等。然而,这是一个非常简单的过程,只需通过 SQL Server Management Studio 中的向导即可完成。
  2. 使用SSIS 和 DB 创建脚本的组合。这将为您提供 SSIS 未传输的数据和所有丢失的元数据。这也很简单。首先使用 SSIS 传输数据(请参阅下面的说明),然后从 SQL Azure 数据库创建 DB Create 脚本,并在本地数据库上重新播放。
  3. 最后,您可以在 SQL Azure 中使用 Import/Export 服务。这会将数据(带有架构对象)作为 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 导入数据层应用程序的过程:http: //msdn.microsoft.com/en-us/library/hh710052.aspx

于 2011-03-30T02:11:50.803 回答
117

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

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

在此处输入图像描述

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

于 2018-02-05T07:22:19.383 回答
46

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

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

在您的本地目标 SQL 服务器实例中,您可以右键单击Databases > Import data-tier application,一旦它在本地,您就可以执行诸如备份和恢复数据库之类的操作。

于 2016-10-25T19:00:30.623 回答
37

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

  1. 将 Azure SQL 数据库导出到 Blob 存储上的 BACPAC 文件。
  2. 在 SQL Management Studio 中,右键单击您的数据库,单击“导入数据层应用程序”。
  3. 系统将提示你输入信息以访问 Azure blob 存储上的 BACPAC 文件。
  4. 打下几次然后......完成!
于 2013-05-15T10:59:57.113 回答
22

我认为现在容易多了。

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

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

于 2015-08-28T22:56:15.553 回答
9

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

于 2011-04-05T16:26:33.520 回答
6

使用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
    
于 2014-04-09T00:02:01.620 回答
5

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

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

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

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

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

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

于 2016-05-23T13:52:46.903 回答
5

在 SQL Server 管理工作室中

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

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

于 2019-07-03T05:32:25.010 回答
2

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

但我发现了一篇关于 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 Management Studio 中右键单击本地服务器的数据库文件夹并选择导入数据层应用程序,该应用程序将启动读取 BACPAC 文件的向导以生成 Azure 数据库的副本。如果您不想先将 BACPAC 文件复制到本地,该向导还可以直接连接到 blob-store 以获取 BACPAC 文件。

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

于 2012-06-26T16:42:25.910 回答
2

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

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

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

于 2012-09-21T18:01:38.363 回答
2

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

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

于 2015-02-08T04:05:23.663 回答
2

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

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

https://sqlazuremw.codeplex.com/

于 2016-10-22T06:48:05.610 回答
2

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

第1步:

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

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

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

第 4 步:让我们下载 powershell 脚本以删除主密钥RemoveMasterKey.ps1将脚本放在同一个驱动器上,在这种情况下为 C。

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

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

第 6 步:连接到本地服务器,然后单击 Databases → Import-Data-Tier-Application

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

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

阅读我的带有图表的博客。

于 2018-04-05T18:21:06.730 回答
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

于 2013-05-06T13:27:58.260 回答
0

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

于 2011-08-29T16:03:44.060 回答
0

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

更确切地说:

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

希望这可以帮助!

于 2014-05-26T22:25:28.093 回答
0

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

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

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

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

Azure SQL 数据库 Bacpac 本地还原

于 2014-06-27T11:49:17.437 回答
0

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

  1. 导出数据库的 Bacpac
  2. 下载 Di Mattia 的二进制文件
  3. 使用此控制台应用程序修复下载的 Bacpac
  4. 启动 SSMS
  5. 右键单击“数据库”并选择“导入数据层应用程序”
  6. 选择修复后的 Bacpac。
于 2015-09-17T09:46:43.203 回答
0

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

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

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

于 2017-04-05T00:13:18.387 回答
0

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

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

于 2017-10-05T10:59:24.477 回答