我在负责删除旧执行日志的维护作业的 sql server 2017 代理作业中收到以下错误消息:
Date 5/23/2018 12:18:45 AM
Log Job History (SSIS Server Maintenance Job)
Step ID 1
Server KARABL3
Job Name SSIS Server Maintenance Job
Step Name SSIS Server Operation Records Maintenance
Duration 00:02:34
Sql Severity 16
Sql Message ID 16916
Operator Emailed
Operator Net sent
Operator Paged
Retries Attempted 3
Message
Executed as user: ##MS_SSISServerCleanupJobLogin##. A cursor with the name 'execution_cursor' does not exist. [SQLSTATE 34000] (Error 16916). NOTE: The step was retried the requested number of times (3) without succeeding. The step failed.
一段时间后,当日志计数超过正常计数时,它会导致所有作业因超时而失败。
最佳答案
这实际上是 SQL Server 2017 中引入的一个错误。
参见存储过程 SSISDB.[internal].[cleanup_server_retention_window]
.
第 175 行有 DEALLOCATE execution_cursor
此语句需要向下移动一行,在 END
之后WHILE 循环语句。应该和DROP TABLE #deleted_ops
一起执行,不与 TRUNCATE...
虽然要删除的行数低于“批量大小”(1000),但“有问题”的 sproc 实际上运行正常,因为它永远不需要进入循环两次,但是如果您有很多执行要清理,或者刚刚减少你的保留期——然后它就碰壁了。
关于SSIS 服务器维护作业错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50517509/