我们正在将我们的本地SQL Server数据库迁移到具有故障转移可用性组的Azure,在UKSouth和UKWest之间进行拆分。
我最初尝试使用SSMS中的“部署到SQL Azure”向导将本地数据库导出到单个SQL Azure实例。这个过程非常完美。
故障转移组具有以下结构。 sqlbox.database.windows.net是一个主要端点,指向sqlbox-uksouth.database.windows.net和sqlbox-ukwest.database.windows.net作为辅助端点。
我在SSMS中尝试了“部署到SQL Azure”向导到sqlbox.database.windows.net,我收到了一个错误。我尝试首先通过脚本创建此数据库,将其分配给弹性池,然后尝试向导。我认为这是在我一天晚上做完的时候工作的,但是我第二天早上又尝试了它并且它没有用 - 我现在假设我错了它工作并检查错误的数据库或其他东西。
然后我尝试将“部署到SQL Azure”向导转到sqlbox-uksouth.database.windows.net并运行以下脚本。
ALTER DATABASE sqlboxdatabase1
MODIFY ( SERVICE_OBJECTIVE = ELASTIC_POOL ( name = [sqlbox-ElasticPool] ) ) ;
GO
ALTER DATABASE sqlboxdatabase1
ADD SECONDARY ON SERVER [sqlbox-ukwest]
WITH ( ALLOW_CONNECTIONS = ALL )
GO
这创建了数据库并添加了辅助数据库。数据库出现在sqlbox.database.windows.net上,但我无法访问它,因为它“不可用”。通过Azure门户,Ops人员可以将这些添加到可用性组中,一切都按预期工作,但我需要通过脚本执行此操作。
我发现https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-availability-group-transact-sql我相信它显示了我在SQL Server 2012中要做的事情,但我找不到任何SQL Azure。
有人可以帮助我使用这个脚本或指导我更好地实现我想要实现的目标吗?我试图避免使用任何其他三方工具。
答案 0 :(得分:1)
关于您的第一个问题,不应在端点侦听器 sqlbox.database.windows.net
上部署数据库。它们应部署在主服务器sqlbox-uksouth.database.windows.net
上。这是因为端点侦听器不是正确的Azure SQL服务器,因此无法托管数据库。
关于你的第二个问题,我们必须记住,活跃的地理复制和故障转移组是两个截然不同的事情,尽管密切相关。在主服务器和故障转移组的辅助服务器之间进行地理复制的数据库并不意味着数据库也是故障转移组的一部分。将数据库添加到故障转移组是另一项操作。
回到你的例子,当你运行
ALTER DATABASE sqlboxdatabase1
ADD SECONDARY ON SERVER [sqlbox-ukwest]
WITH ( ALLOW_CONNECTIONS = ALL )
您在sqlbox-ukwest.database.windows
上创建数据库的只读辅助副本。此副本镜像其位于sqlbox-uksouth.database.windows.net
的主要姐妹。但是,这两个数据库尚未成为故障转移组的一部分。事实上,他们不属于您的故障转移群体,这也是他们不会出现在sqlbox.database.windows.net
上的原因。
要让新部署的数据库及其辅助副本显示在sqlbox.database.windows.net
上,您必须将它们添加到故障转移组。必须使用Azure REST API或PowerShell script来完成此操作。目前没有T-SQL命令可将数据库及其地理复制副本添加到故障转移组。您必须使用REST API或PowerShell。