SMO 等效于 SET HADR OFF
Posted
技术标签:
【中文标题】SMO 等效于 SET HADR OFF【英文标题】:SMO Equivalent to SET HADR OFF 【发布时间】:2015-01-14 18:38:22 【问题描述】:在 SMO (C#) 中,什么等价于...
ALTER DATABASE db SET HADR OFF;
我已经查看了 Database 和 AvailabilityDatabase 类的文档,但没有什么能真正引起我的注意。
这里的最终目标是删除作为可用性组成员的数据库。目前,我们首先关闭 HADR,然后在所有辅助服务器上删除数据库,然后在主服务器上,从可用性组中删除数据库并将数据库删除到那里。
【问题讨论】:
好问题。我认为您无法使用 C# 以编程方式执行该操作(只能使用 SQL Server Management Studio 或 Powershell)。甚至此链接也没有提供任何信息:msdn.microsoft.com/en-us/library/hh213326.aspx 我的怀疑目前是AvailabilityDatabase.LeaveAvailabilityGroup 方法,当在辅助服务器上执行时,是等效的操作。不过,我的怀疑仍未得到证实。我将根据我的发现及时更新这个问题。感谢您的意见! 我认为你的怀疑可能是对的。明天我也会研究一下。 我不太确定,但我认为您的怀疑是正确的。不幸的是我还不能测试它。我很好奇你的发现 不幸的是,我的怀疑似乎是不正确的。当我在辅助设备上调用 LeaveAvailabilityGroup 时,我得到The database ... failed to leave the availability group ... on the availability replica ...
【参考方案1】:
这是我使用 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();
【讨论】:
以上是关于SMO 等效于 SET HADR OFF的主要内容,如果未能解决你的问题,请参考以下文章
等效于 pandas.DataFrame.set_index / drop_duplicates 与 dropDuplicates 的 Spark DataFrame
等效于 Entity Framework Core 1 (EF7) 中的 .HasOptional
Typescript GraphQL 等效于 EnumSet