0
我決定將日誌記錄添加到SQL代理隊列的激活存儲過程 - 目標是記錄錯誤。經過測試,日誌表不斷填充錯誤。SQL代理激活過程日誌過多
之前添加日誌記錄:
- 一切都很正常
- 沒有一個系統或事件日誌說明問題
- 服務器的性能幾乎沒有顯示 '標誌'
AFTER添加日誌:
Th E服務器性能仍勉強顯示了一個「標誌」,但是...
- 對數表連續地與該服務目前隊列「OutboundEventRequestQueue」被禁用以下錯誤
填充。
記錄不會停止,直到我運行下面的命令
ALTER DATABASE [MyDatabaseName] WITH IMMEDIATE ROLLBACK
存儲過程SET NEW_BROKER:
ALTER PROCEDURE [dbo].[usp_OutboundEventRequestQueueActivation]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ConversationHandle UNIQUEIDENTIFIER;
DECLARE @MessageBody XML;
DECLARE @MessageTypeName SYSNAME;
---------------
-- READS ALL THE MESSAGES IN THE QUEUE
---------------
WHILE (1=1)
BEGIN
BEGIN TRY
BEGIN TRANSACTION;
---------------
-- KEEPS READING While In 'Notified' State
---------------
WAITFOR
(
RECEIVE TOP (1)
@ConversationHandle = conversation_handle,
@MessageBody = CAST(message_body AS XML),
@MessageTypeName = message_type_name
FROM [dbo].[OutboundEventRequestQueue]
), TIMEOUT 5000;
IF (@@ROWCOUNT = 0)
BEGIN
ROLLBACK TRANSACTION;
BREAK;
END
---------------
-- HANDLE REPLY MESSAGE: OutboundEventRequest
---------------
IF @MessageTypeName = N'OutboundEventRequestMessageType'
BEGIN
-- DEBUG ONLY: Use to force an error
--WAITFOR DELAY '00:00:01'
--------------
-- INSERT AUDIT
--------------
DECLARE @AuditedEvent XML;
EXEC [event].[usp_tOutbound_Audit_UPSERT] @MessageBody, @AuditedEvent = @AuditedEvent OUTPUT
---------------
-- DO WORK
---------------
-- Publish XML Message (payload) to Outbound Event Aggregator (using SQL CLR)
DECLARE @Payload NVARCHAR(MAX) = (SELECT CONVERT(NVARCHAR(MAX), @AuditedEvent))
EXEC dbo.usp_OutboundEventMessage_PUBLISH @outboundEvent = @Payload
-- SEND REPLY
DECLARE @ReplyMessageBody XML = @MessageBody;
SEND ON CONVERSATION @ConversationHandle MESSAGE TYPE [OutboundEventResponseMessageType] (@ReplyMessageBody);
END
---------------
-- HANDLE ERRORS: for EndDialog MessageTypes
---------------
ELSE IF @MessageTypeName = N'http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog'
BEGIN
-- CLOSE CONVERSATION
END CONVERSATION @ConversationHandle;
END
---------------
-- HANDLE ERRORS: for Error MessageTypes
---------------
ELSE IF @MessageTypeName = N'http://schemas.microsoft.com/SQL/ServiceBroker/Error'
BEGIN
-- CLOSE CONVERSATION
END CONVERSATION @ConversationHandle;
END
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
DECLARE @Error_Number INT = (SELECT ERROR_NUMBER())
DECLARE @Error_Message VARCHAR(MAX) = (SELECT ERROR_MESSAGE())
DECLARE @Error_Severity INT = (SELECT ERROR_SEVERITY())
DECLARE @Error_State INT = (SELECT ERROR_STATE())
DECLARE @Error_Procedure VARCHAR(400) = (SELECT ERROR_PROCEDURE())
DECLARE @Error_Line INT = (SELECT ERROR_LINE())
-- HERE: The log-table is continuously FILLING-UP
EXEC [event].[usp_Exceptions_TRYINSERT]
@Error_Number,
@Error_Message,
@Error_Severity,
@Error_State,
@Error_Procedure,
@Error_Line
END CATCH
END
END
隊:
ALTER QUEUE [dbo].[OutboundEventRequestQueue] WITH STATUS = OFF , RETENTION = OFF , ACTIVATION ( STATUS = ON , PROCEDURE_NAME = [dbo].[usp_OutboundEventRequestQueueActivation] , MAX_QUEUE_READERS = 10 , EXECUTE AS OWNER ), POISON_MESSAGE_HANDLING (STATUS = ON)