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

时间:2011-03-29 15:49:25

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

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

有什么建议吗?

23 个答案:

答案 0 :(得分:121)

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

  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门户网站中按“导出”按钮一样简单。缺点是它只是手动程序,我不知道通过工具或脚本自动执行此操作的方法 - 至少第一部分需要点击网页。
  4. 方法#1 (使用SSIS)的手动程序如下:

    • 在Sql Server Management Studio(SSMS)中,在本地SQL实例上创建新的空数据库。
    • 从上下文菜单中选择导入数据(右键单击数据库 - >任务 - >导入数据...)
    • 键入源的连接参数(SQL Azure)。选择“.Net Framework数据提供程序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

答案 1 :(得分:30)

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

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

答案 2 :(得分:24)

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

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

enter image description here

"接着" /"下一个" /"完成"

答案 3 :(得分:21)

在SQL Server 2016 Management Studio中,简化了将azure数据库导入本地计算机的过程。

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

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

答案 4 :(得分:20)

我认为现在要容易得多。

  1. 启动SQL Management Studio
  2. 右键单击“数据库”并选择“导入数据层应用程序......”
  3. 该向导将引导您完成连接Azure帐户,创建BACPAC文件和创建数据库的过程。
  4. 此外,我使用Sql Backup和FTP(https://sqlbackupandftp.com/)每日备份到安全的FTP服务器。我只需从那里提取最近的BACPAC文件,然后将其导入同一个对话框,这样可以更快,更轻松地创建本地数据库。

答案 5 :(得分:8)

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

答案 6 :(得分:5)

这很简单。这对我有用......在将Azure SQL数据库放到本地计算机上......:

  1. 打开SQL Management Studio并连接到Azure SQL Server。
  2. 选择您想要访问本地计算机的数据库,然后右键单击...选择"生成脚本"。按照提示......
  3. 但是,请注意,如果您还想要DATA以及脚本,请务必在开始生成之前检查高级选项...向下滚动到"数据类型到脚本&#34 ;并确保您拥有"架构和数据" ...或任何适合您的。

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

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

    我不建议将其作为一般的备用机制......

答案 7 :(得分:3)

使用msdeploy.exe

警告:msdeploy.exe无法自行创建目标数据库,因此您需要先手动创建目标数据库。

  1. 复制数据库属性页面上的连接字符串。调整它以使其包含正确的密码。 database properties page
  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
    
  4. 使用SqlPackage.exe

    1. 将天蓝色数据库导出为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 :(得分:3)

请尝试:http://mooneyblog.mmdbsolutions.com/index.php/2011/01/11/simple-database-backups-with-sql-azure/

其他替代方案是SQL Azure Data Sync

我在几天前又跑过一篇博文,但现在找不到了。我会在找到后立即更新这篇文章。

答案 9 :(得分: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/

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 文件,如果你不想先在本地复制它。

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

    获取

答案 10 :(得分:2)

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

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

我只有SQL Server 2008 R2附带的SQL导入/导出向导(工作正常),以及Visual Studio 2012 Express创建本地数据库。

答案 11 :(得分:2)

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

更多详细信息请参阅此文章: Restoring Azure SQL Database to a Local Server

答案 12 :(得分:2)

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

请在此处查看更多详情。

https://sqlazuremw.codeplex.com/

答案 13 :(得分: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

答案 14 :(得分:1)

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

答案 15 :(得分:1)

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

第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

答案 16 :(得分:0)

您好我正在使用SQLAzureMW工具进行SQLAzure数据库迁移和管理。非常有用的一个。它是从codeplex下载的,但是目前它不可用,codeplex将会关闭,同样的应用程序工具现在可以在GttHub中使用。以下链接说明了如何使用此工具以及可供下载的应用程序。

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

答案 17 :(得分:0)

在SQL Server Management Studio中

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

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

答案 18 :(得分:0)

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

我在Azure上有BizPark帐户,没有付费就无法直接备份数据库。我在VS中找到了这个选项。

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

答案 19 :(得分:0)

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

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

答案 20 :(得分:0)

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

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

Azure SQL Database Bacpac Local Restore

答案 21 :(得分:0)

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

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

答案 22 :(得分:0)

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

更确切地说:

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