486 次浏览
访问路径向我们展示了优化器为获取 SQL 查询结果而选择的路径。它让我们了解优化器将使用哪些索引和参数。要获取 COBOL-DB2 程序中 SQL 语句使用的访问路径的详细信息,我们可以在 BIND 步骤中使用 EXPLAIN 选项。以下是可使用的 JCL 步骤。//BIND EXEC PGM=IKJEFT01 //STEPLIB DD DSN=DIS.TEST.LOADLIB, DISP=SHR //SYSOUT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM(TB3) BIND PLAN(PLANA) - PKLIST(PACKA) - ACQUIRE(ALLOCATE) - ISOLATION (RS) - EXPLAIN(YES) /*The EXPLAIN BIND ... 阅读更多
689 次浏览
包是 DB2 数据库对象,它保存 COBOL-DB2 程序中使用的 SQL 的可执行形式。包存储在目录表中,并包含与 SQL 语句关联的策略/表/列/谓词。如果在测试环境中有一个 DB2 表 ORDERS_TEST,在生产环境中有一个 ORDERS_PROD,那么我们需要两个版本的 COBOL-DB2 程序(将访问这些表)——一个用于测试,另一个用于生产。虽然这两个程序将是彼此的完全副本,但唯一的区别在于 SQL 语句。测试版本的程序将使用表 ORDERS_TEST 在 SQL ... 阅读更多
6K+ 次浏览
隔离级别定义了在 COBOL-DB2 程序中访问的 DB2 数据与另一个并行执行的 COBOL-DB2 程序隔离的程度。DB2 中有 4 种主要的隔离级别。游标稳定性 (CS) - 游标稳定性隔离级别只锁定程序正在访问的当前行。一旦程序移到下一行,前一行的锁就会释放。游标稳定性只为程序访问获取已提交的行。这是默认的隔离级别。读稳定性 (RS) - 此隔离级别会放置一个 ... 阅读更多
1K+ 次浏览
COBOL-DB2 程序可以通过两种方式将锁放入 DB2 表中。当使用该表的 SQL 语句在程序内执行时。当程序加载到主内存中并准备执行时。它会获取程序中 SQL 语句中使用的所有 DB2 表的锁。要在程序加载到主内存或分配给线程后获取所有 DB2 表的锁,我们必须使用适当的选项和参数绑定计划。以下是可使用的 JCL 步骤。//BIND ... 阅读更多
885 次浏览
DB2 中的锁是在表和表空间上获取的,以避免因丢失更新、脏读和幻影而产生的问题。我们需要在使用 ACQUIRE 选项的 BIND 包/计划步骤期间定义锁参数。COBOL-DB2 程序 PROGA 使用 SQL 语句访问表 TA。如果我们只需要在程序内执行特定 SQL 语句时才在表上放置锁,那么我们需要将 BIND JCL 步骤定义为如下所示://BIND EXEC PGM=IKJEFT01 //STEPLIB DD DSN=DIS.TEST.LOADLIB, DISP=SHR //SYSOUT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM(TB3) BIND PLAN(PLANA) - ... 阅读更多
10K+ 次浏览
要准备 COBOL-DB2 程序以供执行,我们必须经历某些步骤。这些步骤包括预编译 - 编译 - 绑定 - 链接编辑。预编译是使用实用程序 DSNHPC 完成的。在预编译步骤中,源程序中存在的所有 SQL 语句都将替换为相应的 COBOL 调用。所有 SQL 语句都放在称为数据库资源模块 (DBRM) 的对象中,并传递到 BIND 步骤。修改后的源代码将传递到编译步骤。在编译步骤中,修改后的源代码将被编译并生成目标模块。该 ... 阅读更多
271 次浏览
在每次执行 COBOL-DB2 程序时,都会比较加载模块和包/DBRM 的时间戳。如果程序中变量的长度发生了更改(并且没有 SQL 更改),并且已编译,则加载模块将具有新生成的时间戳,另一方面,如果未执行 BIND,则包/DBRM 将具有旧时间戳。当执行此程序时,调用此程序的 JCL 步骤将失败,并显示 SQL 错误代码 -818。如果我们有一个 COBOL-DB2 程序,其 SQL 语句永远不会更改 ... 阅读更多
659 次浏览
当 COBOL-DB2 源代码作为输入在预编译阶段给出时,我们得到两个重要的组件——DBRM 和修改后的源代码。在修改后的源代码中,SQL 语句被替换为 COBOL 调用,DBRM 包含 COBOL-DB2 程序中存在的所有 SQL 语句。预编译器在 DBRM 和修改后的源代码中都插入时间戳。如果 DBRM 直接绑定到计划,则在执行 COBOL-DB2 程序时,系统会比较 DBRM 和加载模块的时间戳。如果时间戳不匹配,JCL 步骤 ... 阅读更多
124 次浏览
程序将成功运行(除非程序中存在逻辑错误),因为时间戳是在预编译期间插入到 DBRM 中的,并且预编译是在编译步骤之前完成的。因此,DBRM 和加载模块将具有相同的时间戳。插入到 DBRM 中的时间戳也进一步传递到包中。因此,如果我们使用 DBRM-包-计划组合,在这种情况下,程序也将成功运行,因为整个时间戳是一致的。
698 次浏览
任何COBOL-DB2程序在预编译时,当前时间戳都会插入到DBRM中,如果DBRM绑定到一个程序包,则时间戳将进一步复制到该程序包中。类似地,时间戳也会在编译过程中插入到加载模块中。任何COBOL-DB2程序执行时,系统都会将加载模块的时间戳与DBRM/程序包中的时间戳进行匹配,如果两者不匹配,则程序将失败。如果DBRM直接绑定到计划,即使只有子程序发生了更改,我们也需要重新绑定这两个计划——PLANA和PLANB……阅读更多