db2 - 如何从 DB2 表中删除 8000 万行,其中 Where 子句将具有连接查询?
问题描述
我想从 DB2 表中删除 8000 万行数据。
该表在许多 CICS-DB2 程序中使用。我们不能删除表或将所需数量的数据卸载到文件中,然后删除不需要的记录。稍后从文件加载表。因为这将需要 CICS 中断。CISCS 中断是不可能的。
我尝试了不同的方法,例如 DB2 删除游标、即席作业,但所有内容都有 5,000 到 5,00,000 行的限制。
请您建议一种从表中删除行的好方法和优化方法。
解决方案
将要删除的行的键卸载到平面文件中。您可能手头有一个实用程序来执行此操作,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 可能会建议您向上或向下调整它以避免锁定争用问题。
推荐阅读
- java - 如何从keysym代码中获取相应的字符?
- openid-connect - Open ID Connect 多种响应类型
- css - 如何使用正则表达式从下面写的行中获取字符串“css”?
- javascript - 使用 p5.js 构建计算器
- node.js - 解决解析 WSDL 错误时如何修复 Node SOAP 服务
- python - Pyqt5 渲染在每个平台上都不同,我该怎么做才能渲染它们相同?
- android-studio - 在 Android Studio 中运行单个 .kt 文件
- reactjs - 使用 react-vis 的动态列的垂直分组条形图
- php - 文件受密码保护时如何匹配 maatwebsite excel 中的密码?
- vbscript - 当主页是“受信任的站点”时如何使用vbscript登录主页