【问题标题】:DB2 reset sequence midnight everydayDB2 每天午夜重置序列
【发布时间】:2020-07-26 23:53:38
【问题描述】:

我需要在每个午夜自动重置 DB2 序列。我已经尝试使用示例 1(https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.rtn.doc/doc/r0054371.html)中找到的示例执行管理任务。即使这已执行并显示在 systools.admin_task_list 中,它也没有重置序列在午夜。 systools.admin_task_status 中没有项目。如何获取与管理任务相关的错误?

有没有更简单的方法可以每天重置 DB2 序列?

CALL SYSPROC.ADMIN_TASK_ADD
  ('Reset_sales1_seq',
    CURRENT_TIMESTAMP,
    NULL,
    NULL,
    '0 0 * * *',
    'SYSPROC',
    'ADMIN_CMD',
    'VALUES("ALTER SEQUENCE Sample.sales1_seq RESTART WITH 1")',
    NULL,
    NULL )

【问题讨论】:

  • ... 请注意,这种事情会阻止您进行 24 小时全天候销售,因为转换点附近的交易可能会导致日期和序列号不匹配(可能导致重复- 无论如何,您最终都会在序列中出现漏洞)。您要么需要切换到在“工作日”(通常不是严格的服务器时间)键入的表格版本,要么切换到不需要严格顺序的 GUID/UUID。

标签: db2 sequence reset schedule


【解决方案1】:

您正在使用存储过程 ADMIN_CMD,它只运行特定选择的 命令,如 documentation 中所述。

了解普通 SQL/DDL 和命令之间的区别。

ADMIN_CMD 不能像ALTER SEQUENCE 那样直接运行纯 SQL 语句。

考虑编写一个简单的存储过程以在动态 SQL 中执行 ALTER SEQUENCE 操作,然后直接在 ADMIN_TASK_ADD 中调用该过程。

【讨论】:

    【解决方案2】:

    试试

    CREATE PROCEDURE MYSCHEMA.RESET_SEQUENCE()
    BEGIN
        EXECUTE IMMEDIATE('ALTER SEQUENCE SAMPLE.SALES1_SEQ RESTART WITH 1');
    END
    

    然后

    CALL SYSPROC.ADMIN_TASK_ADD
    ('Reset_sales1_seq',
    CURRENT_TIMESTAMP,
    NULL,
    NULL,
    '0 0 * * *',
    'MYSCHEMA',
    'RESET_SEQUENCE',
    NULL,
    NULL,
    NULL )
    

    【讨论】:

      猜你喜欢
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 2015-09-17
      • 2017-03-24
      • 2016-07-03
      相关资源
      最近更新 更多