Исключения для исключения ошибок Trap SQL

Я использую пакет NuGet Polly для реализации логики повтора, которая ловут Исключения для отказоустойчивости SQL. У меня есть SQL Server Always On High Availability, установленный в Azure.

Вместо того, чтобы ловить все исключения SQL (что было бы неправильно), я хочу уловить определенные исключения SQL, которые происходят, когда происходит переход на другой ресурс.

Из SSMS я показываю панель управления, а затем я могу искусственно инициировать отказоустойчивость, чтобы проверить свой код. Первоначально я позволял исключать все исключения (так что не было захвата). Затем я поставил очередь на переход на другой ресурс и посмотрел бы на мой журнал, чтобы узнать, что SQL Exception было поднято. Впоследствии я смог уловить все Исключения SQL, которые произошли из-за перехода на другой ресурс.

Мой вопрос в том, что полный список? У других людей, которые реализовали логику повтора в SQL Server Failover, были лишены каких-либо других исключений SQL?

Я попробовал почти 100 отказов с логикой, и ничего не зашумело. Это, конечно же, не означает, что я полностью захватил исключения Failover SQL Exceptions.

Логика повторения имеет Policy.Handle (se => IsFailoverSqlException (se)). В зависимости от того, где я находится в коде при переходе на резервный ресурс, я вижу три исключения SQL, которые я задерживаю ниже.

    private static bool IsFailoverSqlException(SqlException se)
    {
        return (
                /*
                A network-related or instance-specific error occurred while establishing a connection to SQL Server.
                The server was not found or was not accessible.
                Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
                */
                (se.Class == 20 && se.State == 0 && se.Number == 53) ||
                /*
                Failed while logging Fatal to MT Database: Unable to access availability database 'MedicusMT' because the database replica is not in the PRIMARY or SECONDARY role.
                Connections to an availability database is permitted only when the database replica is in the PRIMARY or SECONDARY role.
                Try the operation again later.
                */
                (se.Class == 14 && se.State == 1 && se.Number == 983) ||
                // A transport-level error has occurred when receiving results from the server.  (provider: Session Provider, error: 19 - Physical connection is not usable)
                (se.Class == 20 && se.State == 0 && se.Number == -1)
            );
    }

c#,sql-server,azure-sql-database,alwayson,polly,

1

Ответов: 1


0

Почему бы вам не упростить логику и просто проверить состояние подключения и при необходимости создать новое соединение: conn! = Null || conn.State! = ConnectionState.Open

Схожая с этой статьей: https://technet.microsoft.com/en-us/library/cc917713.aspx#ECAA

C #, SQL-сервер, лазурь-SQL-базы данных, AlwaysOn, попка,