/// <summary> /// Gets the endpoint url of an AR. /// </summary> /// <param name="arName">Availability replica name</param> /// <param name="agName">Availability grorup name</param> /// <param name="server">smo server where this has to be executed</param> /// <returns>Endpoint url of an Availability Replica</returns> public static string GetAREndpointUrl(string arName, string agName, SMO.Server server) { AvailabilityGroup ag = server.AvailabilityGroups[agName]; AvailabilityReplica ar = ag.AvailabilityReplicas[arName]; return(ar.EndpointUrl); }
/// <summary> /// Creates availability group using Smo /// </summary> /// <param name="agName">Availability group name.</param> /// <param name="dbNames">Datbases to be part of the AG.</param> /// <param name="replicas">replicas to be part of the AG.</param> /// <param name="server">smo server.</param> public static AvailabilityGroup CreateAG(string agName, IEnumerable <string> dbNames, IEnumerable <Smo.Server> replicas, Smo.Server server) { if (!AGHelper.IsAGExist(agName, server)) { AvailabilityGroup ag = new AvailabilityGroup(server, agName); foreach (string dbName in dbNames) { ag.AvailabilityDatabases.Add(new AvailabilityDatabase(ag, dbName)); } foreach (Smo.Server replica in replicas) { AvailabilityReplica ar = new AvailabilityReplica(ag, replica.Name); ar.EndpointUrl = ARHelper.GetHadrEndpointUrl(replica); ar.AvailabilityMode = AvailabilityReplicaAvailabilityMode.AsynchronousCommit; ar.FailoverMode = AvailabilityReplicaFailoverMode.Manual; ag.AvailabilityReplicas.Add(ar); } ag.Create(); return(ag); } else { throw new Exception(string.Format("The requested availability Group {0} already exist in the given server {1}", agName, server.Name)); } }
/// <summary> /// Updates the endpoint url of an AR. /// </summary> /// <param name="arName">Availability replica name.</param> /// <param name="agName">Availability grorup name.</param> /// <param name="EndpointUrl">endpoint url to be set.</param> /// <param name="server">smo server where this has to be executed.</param> public static void UpdateAREndpointUrl(string arName, string agName, string EndpointUrl, SMO.Server server) { AvailabilityGroup ag = server.AvailabilityGroups[agName]; AvailabilityReplica ar = ag.AvailabilityReplicas[arName]; ar.EndpointUrl = EndpointUrl; }
public static AvailabilityReplica GetReplica(string agName, string replicaName, SMO.Server server) { AvailabilityGroup ag = server.AvailabilityGroups[agName]; AvailabilityReplica ar = ag.AvailabilityReplicas[replicaName]; return(ar); }
/// <summary> /// Checks whether the given replica is synchronized or not. /// </summary> /// <param name="arName">Replica that needs to be checked</param> /// <param name="agName">Availability Group name</param> /// <param name="server">SMO Server on which check.</param> /// <returns>True if the given replica become synchronized, otherwise false.</returns> public static bool IsReplicaSynchronized(string arName, string agName, SMO.Server server) { AvailabilityReplica ar = server.AvailabilityGroups[agName].AvailabilityReplicas[arName]; ar.Refresh(); return(ar.RollupSynchronizationState.Equals(AvailabilityReplicaRollupSynchronizationState.Synchronized)); }
/// <summary> /// Adds a given replica to an Availability Group. /// </summary> /// <param name="agName"></param> /// <param name="replicaName"></param> /// <param name="server"></param> public static void AddReplicaToAG(string agName, string replicaName, Smo.Server server) { AvailabilityGroup ag = server.AvailabilityGroups[agName]; AvailabilityReplica replica = new AvailabilityReplica(ag, replicaName); ag.AvailabilityReplicas.Add(replica); ag.Refresh(); ag.AvailabilityReplicas.Refresh(); }
public static AvailabilityReplica BuildAR(AvailabilityGroup ag, string replicaName, string endpointUrl) { //This will give a different combination of the possible configurations of an AR every time it runs. AvailabilityReplica ar = new AvailabilityReplica(ag, replicaName); ar.AvailabilityMode = AvailabilityReplicaAvailabilityMode.SynchronousCommit; ar.FailoverMode = AvailabilityReplicaFailoverMode.Automatic; ar.EndpointUrl = endpointUrl; ar.SessionTimeout = 30; ar.ConnectionModeInPrimaryRole = AvailabilityReplicaConnectionModeInPrimaryRole.AllowAllConnections; ar.ConnectionModeInSecondaryRole = AvailabilityReplicaConnectionModeInSecondaryRole.AllowAllConnections; ar.BackupPriority = 3; ar.SeedingMode = AvailabilityReplicaSeedingMode.Automatic; return(ar); }
// When we called this primary and secondary should being create public void TestCreateAGWithTwoReplicasWithoutDatabase() { Smo.Server primary = replicas[0]; AvailabilityGroup ag = new AvailabilityGroup(primary, agName); List <Smo.Server> secondaries = replicas.GetRange(1, replicas.Count - 1); for (int i = 0; i < replicas.Count; ++i) { AvailabilityReplica ar = ARHelper.BuildAR(ag, replicas[i].Name, replicaEndpointUrls[i]); ag.AvailabilityReplicas.Add(ar); } try { Console.WriteLine("Creating availability group '{0}' on server '{1}", ag.Name, primary.Name); ag.Create(); Thread.Sleep(1000); //Sleep a tick to let AG create take effect foreach (Smo.Server srv in secondaries) { srv.JoinAvailabilityGroup(agName); } CreateAGListener(); // enable autoseeding in secondary //secondary.GrantAvailabilityGroupCreateDatabasePrivilege(agName); } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Failed to create AG {0}", ag.Name); AGHelper.DropAG(ag.Name, primary); } }
public override void Visit(AvailabilityReplica node) { this.action(node); }
public override void ExplicitVisit(AvailabilityReplica fragment) { _fragments.Add(fragment); }