首页 > 解决方案 > 如何从 DB2 表中删除 8000 万行,其中 Where 子句将具有连接查询?

问题描述

我想从 DB2 表中删除 8000 万行数据。

该表在许多 CICS-DB2 程序中使用。我们不能删除表或将所需数量的数据卸载到文件中,然后删除不需要的记录。稍后从文件加载表。因为这将需要 CICS 中断。CISCS 中断是不可能的。

我尝试了不同的方法,例如 DB2 删除游标、即席作业,但所有内容都有 5,000 到 5,00,000 行的限制。

请您建议一种从表中删除行的好方法和优化方法。

标签: db2mainframe

解决方案


将要删除的行的键卸载到平面文件中。您可能手头有一个实用程序来执行此操作,DSNTEP4 或 Syncsort 可以。如果输出不是您需要的格式,您可能需要对其进行后处理。

编写一个批处理程序,读取卸载的键并删除相应的行。参数化程序,以便您可以指定发出 COMMIT 的频率。计算自上次 COMMIT 以来您删除了多少行,当您达到参数阈值时发出另一个 COMMIT。

伪代码...

retrieve COMMIT threshold parm
open key-file
read key-file
loop:
    DELETE WHERE KEY = key from key-file
    count++
    if count = COMMIT threshold parm then 
        COMMIT
        count = 0
    end-if
    read key-file
    if EOF exit loop
end-loop
COMMIT
close key-file

COMMIT 阈值是一个参数,因为您的 DBA 或 CICS Sysprogs 可能会建议您向上或向下调整它以避免锁定争用问题。


推荐阅读