如何从其中Where子句将具有join查询的DB2表中删除8000万行?

如何从其中Where子句将具有join查询的DB2表中删除8000万行?,db2,mainframe,Db2,Mainframe,我想从DB2表中删除8000万行数据 此表用于许多CICS-DB2程序。我们不能删除表或将所需数量的数据卸载到文件中,然后删除不需要的记录。稍后从文件中加载表。因为这将需要CICS中断。CISC停机是不可能的 我尝试过不同的方法,比如DB2DELETECURSOR,Adhoc作业,但每种方法都有5000到500000行的限制 请您提出一种从表中删除行的优化方法。将要删除的行的键卸载到平面文件中。您可能手头有一个实用程序来执行此操作,DSNTEP4或Syncsort也可以。如果输出的格式不符合您的

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

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

我尝试过不同的方法,比如DB2DELETECURSOR,Adhoc作业,但每种方法都有5000到500000行的限制


请您提出一种从表中删除行的优化方法。

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

编写一个批处理程序,读取卸载的键并删除相应的行。对程序进行参数化,以便指定发出提交的频率。计算自上次提交以来已删除的行数,并在达到参数阈值时发出另一次提交

伪代码

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

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

什么是“Crore”?什么是“lakh”?这个问题似乎与JCL、CICS或VSAM无关,也可能与COBOL无关。当然,从使用的标签来看,绝对应该使用的标签是“大型机”;10万=10万那么为什么不删除50000行的批次?要求一次删除8000万行,或者一次删除1000万行,这样删除记录所需的时间就更少了。如果我批量删除50000条记录,我必须提交1600次作业。最大值我可以将限制设置为500000,这将减少到160次