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

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

有什么建议吗?

135049 次浏览

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

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

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

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

您可以通过创建SSIS包并在任何您想重新导入数据的时候重新执行它来实现自动化。请注意,您只能使用SSIS导入到一个干净的DB中,如果您已经对本地数据库进行了一次增量更新,则不能再对其进行增量更新。

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

方法# 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

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

下载Optillect SQL Azure备份 -它有15天的试用期,所以它足以移动你的数据库:)

我无法让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和存储的主访问键 帐户。李< / p > < / > 这篇博文建议为bacpac文件创建一个新的容器 建议使用Azure存储 Explorer。(注意: 您需要Blob URL和存储的主访问键 (/p>

  2. .
  3. 在Azure管理门户中选择所需的数据库 的导入和导出部分中单击“导出” 丝带。李< / p > < / >

  4. 生成的对话框需要您的用户名和密码 数据库、blob URL和访问键。别忘了写 在blob URL中的容器,并包含一个文件名(例如。 李https://testazurestorage.blob.core.windows.net/dbbackups/mytable.bacpac)。< / p > < / >

  5. 单击Finish后,数据库将被导出到BACPAC 文件。这可能需要一段时间。您可能会看到一个零字节的文件 如果您在Azure存储资源管理器中进行了检查,将立即执行。这是 导入/导出服务检查它是否具有对 blob-store。李< / p > < / > 完成后,您可以使用Azure存储资源管理器进行下载 BACPAC文件,然后在SQL Server Management Studio 右键单击本地服务器的数据库文件夹并选择Import 数据层应用程序,该应用程序将启动读取 BACPAC文件来生成Azure数据库的副本。向导 也可以直接连接到blob-store来获取BACPAC

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

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

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

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

您可以使用新的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 < / p >

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

  1. 将Azure SQL数据库导出到blob存储上的BACPAC文件。
  2. 在SQL Management studio中,右键单击数据库,单击“导入数据层应用程序”。
  3. 系统将提示您输入信息以获取Azure blob存储上的BACPAC文件。
  4. 点击next几次,然后…完成了!

使用msdeploy.exe

警告:msdeploy.exe不能自己创建目标数据库,所以你需要先手动创建它。

  1. 复制数据库属性页上的连接字符串。调整它,使其包含正确的密码。 数据库属性页
  2. 获取目标DB的连接字符串。
  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
    

Using SqlPackage.exe

  1. Export the azure DB to a bacpac package.

    "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. Import the package to a local DB.

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

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

更准确地说应该是:

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

希望这能有所帮助!

现在您可以使用SQL Server Management Studio来完成这项工作。

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

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

然后在另一篇Stack Overflow文章中查看此方法。

Azure SQL Database Bacpac Local Restore . sh

公认的答案已经过时了。我找到了一个更好的答案:使用导入数据层应用程序

更多详细信息请参阅本文: 恢复Azure SQL数据库到本地服务器 < / p >

我觉得现在容易多了。

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

此外,我使用Sql备份和FTP (https://sqlbackupandftp.com/)做每日备份到一个安全的FTP服务器。我只是从那里取出一个最近的BACPAC文件,然后在同一个对话框中导入它,这样创建本地数据库就更快更容易了。

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

  1. 导出您的数据库的Bacpac
  2. 下载Di Mattia的二进制
  3. 用这个控制台应用程序修复下载的Bacpac
  4. 开展地对地导弹
  5. 右键单击“数据库”,选择“导入数据层应用程序”
  6. 选择修复后的Bacpac。

这很简单。这对我很管用……在获取Azure SQL数据库到本地机器方面…

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

但是,要注意的是,如果你也想要数据,以及脚本,一定要检查高级选项在开始生成…向下滚动到“脚本的数据类型”,并确保你有“模式和数据”…或者任何适合你的。

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

请记住,在我的情况下,我没有FK或其他约束…而且,数据也不多。

一般来说,我不建议将此作为备份机制……

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

详情请点击这里。

https://sqlazuremw.codeplex.com/

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

右键单击要导入的数据库,单击>导出数据层应用,并将数据库导出到本地的.dacpac文件。

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

如果有人想要一个免费有效的选项(也不介意手动操作)来将数据库备份到本地,那么可以使用最新版本Microsoft Visual Studio 2015社区版(免费)或专业/高级/终极版中内置的模式和数据比较功能。它像魔法一样有效!

我有BizPark帐户与Azure,没有办法直接备份数据库没有支付。我发现这个选项在VS工作。

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

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

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

将Azure数据库数据复制到本地数据库: 现在,您可以使用SQL Server Management Studio来执行以下操作
  • 连接到SQL Azure数据库。
  • 在对象资源管理器中右键单击数据库。
  • 选择“任务”/“部署数据库到SQL Azure”选项。
  • 在“部署设置”步骤中,连接本地SQL Server并创建新数据库。

enter image description here

"Next" / "Next" / "Finish"

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

步骤1:

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

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

步骤3:这就是你已经从sql实例到你的本地进行了数据库备份。让我们将其恢复到本地。将备份的数据库复制到C盘。现在用管理员权限打开PowerShell并导航到C驱动器

步骤4:让我们下载powershell脚本来删除主驱动器keyRemoveMasterKey.ps1,在这种情况下,脚本位于同一驱动器上。

第五步:执行如下脚本, \ RemoveMasterKey。ps1 -bacpacPath "C:\identity.bacpac"

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

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

步骤7:为要恢复的数据库指定一个名称。

现在你会看到所有的东西都变成绿色了!

用图表阅读我的blog

在SQL Server Management Studio

右键单击要导入的数据库,单击Tasks > Export data-tier application,然后将数据库导出到本地的.dacpac文件。

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

使用SSMS v18.9+,您可以使用Deploy Database to Microsoft Azure SQL Database. xml

这并不是很直观,但是向导允许你选择本地db,即使任务的名称是Deploy Database to Microsoft Azure SQL Database

  1. 使用SSMS连接到Azure数据库
  2. 右键单击数据库,选择Tasks > Deploy Database to Microsoft Azure SQL Database。 李enter image description here < / >
  3. 选择本地SQL server作为目标连接。 李enter image description here < / >
  4. 按照其他步骤操作。

看来2022年的Management Studio缺少功能了。下面是我如何使用Azure Data Studio来做到这一点:

  1. 安装Azure Data Studio
  2. Open 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. 右键单击源数据库并选择Data-tier Application wizard 选择导出到。bacpac文件[导出bacpac](第4个,我当前版本的最后一个选项)
  2. 完成向导
  3. 右键单击目标数据库并选择数据层应用程序 李Wizzard < / >
  4. 选择Import from .bacpac [Import bacpac](我的版本中的第三个选项)
  5. 选择先前创建的.bacpac文件并完成向导

导入后创建了登录名和用户,但没有设置默认模式。如果需要默认的shcema,则需要手动处理。在这种情况下: 打开到本地副本的管理连接并运行: USE [imported-db]; ALTER USER imported-user WITH DEFAULT_SCHEMA = whatever; < / p >