将现有数据库加入可用性组

Posted

技术标签:

【中文标题】将现有数据库加入可用性组【英文标题】:Join an Existing Database to An Availability Group 【发布时间】:2015-01-12 17:52:46 【问题描述】:

我正在通过the SMO namespace 将一些现有(动态)SQL 移植到 C#。不过,我在弄清楚如何将现有数据库加入我的 AlwaysOn 可用性组时遇到了一些麻烦。 SMO 命名空间有一个Database 对象和一个AvailabilityDatabase 对象,但两者似乎有些正交...我看不到在这两个概念之间来回移动的方法。在我们现有的实现中,我们创建数据库,对其执行一些操作,创建完整备份,然后将其加入可用性组。我正在尝试在 SMO 中重新创建此工作流,但在加入可用性组步骤时被挂断了。如果我这样做......

AvailabilityGroup ag = new AvailabilityGroup(sqlServer, myExistingAgName);
AvailabilityDatabase agDb = new AvailabilityDatabase(ag, myExistingDbName);
agDb.JoinAvailablityGroup();

操作失败并告诉我尚未创建可用性数据库。但是,如果我这样做...

AvailabilityGroup ag = new AvailabilityGroup(sqlServer, myExistingAgName);
AvailabilityDatabase agDb = new AvailabilityDatabase(ag, myExistingDbName);
agDb.Create();
agDb.JoinAvailablityGroup();

操作失败并告诉我可用性数据库的创建失败。尽管错误消息没有明确说明这一点,但我认为失败的原因是名称为 myExistingDbName 的数据库已经存在,这是预期的。我确定我只是在这里遗漏了一些基本的东西,但 MSDN 文档的说明性不是很好,而且我没有运气在网上找到任何此类事情的教程/示例。

【问题讨论】:

【参考方案1】:

要将数据库添加到主要的可用性组,我使用了以下...

// note that the Availability Group is instantiated differently than above
AvailabilityGroup ag = sqlServer.AvailabilityGroups[availabilityGroup];
AvailabilityDatabase agDb = new AvailabilityDatabase(ag, database);
agDb.Create();

在辅助服务器上恢复数据库后,这是我用来将其加入可用性组的内容...

AvailabilityGroup ag = sqlServer.AvailabilityGroups[availabilityGroup];
ag.AvailabilityDatabases[database].JoinAvailablityGroup();

【讨论】:

以上是关于将现有数据库加入可用性组的主要内容,如果未能解决你的问题,请参考以下文章

将数据库从一个可用性组移动到另一个位于不同 SQL 实例上的可用性组

可用性组还原和重新设定种子

如何以编程方式将数据库添加到现有的 Always On 可用性组 (AOAG)?

将数据库文件 (mdf) 添加到 AlwaysOn 可用性组中的数据库

如何在 SQL 2016 中处理可用性组

什么是 Always On 可用性组