public static void GetSupporableDatabaseSchemaVersionRange(ITopologyConfigurationSession taskSession, Task.TaskVerboseLoggingDelegate writeLog, Task.TaskWarningLoggingDelegate writeWarning, Task.TaskErrorLoggingDelegate writeError, Database database, out int minVersion, out int maxVersion, out int currentRequestedVersion) { currentRequestedVersion = 0; int num = int.MaxValue; int num2 = 0; DatabaseAvailabilityGroup databaseAvailabilityGroup; using (IClusterDB clusterDB = DatabaseTasksHelper.OpenClusterDatabase(taskSession, writeLog, writeWarning, writeError, database, false, out databaseAvailabilityGroup)) { if (clusterDB != null && clusterDB.IsInitialized) { ClusterDBHelpers.ReadRequestedDatabaseSchemaVersion(clusterDB, database.Guid, 0, out currentRequestedVersion); foreach (ADObjectId adobjectId in databaseAvailabilityGroup.Servers) { int num3; int num4; ClusterDBHelpers.ReadServerDatabaseSchemaVersionRange(clusterDB, adobjectId.ObjectGuid, 121, 121, out num3, out num4); writeLog(Strings.ServerSchemaVersionRange(adobjectId.ObjectGuid.ToString(), num3, num4)); num2 = Math.Max(num3, num2); num = Math.Min(num4, num); } } } if (num2 > num) { writeError(new IncompatibleDatabaseSchemaVersionsInDAGException(), ErrorCategory.MetadataError, database); } minVersion = num2; maxVersion = num; }
public static void RemoveDatabaseFromClusterDB(ITopologyConfigurationSession taskSession, Task.TaskVerboseLoggingDelegate writeLog, Task.TaskWarningLoggingDelegate writeWarning, Task.TaskErrorLoggingDelegate writeError, Database database) { try { DatabaseAvailabilityGroup databaseAvailabilityGroup; using (IClusterDB clusterDB = DatabaseTasksHelper.OpenClusterDatabase(taskSession, writeLog, writeWarning, writeError, database, true, out databaseAvailabilityGroup)) { if (clusterDB != null && clusterDB.IsInitialized) { writeLog(Strings.DeleteClusterDBKey(database.Name)); ClusterDBHelpers.RemoveDatabaseRequestedSchemaVersion(clusterDB, database.Guid); } } } catch (ClusterException) { writeWarning(Strings.FailedToRemoveDatabaseSection(database.Name)); } }
public static void SetRequestedDatabaseSchemaVersion(ITopologyConfigurationSession taskSession, Task.TaskVerboseLoggingDelegate writeLog, Task.TaskWarningLoggingDelegate writeWarning, Task.TaskErrorLoggingDelegate writeError, Database database, int version) { try { DatabaseAvailabilityGroup databaseAvailabilityGroup; using (IClusterDB clusterDB = DatabaseTasksHelper.OpenClusterDatabase(taskSession, writeLog, writeWarning, writeError, database, false, out databaseAvailabilityGroup)) { if (clusterDB != null && clusterDB.IsInitialized) { writeLog(Strings.SetDatabaseRequestedSchemaVersion(database.Name, version)); ClusterDBHelpers.WriteRequestedDatabaseSchemaVersion(clusterDB, database.Guid, version); } } } catch (ClusterException) { if (writeError != null) { writeError(new FailedToSetRequestedDatabaseSchemaVersionException(database.Name), ErrorCategory.WriteError, database); } } }