需要您的帮助:SSIS 服务器维护作业失败
正在运行的代码是 SQL Server 的内置部分,开箱即用。 据我所知,它清理了已运行的包的日志历史记录。
DECLARE @role int
SET @role = (SELECT [role] FROM [sys].[dm_hadr_availability_replica_states] hars
INNER JOIN [sys].[availability_databases_cluster] adc ON hars.[group_id] = adc.[group_id]
WHERE hars.[is_local] = 1 AND adc.[database_name] ='SSISDB')
IF DB_ID('SSISDB') IS NOT NULL AND (@role IS NULL OR @role = 1)
EXEC [SSISDB].[internal].[cleanup_server_retention_window]
由于此错误而失败:
留言:
以用户身份执行:##MS_SSISServerCleanupJobLogin##。删除 语句与 REFERENCE 约束冲突 “FK_EventMessagecontext_Operations”。数据库发生冲突 “SSISDB”,表“internal.event_message_context”,列 '操作_id'。 [SQLSTATE 23000](错误 547)。
网上有一些关于如何处理此错误的建议,但我不确定如何最好地将它们应用到默认程序中。 我担心修改 Microsoft 内置于该工具中的某些内容。
是的,这是在 SQL Server 上安装 SSIS 时运行的默认清理作业。我认为 SSISDB 出了问题,你应该检查 SSIS 包是否仍然正常运行。
SSISDB 充满了触发器,默认清理作业在清除旧数据时会尝试使用它们。有时它在完成工作时会遇到麻烦,特别是当有大量数据需要删除时。此时,您可以通过更有效地手动删除数据来帮助它:https://www.timmitchell.net/post/2018/12/30/clean-up-the-ssis-catalog/
在我们的例子中,我们丢失了一个 FK,重新创建了它,错误就消失了:
ALTER TABLE [internal].[event_message_context] WITH CHECK ADD CONSTRAINT [FK_EventMessageContext_EventMessageId_EventMessages] FOREIGN KEY([event_message_id])
REFERENCES [internal].[event_messages] ([event_message_id])
ON DELETE CASCADE
GO
ALTER TABLE [internal].[event_message_context] CHECK CONSTRAINT [FK_EventMessageContext_EventMessageId_EventMessages]
GO