Ich habe kürzlich mit SMO herumgespielt, um einige Eigenschaften zu überprüfen, und bin auf ein Problem gestoßen, als ich versucht habe, Informationen zur Lese-Routing-Reihenfolge in SQL Server 2016 zu sammeln.
Bei früheren Versionen war die Routing-Liste recht einfach. Die Liste wurde in der angegebenen Reihenfolge verarbeitet. Mit 2016 wurde jedoch der Round-Robin-Algorithmus eingeführt, mit dem mehrere sekundäre Replikate den gelesenen Verkehr akzeptieren können.
Obwohl auf diese Daten über T-SQL zugegriffen werden kann, sieht es nicht so aus, als ob SMO aktualisiert wurde, um dies widerzuspiegeln. Dies bedeutet, dass Sie die Konfiguration nicht genau abrufen oder so einstellen können, da es sich immer noch um eine einfache Zeichenfolgensammlung handelt.
Fehlt mir ein Attribut, mit dem ich genaue Daten für SQL Server 2016 abrufen kann? (Beispiel SMO-Aufruf für C # unten)
Es sind nur die Round-Robin-Informationen, auf die nicht zugegriffen werden kann. Es werden alle Replikate aufgelistet, die in der Read-Routing-Liste enthalten sind. Es scheint nur nicht die verschiedenen Gruppen von Replikaten zu unterscheiden, die existieren würden.
Fehlerbericht verbinden. Connect ist tot ...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
namespace SmoTesting
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter the servername");
string connectServer = Console.ReadLine();
Console.WriteLine("Enter the AG name");
string agName = Console.ReadLine();
Server srv = new Server();
try
{
srv = new Server(connectServer);
srv.ConnectionContext.StatementTimeout = 60; //timeout after 60 seconds running the query
foreach (AvailabilityGroup ag in srv.AvailabilityGroups)
{
if (ag.Name == agName)
{
ag.PrimaryReplicaServerName.ToString());
foreach (AvailabilityReplica ar in ag.AvailabilityReplicas)
{
if (ar.Name.ToString() == "connectServer")
{
foreach (Object obj in ar.ReadonlyRoutingList)
{
Console.WriteLine(" {0}", obj);
}
}
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException.ToString());
}
finally
{
srv.ConnectionContext.Disconnect();
}
Console.WriteLine("press a key");
Console.Read();
}
}
}