【问题标题】:Azure - Copy an existing SQL database to another server using Transact-SQL and SSMSAzure - 使用 Transact-SQL 和 SSMS 将现有 SQL 数据库复制到另一台服务器
【发布时间】:2019-05-09 21:05:42
【问题描述】:

我在 Azure 上有两个订阅,为了便于讨论,我们称它们为订阅 1 和订阅 2。

我在订阅 1 上有一个大小为 30 GB 的 SQL 数据库,我想将其移至订阅 2。

一种方法是备份数据库(使用 azure 门户上的导出选项),​​使用例如存储资源管理器将 bacpac 文件移动到订阅 2,然后将 bacpac 文件导入订阅 2 上的目标服务器。但是,当数据库太大时,备份和恢复过程会花费很多时间。

所以,我想出了使用 Transact-SQL 方法,如 this article 中给出的那样

使用SSMS,我在目标服务器(server2)的主数据库中使用以下命令将数据库从源服务器(订阅1中的server1)复制到目标服务器(订阅2中的server2)

CREATE DATABASE Database2 AS COPY OF server1.Database1;

两台服务器都具有相同的登录凭据,因此此过程有效,如上文所述,并且我已经针对非常小的数据库对其进行了测试(出于测试目的)

我的问题是,当我将使用 Transact SQL 方法复制上述大小为 30 GB 的数据库时,它会使用我的互联网带宽还是天蓝色数据中心的带宽?就像我们使用门户中的复制选项时一样

【问题讨论】:

  • 我 99% 确定这都是云。你为什么不运行它然后关闭你的电脑。当您重新登录时,您会发现它仍在运行。

标签: azure tsql azure-sql-database ssms azure-sql-server


【解决方案1】:

您引用的 T-SQL 命令不会通过您的计算机。它从服务器 1 到服务器 2。它在概念上等同于从 Azure 门户执行 T-SQL 命令。

再深入一层,SQL Azure 中的门户和 T-SQL DDL 命令都通过该区域中的控制平面 REST API 进行路由。您可以在此处查看相关文档:

https://docs.microsoft.com/en-us/rest/api/sql/databases/createorupdate

然后,控制平面将启动后台操作,将当前数据库的连续副本创建到第二台服务器上的新副本中。完成后,它将切断连续复制操作,您将拥有第二个数据库供您使用。

甚至更深一层 - 执行所有这些播种的逻辑或多或少与 SQL Azure 内部创建数据库新副本所需的逻辑相同。在高级/大型预留大小中,您将在本地拥有每个数据库的 N 个副本以实现高可用性和性能,如果一个副本节点出现故障(硬件故障等),系统将在内部创建一个新的连续副本剩余的副本为您的数据库重建正确数量的备份副本。

最后一个细节 - 与传统的 SQL Server 命令不同,这是异步的。因此,一旦您提交命令,其余的就会在后台发生。因此,正如@Nick.McDermaid 所提到的,您可以在命令启动后关闭本地计算机并稍后检查它,而不必担心事务被中止和回滚。唯一的额外问题是您需要检查命令的完成情况,这可能需要根据数据库的大小、您使用的预留大小(控制 IOPS)等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 2021-06-07
    相关资源
    最近更新 更多