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

时间:2015-01-12 17:52:46

标签: c# .net sql-server-2012 smo alwayson

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

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

操作失败,并告诉我尚未创建AvailabilityDatabase。但是,如果我这样做......

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

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

1 个答案:

答案 0 :(得分:2)

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

// 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();