gpt4 book ai didi

sql-server - 如何在 VSTS 中克隆 SQL Azure 数据库 - 服务器 'A' 中的数据库 'sql01' 和服务器 'B' 中的数据库 'sql01' 已经处于复制关系中

转载 作者:行者123 更新时间:2023-12-02 01:13:54 24 4
gpt4 key购买 nike

我正在尝试在 VSTS 中配置我的发布过程,以便在将 buld 部署到暂存环境之前将我的实时数据库克隆到我的暂存环境。遵循此处的准则...

http://community.idera.com/blog/b/community_blog/posts/how-to-make-a-copy-of-a-database-on-windows-azure-sql-database

这里...

https://alexandrebrisebois.wordpress.com/2013/02/07/creating-a-staging-database-instance-from-a-production-instance-on-windows-azure-sql-database/

虽然我在运行命令时遇到以下错误,但它基本上可以正常工作...

CREATE DATABASE [Staging] AS COPY OF [Operational]

The databases 'Operational' in server 'sql01' and 'Staging' in server 'sql01' are already in a replication relation.

这之前是...

DROP DATABASE IF EXISTS [Staging]

无论如何我都可以配置构建服务器继续,但我仍然会收到讨厌的黄色警告。我希望以某种方式抑制这种情况作为解决方法,或者做任何必要的事情来阻止错误首先出现。最终结果如愿,SQL数据库复制成功。

感觉除了简单地删除原始数据库(如果存在的话!)之外,我还需要事先做一些其他清理工作

在完成上述步骤后,我会执行此操作,这会强制发布过程“等待”,直到数据库准备就绪...

DECLARE @COPY_DATA int
SET @COPY_DATA = SELECT COUNT(*) FROM sys.dm_database_copies
WHILE (@COPY_DATA > 0)
BEGIN
WAITFOR DELAY '00:00:10'
SET @COPY_DATA = SELECT COUNT(*) FROM sys.dm_database_copies
END

...这可能需要一些时间。这完全没有错误地完成。

雪上加霜的是,随着时间的推移,我无法始终如一地确保每个阶段的完成,从而导致虚假的失败。有时 DROP 不会完成。如果我检查它在 Master 中是否存在,那么它就消失了,但 Create 会失败,因为它仍然存在。


对于那些稍后阅读的人,以下是我最终得出的最可靠的解决方案。

注意事项 - Powershell 比 SqlCommand 更可靠 - Azure 的 API 和底层数据库有时会在一段时间内失去操作系统同步,导致两者之间出现冲突状态

为了将我的作品克隆到舞台上,我做了以下...

第 1 步:Azure Powershell 任务(清除暂存)

Remove-AzureRmSqlDatabase -ResourceGroupName "Production" -ServerName "sql01" -DatabaseName "Staging" -ErrorAction SilentlyContinue

第 2 步:Azure SQL 任务(删除数据库)- 只是为了确定!

DROP DATABASE IF EXISTS [Staging]

第 3 步:Azure Powershell 任务(从实时重新创建暂存)

New-AzureRmSqlDatabaseCopy -ResourceGroupName "Production" -ServerName "sql01" -DatabaseName "Operational" -CopyResourceGroupName "Production" -CopyServerName "sql01" -CopyDatabaseName "Staging"

第 4 步:Azure SQL 任务(等待同步)- 以防万一!

DECLARE @COPY_DATA int
SET @COPY_DATA = SELECT COUNT(*) FROM sys.dm_database_copies
WHILE (@COPY_DATA > 0)
BEGIN
WAITFOR DELAY '00:00:10'
SET @COPY_DATA = SELECT COUNT(*) FROM sys.dm_database_copies
END

第 5 步:Azure Powershell 任务(生成 BacPac)(我不打算在这里讨论,因为这是另一个主题)。

一旦发布转移到生产环境,我会再次调用清除过程,因此暂存只是暂时的。

最佳答案

您可以使用 Remove-​Azure​Rm​Sql​DatabaseNew-​Azure​Rm​Sql​Database​Copy命令删除数据库,然后创建数据库副本。

在您的构建定义中添加“Azure PowerShell 脚本”任务并将其配置为使用“Azure 资源管理器”连接到您的 Azure 帐户,如下所示: enter image description here我使用的 PowerShell 脚本:

Remove-AzureRmSqlDatabase -ResourceGroupName "resourcegourpname" -ServerName "servername" -DatabaseName "databasecopy"

New-AzureRmSqlDatabaseCopy -ResourceGroupName "resourcegourpname" -ServerName "servername" -DatabaseName "database" -CopyResourceGroupName "resourcegourpname" -CopyServerName "servername" -CopyDatabaseName "databasecopy"

关于sql-server - 如何在 VSTS 中克隆 SQL Azure 数据库 - 服务器 'A' 中的数据库 'sql01' 和服务器 'B' 中的数据库 'sql01' 已经处于复制关系中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43609507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com