Tôi đã chơi xung quanh với SMO để kiểm tra một số thuộc tính gần đây và đã gặp phải một vấn đề khi cố gắng thu thập thông tin về thứ tự đọc định tuyến trong SQL Server 2016.
Với các phiên bản trước, danh sách định tuyến khá đơn giản, danh sách sẽ được xử lý theo thứ tự, nhưng với năm 2016, họ đã giới thiệu thuật toán quay vòng cho phép bạn có nhiều bản sao thứ cấp chấp nhận lưu lượng đọc.
Mặc dù dữ liệu này có thể truy cập được thông qua T-SQL, nhưng nó không xuất hiện vì SMO đã được cập nhật để phản ánh điều này, điều đó có nghĩa là bạn không thể nhận chính xác hoặc đặt cấu hình theo cách đó vì đây vẫn là một bộ sưu tập chuỗi đơn giản.
Có một số thuộc tính mà tôi đang thiếu sẽ cho phép tôi có được dữ liệu chính xác cho SQL Server 2016 không? (ví dụ SMO gọi cho C # bên dưới)
Nó chỉ là thông tin vòng tròn dường như không thể truy cập được, nó liệt kê tất cả các bản sao có trong danh sách định tuyến đọc, nó dường như không phân biệt các nhóm bản sao khác nhau sẽ tồn tại.
Kết nối báo cáo lỗi. Kết nối đã chết ...
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();
}
}
}