SMO 相当于 SET HADR OFF

SMO Equivalent to SET HADR OFF

在 SMO (C#) 中,什么等同于...

ALTER DATABASE db SET HADR OFF;

我查看了数据库和 AvailabilityDatabase 的文档类,没有什么是真正令我惊讶的。

此处的最终目标是删除作为可用性组成员的数据库。目前,我们首先关闭 HADR,然后删除所有辅助服务器上的数据库,然后在主服务器上,从可用性组中删除数据库,然后删除数据库。

这是我确定的使用 SMO 删除连接到 AlwaysOn 可用性组的数据库的过程...

Server primaryServer = new Server();
AvailabilityDatabase pDb = primaryServer.AvailabilityGroups[agName].AvailabilityDatabases[dbName];
pDb.SuspendDataMovement();
while (!pDb.IsSuspended)
{
  Thread.Sleep(1000);
  pDb.Refresh();
}

foreach (var secondary in secondaryServers)
{
  AvailabilityDatabase sDb = secondary.AvailabilityGroups[agName].AvailabilityDatabases[dbName];
  sDb.SuspendDataMovement();
  while (!sDb.IsSuspended)
  {
    Thread.Sleep(1000);
    sDb.Refresh();
  }

  sDb.LeaveAvailabilityGroup(); // this appears to be the equivalent of SET HADR OFF

  Database db = secondary.Databases[dbName];
  db.UserAccess = DatabaseUserAccess.Single;
  secondary.KillAllProcesses(dbName);
  db.Drop();
}

pDb.Drop();

Database db = primaryServer.Databases[dbName];
db.UserAccess = DatabaseUserAccess.Single;
primaryServer.KillAllProcesses(dbName);
db.Drop();