【问题标题】:SSIS Server Maintenance Job errorSSIS 服务器维护作业错误
【发布时间】:2018-11-04 03:55:04
【问题描述】:

我在负责删除旧执行日志的维护作业的 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.

一段时间后,当日志计数超过正常计数时,会导致所有作业因超时而失败。

【问题讨论】:

  • 问题仍然存在。有什么想法吗?

标签: ssis sql-server-agent sql-server-2017


【解决方案1】:

这实际上是 SQL Server 2017 中引入的一个错误。

请参阅存储过程SSISDB.[internal].[cleanup_server_retention_window]

第 175 行有 DEALLOCATE execution_cursor

该语句需要在 WHILE 循环的END 语句之后移动一行。它应该与DROP TABLE #deleted_ops一起执行,而不是与TRUNCATE...一起执行

虽然要删除的行数低于“批量大小”(1000),但“错误”存储过程实际上运行良好,因为它永远不需要进入循环两次,但如果您有很多执行需要清理,或者刚刚缩短了您的保留期 - 然后就碰壁了。

【讨论】:

    【解决方案2】:

    经过一番挣扎,我终于在以下链接中找到了这个神奇的救生查询:

    https://gist.github.com/sqlsimon/63a78ea8688ce9eaee60

    它是如何工作的:

    1. 删除 FK
    2. 截断所有日志表
    3. 终于读取 FK 非常适合我

    感谢西蒙

    【讨论】:

      【解决方案3】:

      免责声明:我是 Vahid 的同事之一。

      显然,错误消息没有提供任何有用的信息。

      这是 SSIS 服务器维护作业的第一步。

      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]
      

      起初,我认为[cleanup_server_retention_window] 可能已在最新版本的 SQL Server 中更新,这导致了错误。但是,事实并非如此。

      然后我搜索了cleanup_server_retention_window 失败,然后这个link 出现了。一些用户建议将SSISDB 的恢复模式切换为简单可以解决问题,并且在这种情况下也有效。因此,如果您面临类似的问题,我建议您也这样做。

      【讨论】:

      • 问题仍然存在 :((
      猜你喜欢
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多