SQL Server故障转移期间的瞬态错误

时间:2016-04-22 13:12:17

标签: c# sql sql-server

我们有一个客户端应用程序通过C#dll访问SQL Server数据库(镜像和群集),并在特定错误号上使用重试逻辑。

我们在故障转移期间遇到问题,其中.dll会引发暂时性错误,在重试逻辑中捕获它们会使客户端应用程序在故障转移后继续优雅地继续。

以下是我们目前在重试逻辑中捕获的错误列表:

0 
-2
-1
2 
53
64
233
596
924
1205
1222
2801
4060
6005
10053
10054
10060
40143
40197
40501
40613

有没有人知道数据库在故障转移期间可能抛出的更全面的错误列表,一旦故障转移完成就可以恢复?

他们必须装满他们不得不处理这些软件的软件,但我似乎找不到合适的清单。

谢谢,克里斯。

3 个答案:

答案 0 :(得分:3)

由于明显缺乏通用列表,我们已经走下了重试所有错误的路线,这些错误使连接处于断开状态。

答案 1 :(得分:1)

我认为这里的人有类似的问题,可能想查一下。

Is there an overview of all SQL Server 2012 error codes?

答案 2 :(得分:-2)

Create PROC uspErrorLog
 ( 
@userId varchar(15)  ,
@ExcType varchar(255)='',
@ExcMessage varchar(255)='',
@ExcSource varchar(255)='',
@ExcStackTrace varchar(255)=''
               ,@pageUrl varchar(150)=''
               ,@methodName varchar(150)=''
               ,@lineNo int
               ,@timeZone varchar(150)
                 )
AS
BEGIN
        BEGIN TRY
        BEGIN TRANSACTION

INSERT INTO [Common].[ErrorLogs]
           ([userId]
           ,[ExceptionType]
           ,[ExceptionMessage]
           ,[ExceptionSource]
           ,[ExceptionStackTrace]
           ,[pageUrl]
           ,[MethodName]
           ,[LineNumber]
           ,[Timezone]
           ,[LogDate])
     VALUES
           ( @userId
           ,@ExcType
           ,@ExcMessage
           ,@ExcSource
           ,@ExcStackTrace
           ,@pageUrl
           ,@methodName
           ,@lineNo
           ,@timeZone
           ,getdate()
           )
        COMMIT TRAN
    END TRY

    BEGIN CATCH
        IF @@TRANCOUNT > 0

        SELECT NULL AS ID
            ,'Cant Perform Insert Action.Error:' +  Error_message()  AS Message
            ,ERROR_LINE() AS linentto

        ROLLBACK TRAN --RollBack in case of Error                                                      

    END CATCH
END



 And call this procedure in your stored procedures in {catch} by passing the variables.Like this

BEGIN CATCH

IF @@TRANCOUNT > 0
        SELECT NULL AS ID
            ,'Cant perform operation.Error:' + Error_message() AS Message
            ,ERROR_LINE() AS linoo

    ROLLBACK TRAN --RollBack in case of Error                              

    DECLARE @methodname VARCHAR(200)
        ,@msg VARCHAR(max)
        ,@lineno INT

    SET @methodname = (
            SELECT Error_procedure()
            )
    SET @msg = (
            SELECT Error_message()
            )
    SET @lineno = (
            SELECT Error_line()
            )

    EXEC [dbo].[uspErrorLog] @CreatedBy
        ,''
        ,@msg
        ,''
        ,''
        ,''
        ,@methodname
        ,@lineno
        ,''

END CATCH