示例#1
0
        /// <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);
        }
示例#2
0
        /// <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));
            }
        }
示例#3
0
        /// <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;
        }
示例#4
0
        public static AvailabilityReplica GetReplica(string agName, string replicaName, SMO.Server server)
        {
            AvailabilityGroup   ag = server.AvailabilityGroups[agName];
            AvailabilityReplica ar = ag.AvailabilityReplicas[replicaName];

            return(ar);
        }
示例#5
0
        /// <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));
        }
示例#6
0
        /// <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();
        }
示例#7
0
        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);
        }
示例#8
0
        // 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);
            }
        }
示例#9
0
 public override void Visit(AvailabilityReplica node) { this.action(node); }
 public override void ExplicitVisit(AvailabilityReplica fragment)
 {
     _fragments.Add(fragment);
 }