Ответ 1
Из-за очевидного отсутствия универсального списка мы пошли по пути повторной попытки на всех ошибках, которые оставляют соединение в сломанном состоянии.
У нас есть клиентское приложение, которое обращается к базе данных SQL Server (зеркалируется и кластеризуется) через С# dll с логикой повтора по конкретным номерам ошибок.
У нас возникают проблемы во время сбоев, где ошибки переходного процесса генерируются DLL, где их ловить в логике повтора позволило бы клиентскому приложению продолжить элегантно после отказа.
Ниже приведен список ошибок, которые мы в настоящее время обнаруживаем в логике повтора:
0
-2
-1
2
53
64
233
596
924
1205
1222
2801
4060
6005
10053
10054
10060
40143
40197
40501
40613
Кто-нибудь знает более полный список ошибок, которые БД могла бы выполнить при провале, который можно восстановить после завершения провала?
У них должно быть множество программного обеспечения, из-за которого им пришлось иметь дело с этим, но я не могу найти достойный список.
Спасибо, Крис.
Из-за очевидного отсутствия универсального списка мы пошли по пути повторной попытки на всех ошибках, которые оставляют соединение в сломанном состоянии.
Я думаю, что у этих парней была аналогичная проблема, возможно, она захочет проверить.
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