找到关于数据库的6705 篇文章

如何查找 DB2 程序中使用的 SQL 语句的优化器选择的访问路径?

Mandalika
更新于 2020年9月11日 12:45:17

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 ... 阅读更多

如何将 DB2 程序的多个版本绑定到一个包中?

Mandalika
更新于 2020年12月1日 04:58:10

689 次浏览

包是 DB2 数据库对象,它保存 COBOL-DB2 程序中使用的 SQL 的可执行形式。包存储在目录表中,并包含与 SQL 语句关联的策略/表/列/谓词。如果在测试环境中有一个 DB2 表 ORDERS_TEST,在生产环境中有一个 ORDERS_PROD,那么我们需要两个版本的 COBOL-DB2 程序(它将访问这些表)——一个用于测试,另一个用于生产。尽管这两个程序将是彼此的完全副本,但唯一的区别在于 SQL 语句。测试版本的程序将使用表 ORDERS_TEST 在 SQL ... 阅读更多

如何在 DB2 程序中实现隔离级别 CS、RR、UR 和 RS?

Mandalika
更新于 2020年9月11日 12:39:53

6K+ 次浏览

隔离级别定义了在 COBOL-DB2 程序中访问的 DB2 数据与另一个并行执行的 COBOL-DB2 程序隔离的程度。DB2 中有 4 种主要类型的隔离级别。游标稳定性 (CS) - 游标稳定性隔离级别仅锁定程序正在访问的当前行。一旦程序移至下一行,前一行的锁就会被释放。游标稳定性仅获取已提交的行供程序访问。这是默认的隔离级别。读稳定性 (RS) - 此隔离级别放置一个 ... 阅读更多

在 COBOL-DB2 程序执行期间实现表级锁

Mandalika
更新于 2020年9月11日 12:34:54

1K+ 次浏览

COBOL-DB2 程序可以通过两种方式将锁放入 DB2 表中。当使用该表的 SQL 语句在程序中执行时。当程序加载到主内存中并准备执行时。它会获取程序中 SQL 语句中使用的所有 DB2 表的锁。要在程序加载到主内存中或分配给线程后获取所有 DB2 表的锁,我们必须使用适当的选项和参数绑定计划。以下是可使用的 JCL 步骤。//BIND ... 阅读更多

在 COBOL-DB2 程序的 SQL 执行期间实现表级锁

Mandalika
更新于 2020年9月11日 12:30:31

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) - ... 阅读更多

COBOL-DB2 程序编译的步骤

Mandalika
更新于 2020年9月11日 12:22:04

10K+ 次浏览

为了准备 COBOL-DB2 程序的执行,我们必须经历某些步骤。这些步骤包括预编译 - 编译 - 绑定 - 链接编辑。预编译是使用实用程序 DSNHPC 完成的。在预编译步骤中,源程序中存在的所有 SQL 语句都将被相应的 COBOL 调用替换。所有 SQL 语句都放在称为数据库资源模块 (DBRM) 的对象中,并传递给 BIND 步骤。修改后的源代码传递到编译步骤。在编译步骤中,修改后的源代码被编译,并生成目标模块。该 ... 阅读更多

在未进行 BIND 的情况下对 DB2 程序进行非 SQL 更改时的执行结果是什么?

Mandalika
更新于 2020年9月11日 12:15:33

271 次浏览

在每次执行 COBOL-DB2 程序时,都会比较加载模块和包/DBRM 的时间戳。如果程序中变量的长度发生更改(并且没有 SQL 更改),并且已编译该程序,则加载模块将具有新生成的时间戳,而另一方面,如果未执行 BIND,则包/DBRM 将具有旧时间戳。当执行此程序时,调用此程序的 JCL 步骤将以 SQL 错误代码 -818 失败。如果我们有一个 COBOL-DB2 程序,其中 SQL 语句永远不会改变 ... 阅读更多

如果 DBRM 和加载模块的时间戳不匹配,结果会怎样?

Mandalika
更新于 2020年12月1日 04:57:26

659 次浏览

当 COBOL-DB2 源代码作为输入在预编译阶段给出时,我们得到 2 个重要组件——DBRM 和修改后的源代码。在修改后的源代码中,SQL 语句被 COBOL 调用替换,DBRM 包含 COBOL-DB2 程序中存在的所有 SQL 语句。预编译器在 DBRM 和修改后的源代码中都插入时间戳。如果 DBRM 直接绑定到计划,则在执行 COBOL-DB2 程序时,系统会比较 DBRM 和加载模块的时间戳。如果时间戳不匹配,则 JCL 步骤 ... 阅读更多

如果 DB2 程序在不同的日期编译和绑定,执行结果是什么?

Mandalika
更新于 2020年9月11日 12:12:19

124 次浏览

程序将成功运行(除非程序中存在逻辑错误),因为时间戳是在预编译期间插入到 DBRM 中的,并且预编译是在编译步骤之前完成的。因此,DBRM 和加载模块将具有相同的时间戳。插入到 DBRM 中的时间戳也进一步传递给包。因此,如果我们使用 DBRM-包-计划组合,在这种情况下,程序也将成功运行,因为整个过程中的时间戳是一致的。

当 DB2 子程序发生更改时,是否需要将其与程序一起绑定?

Mandalika
更新于 2020年9月11日 12:07:32

698 次浏览

当任何 COBOL-DB2 程序预编译时,当前时间戳将插入到 DBRM 中,如果 DBRM 绑定到包,则时间戳将进一步复制到包中。类似地,时间戳也在编译过程中插入到加载模块中。当执行任何 COBOL-DB2 程序时,系统会将加载模块的时间戳与 DBRM/包中的时间戳匹配,如果存在不匹配,则程序将失败。如果 DBRM 直接绑定到计划,即使只有子程序进行了… 阅读更多

广告