DB2 Connect 允许应用程序存取 System/390 和 AS/400 服务器上的 DB2 数据库中的数据。 例如,在 Windows 上运行的应用程序可以存取 DB2 通用数据库 OS/390 版数据库中的数据。可以创建新的应用程序, 或者修改现存的应用程序以在主机或 AS/400 环境中运行。还可以在一个环境中开发应用程序, 并将它们移植至另一个环境。
DB2 Connect 允许您将下列 API 配合主机数据库产品(如 DB2 通用数据库 OS/390 版)使用(条件是该主机数据库产品必须支持该项):
某些 SQL 语句在不同的关系数据库产品中是不同的。 您可能会遇到这样的 SQL 语句:
前两个类别中的 SQL 语句很容易移植, 但是,第三个类别中的那些 SQL 语句将首先需要更改。通常, “数据定义语言”(DDL) 中的 SQL 语句不如“数据处理语言” (DML) 中的 SQL 语句那么容易移植。
DB2 Connect 接受某些不受 DB2 通用数据库支持的 SQL 语句。 DB2 Connect 将这些语句传送至主机或 AS/400 服务器。有关不同平台上的限制的信息(例如,最大列长度),参考 SQL Reference。
若从 OS/390 或 VSE 中移动 CICS 应用程序以在另一个 CICS 产品 (如 CICS AIX 版)下运行,则该应用程序还可使用 DB2 Connect 来存取 OS/390 或 VSE 数据库。 有关细节,参考 CICS/6000 Application Programming Guide 和 CICS Customization and Operation 手册。
当在主机或 AS/400 环境中进行程序设计时,应考虑下列特定因素:
在不同的 IBM 数据库产品中,DDL 语句是不同的, 因为在不同的系统上存储器的处理方式是不同的。在主机或 AS/400 服务器系统上, 在设计数据库与发出 CREATE TABLE 语句之间可以有几个步骤。例如, 一系列语句可以将逻辑对象的设计转换为这些对象在存储器中的物理表示。
当预编译主机或 AS/400 服务器数据库时, 预编译器将许多这样的 DDL 语句传送至主机或 AS/400 服务器。 以上语句将不会对应用程序正在其中运行的系统上的数据库进行预编译。 例如,在 OS/2 应用程序中,CREATE STORGROUP 语句将成功地对 DB2 通用数据库 OS/390 版数据库而不是对“DB2 OS/2 版”数据库进行预编译。
通常,DML 语句是很容易移植的。在各个 IBM 数据库产品中, SELECT、INSERT、UPDATE 和 DELETE 语句是相似的。 大多数应用程序主要使用 DML SQL 语句,这些语句是受 DB2 Connect 程序支持的。
当数字数据被传送至 DB2 通用数据库时,数据类型可能会有所变化。 数字和区位十进制 SQLTYPE(受 DB2 通用数据库 AS/400 版支持)被转换为固定(压缩)十进制 SQLTYPE。
混合字节数据可在同一列中包括扩展 UNIX 代码 (EUC) 字符集、 双字节字符集 (DBCS) 和单字节字符集 (SBCS) 中的字符。 在存储 EBCDIC 格式数据的系统上(OS/390、OS/400、VSE 和 VM), 移出和移入字符分别标记双字节数据的开始和结尾。 在存储 ASCII 格式数据的系统上(例如,OS/2 和 UNIX), 不需要移入和移出字符。
若应用程序将混合字节数据从 ASCII 系统传送至 EBCDIC 系统, 则务必确保有足够的空间用于移位字符。每次将 SBCS 数据转换为 DBCS 数据时, 数据长度都将增加 2 个字节。为了获得更好的可移植性, 在使用混合字节数据的应用程序中使用变长字符串。
在不同的系统上,长型字段(字符串长于 254 个字符)的处理方式是不同的。 主机或 AS/400 服务器可能仅支持一个标量函数子集用于长型字段;例如, DB2 通用数据库 OS/390 版只允许 LENGTH 和 SUBSTR 函数用于长型字段。 另外,对于某些 SQL 语句,主机或 AS/400 服务器可能需要进行不同的处理; 例如,DB2 VSE 版和 VM 版 要求:对于 INSERT 语句,仅应使用主变量、SQLDA 或 NULL 值。
LOB 数据类型受 DB2 Connect 支持。
仅用户定义单值类型受 DB2 Connect 支持。抽象数据类型不受支持。
对于位数据,ROWID 数据类型被 DB2 Connect 作为 VARCHAR 来处理。
DB2 Connect 支持八字节(64 位)整数。BIGINT 内部数据类型用来提供对非常大型的数据库的基本支持,同时还保持数据精度。
每个 IBM 关系数据库管理系统对 GRANT 和 REVOKE SQL 语句提供不同级别的粒度。 检查产品特定的出版物,以验证是否对每个数据库管理系统使用了适当的 SQL 语句。
DB2 Connect 支持 CONNECT TO 和 CONNECT RESET 版本的 CONNECT 语句, 以及不带任何参数的 CONNECT。若应用程序调用 SQL 语句时没有首先执行显式 CONNECT TO 语句, 则对缺省应用程序服务器(若定义了一个的话)执行隐式连接。
当连接数据库时,在 SQLCA 的 SQLERRP 字段中返回标识关系数据库管理系统的信息。 若应用程序服务器是 IBM 关系数据库,则 SQLERRP 的前三个字节包含下列各项之一:
若在使用 DB2 Connect 时发出 CONNECT TO 或空 CONNECT 语句, 则在 SQLCA 的 SQLERRMC 字段中返回的国家代码或地区记号为空白; 在代码页或代码集记号中返回应用程序服务器的 CCSID。
可以通过使用 CONNECT RESET 语句(对于类型 1 连接)、 RELEASE 和 COMMIT 语句(对于类型 2 连接),或 DISCONNECT 语句 (对于连接类型 1 和类型 2 中的任一类型,但不在 TP 监控程序环境中) 来显式地断开连接。
若没有显式地断开连接,而应用程序正常结束, 则 DB2 Connect 将隐式地落实结果数据。
注意: | 应用程序可能会接收到指示错误的 SQLCODE, 但仍正常结束;在这种情况下,DB2 Connect 将落实数据。 若不想落实数据,则必须发出 ROLLBACK 命令。 |
FORCE 命令使您断开所选择用户或所有用户与数据库之间的连接。 主机或 AS/400 服务器数据库支持这样的操作; 可以强制用户脱离 DB2 Connect 工作站。
不同 IBM 关系数据库系统的预编译器有一些区别。 DB2 通用数据库的预编译器在以下方面与主机或 AS/400 服务器预编译器不同:
DB2 Connect 程序支持 DB2 数据库管理程序分块联编选项:
DB2 Connect 程序将在 DB2 数据库管理程序配置文件中定义的块大小用于 RQRIOBLK 字段。 当前 DB2 Connect 版本支持的最大块大小为 32,767。 若在 DB2 数据库管理程序配置文件中指定了更大的值, 则 DB2 Connect 将使用值 32,767,但不会重设 DB2 数据库管理程序配置文件。 对动态 SQL 和静态 SQL 使用相同的块大小,从而以相同的方式来处理分块。
注意: | 大多数主机或 AS/400 服务器系统将动态游标视为模糊游标, 但 DB2 通用数据库系统将某些动态游标视为单值游标。为了避免混淆,可对 DB2 Connect 指定 BLOCKING ALL。 |
通过使用 CLP、控制中心 或 API 来在 DB2 数据库管理程序配置文件中指定块大小, 如 Administrative API Reference 和 Command Reference 中所示。
程序包具有下列属性:
每个主机或 AS/400 服务器系统对这些属性的使用都有限制:
注意: | DB2 Connect 对 DB2 通用数据库 OS/390 版和 DB2 通用数据库 提供了 SET CURRENT PACKAGESET 命令支持。 |
CNULREQD 联编选项覆盖使用 LANGLEVEL 选项指定的零终止字符串的处理。
有关进行准备(LANGLEVEL 选项被设置为 MIA 或 SAA1) 时如何处理零终止字符串的说明,参考Application Development Guide。
缺省情况下,CNULREQD 被设置为 YES。这导致根据 MIA 标准来 解释零终止字符串。若连接至 DB2 通用数据库 OS/390 版服务器, 则强烈建议将 CNULREQD 设置为 YES。您需要联编根据 SAA1 标准编码的应用程序 (对于零终止字符串来说),并将 CNULREQD 选项设置为 NO。 否则,即使零终止字符串是使用设置为 SAA1 的 LANGLEVEL 来准备的, 也将根据 MIA 标准来解释这些字符串。
独立的 SQLCODE 和 SQLSTATE 变量,如 ISO/ANS SQL92 中所定义的那样, 是通过 LANGLEVEL SQL92E 预编译选项而受到支持的。在预编译时将发出 SQL0020W 警告,指示 LANGLEVEL 不受支持。 此警告仅适用于在 Command Reference 中的 LANGLEVEL MIA (它是 LANGLEVEL SQL92E 的子集)下面列示的功能部件。
EBCDIC 和 ASCII 之间的区别将导致在各种数据库产品中的排序顺序不同, 并且还会影响 ORDER BY 和 GROUP BY 子句。 将这些区别减小到最低限度的一种方法是创建模仿 EBCDIC 排序顺序的用户定义排序顺序。 仅当您创建新数据库时,才能指定整理顺序。 有关详情,参考 Application Development Guide、Administrative API Reference 和 Command Reference。
注意: | 现在,数据库表就可以 ASCII 格式存储在 DB2 通用数据库 OS/390 版上。 这允许在 DB2 Connect 与 DB2 通用数据库 OS/390 版之间更快地交换数据,并且不需要提供字段过程, 否则,必须使用字段过程来转换数据以及将数据重新排序。 |
不同系统处理参考约束的方式是不同的:
其他规则随级联级别的不同而有所变化。
数据库服务器执行锁定的方式可能会影响某些应用程序。例如, 围绕着行级锁定和游标稳定性的隔离级别设计的应用程序 不能直接移植至执行页级锁定的系统。由于存在这些基本区别, 应用程序可能需要进行调整。
DB2 通用数据库 OS/390 版和 DB2 通用数据库产品能够使锁定超时, 并发送一个错误返回码以等待应用程序。
对于相似的错误,不同的 IBM 关系数据库产品不会总是生成相同的 SQLCODE。 可以用以下两种方法的任一种来处理此问题:
在各个数据库产品中, SQLSTATE 大致都具有相同的含义,并且这些产品将生成与 SQLCODE 相对应的 SQLSTATE。
缺省情况下, DB2 Connect 将 SQLCODE 和记号从每个 IBM 主机或 AS/400 服务器系统 映射至 DB2 通用数据库系统。若想覆盖缺省映射,或者您正在使用一个没有 SQLCODE 映射的数据库服务器(非 IBM 数据库服务器), 则可以指定您自己的 SQLCODE 映射文件。还可关闭 SQLCODE 映射。
有关详情, 参见SQLCODE 映射。
在各个 IBM 数据库产品中,系统编目会有所不同。通过使用视图可以掩盖许多区别。 有关信息,参见您正在使用的数据库服务器的文档。
通过在 DB2 系列中提供目录查询的相同 API 和结果集的支持, CLI 中的编目功能就可以避免此问题。
不同的 IBM 关系数据库产品处理检索分配时发生的数字转换溢出 的方式可能会不同。例如,考虑从 DB2 通用数据库 OS/390 版和 DB2 通用数据库中 将浮点列取装到整数主变量中的情况。将浮点值转换为整数值时, 可能会发生转换溢出。缺省情况下,DB2 通用数据库 OS/390 版将把警告 SQLCODE 和空值返回给应用程序。 相反,DB2 通用数据库将返回转换溢出错误。建议应用程序通过取装到适当大小的主变量来 避免在检索分配时发生数字转换溢出。
当您准备或联编应用程序时,DB2 Connect 接受下列隔离级别:
这些隔离级别是按照从最高保护到最低保护的次序来列示的。 若主机或 AS/400 服务器不支持您指定的隔离级别, 则使用下一个高些的受支持级别。
表 2显示了每个主机或 AS/400 应用程序服务器上的每个隔离级别的结果。
DB2 Connect | DB2 通用数据库 OS/390 版 | DB2 VSE 版和 VM 版 | DB2 通用数据库 AS/400 版 | DB2 通用数据库 |
---|---|---|---|---|
RR | RR | RR | 注释 1 | RR |
RS | 注释 2 | RR | COMMIT(*ALL) | RS |
CS | CS | CS | COMMIT(*CS) | CS |
UR | 注释 3 | CS | COMMIT(*CHG) | UR |
NC | 注释 4 | 注释 5 | COMMIT(*NONE) | UR |
记录:
|
若应用程序与隔离级别 UR 联编且分块被设置为 ALL, 或者隔离级别被设置为 NC,则借助 DB2 通用数据库 AS/400 版,就可以存取未记入日志的表。
客户机程序可以通过发出 SQL CALL 语句来调用服务器程序。 在这种情况下,每个服务器与其他服务器的工作方式有些不同。
当在 REXX/SQL 中实现的 CALL 语句映射为 CALL USING DESCRIPTOR 时,从 REXX/SQL 进行的对“DB2 AS/400 版” 的所有 CALL 语句都必须由应用程序动态准备和执行。
有关 SQL CALL 语句的语法,参考 SQL Reference。有关在编写应用程序时如何使用存储过程的信息, 参考 Application Development Guide。
可以使用服务器程序在 DB2 通用数据库 OS/390 版、DB2 通用数据库 AS/400 版或 DB2 VSE 版和 VM 版上使用的 参数约定来调用 DB2 通用数据库上的服务器程序。有关调用 DB2 通用数据库存储过程的详情, 参考Application Development Guide。 有关其他平台上的参数约定的详情,参考用于该平台的 DB2 产品文档。
存储过程中的所有 SQL 语句都被作为客户机 SQL 程序所启动的 SQL 工作单元的一部分来执行。
在 DB2 通用数据库之间,系统传送您放入指示符变量中的任何内容。 然而,当使用 DB2 Connect 时,您只能传送指示符变量中的 0、-1 和 -128。
DB2 通用数据库上的服务器程序可更新 SQLCA 以返回任何错误或警告, 但是 DB2 通用数据库 OS/390 版或 DB2 通用数据库 AS/400 版上的存储过程不支持这种功能。 若想从存储过程返回错误码,则必须将它作为参数来传送。 对于系统检测到的错误,服务器仅设置 SQLCODE 和 SQLCA。
“DB2 存储过程构建器”提供了易于使用的开发环境, 以创建、安装和测试存储过程。它让您在 DB2 服务器上把重点放在创建存储过程逻辑上, 而不是放在注册、构建和安装存储过程的细节上。 另外, 借助“存储过程构建器”,您可以在一个操作系统上开发存储过程, 而在其他服务器操作系统上构建它们。
“存储过程构建器”是支持快速开发的图形应用程序。 使用“存储过程构建器”,可以执行下列任务:
可以从“DB2 通用数据库”程序组将“存储过程构建器”作为独立的应用程序来启动, 或者,可以从下列任何开发应用程序来启动“存储过程构建器”:
还可以从“DB2 OS/390 版”的“控制中心”启动“存储过程构建器”。 可以从“控制中心工具”菜单、工具栏或“存储过程”文件夹将 “存储过程构建器”作为独立的进程来启动。另外, 从“存储过程构建器项目”窗口中,还可以将对“DB2 OS/390 版” 服务器构建的一个或多个已选择的 SQL 存储过程调出至能够在“命令行处理器”(CLP) 内运行的指定文件中。
“存储过程构建器”通过使用项目来管理您的工作。每个 “存储过程构建器”项目将您的连接保存到特定的数据库中,例如, “DB2 OS/390 版”服务器。另外,还可创建过滤器以显示 每个数据库上存储过程的子集。当打开新的或现存的“存储过程构建器”项目时, 可以过滤存储过程,以便您根据存储过程的名称、模式、语言或集合 ID 来 查看存储过程(仅适用于 OS/390)。
连接信息保存在“存储过程构建器”项目中; 因此,当您打开现存项目时,将自动提示输入用于数据库的用户 ID 和口令。 通过使用“插入 SQL 存储过程”向导, 可在“DB2 OS/390 版”服务器上构建 SQL 存储过程。对于对 “DB2 OS/390 版”服务器构建的 SQL 存储过程, 可设置特定的编译、预链接、链接、联编、运行期、WLM 环境、 以及外部安全性选项。
另外,还可以获得有关 SQL 存储过程的 SQL 成本信息, 包括有关 CPU 时间的信息以及 SQL 存储过程正在其上运行的线程的 DB2 成本信息。 尤其是可以获得有关闭锁/锁定争用等待时间、获取页数、 读 I/O 数和写 I/O 数的成本信息。
要获得成本信息,“存储过程构建器”应连接至“DB2 OS/390 版”服务器、 执行 SQL 语句、调用存储过程 (DSNWSPM) 以了解 SQL 存储过程所使用的 CPU 时间。
复合 SQL 允许将多个 SQL 语句编组在单个可执行块中。 这样可以减少网络额外开销和缩短响应时间。
DB2 Connect 支持 NOT ATOMIC 复合 SQL。这意味着在发生错误之后, 仍继续处理复合 SQL。(对于 ATOMIC 复合 SQL(DB2 Connect 不支持它), 错误将回滚整个复合 SQL 组。)
语句将继续执行,直到被应用程序服务器终止为止。 通常,将仅在发生严重错误时才会停止执行复合 SQL 语句。
NOT ATOMIC 复合 SQL 可以配合所有受支持的主机或 AS/400 应用程序服务器使用。
若发生了多个 SQL 错误,则在 SQLCA 的 SQLERRMC 字段中返回前七个失效语句的 SQLSTATE,并且有一条信息, 指示发生了多个错误。有关详情,请参考SQL Reference。
DB2 Connect 允许您执行多站点更新,也称为两阶段落实。 多站点更新就是更新单个分布式工作单元 (DUOW) 中的多个数据库。 您是否可以使用此功能取决于下列几个因素:
对于本机 DB2 UDB 应用程序以及由外部“事务处理 (TP) 监控程序” (例如 IBM TXSeries、CICS for Open Systems、 BEA Tuxedo、Encina Monitor 和 Microsoft Transaction Server)所协调的应用程序, 会出现上述情况。
注意: | 有关 BEA Tuxedo 的详情, 参见将 DB2 Connect 与事务处理监控程序配合使用。有关 XA 集中器的详情, 参见DB2 Connect 连接集中器。 |
若本机 DB2 应用程序和 TP 监控应用程序都 使用公共 DB2 Connect 企业版服务器来通过 TCP/IP 连接来存取主机数据, 则必须使用同步点管理程序。
若单个 DB2 Connect 企业版服务器用来 通过使用 SNA 和 TCP/IP 网络协议两者来存取主机数据,且需要两阶段落实, 则必须使用同步点管理程序。对于 DB2 应用程序和 TP 监控应用程序,这为真。
对于主机或 AS/400 服务器处理而非 DB2 通用数据库系统的处理, 下列语句编译成功:
命令行处理器也支持这些语句。
对于主机或 AS/400 服务器处理,下列语句是受支持的, 但不被添加至联编文件或程序包,且不受命令行处理器支持:
预编译器作了下列假定:
DB2 Connect 和命令行处理器都不支持下列 SQL:
DB2 VSE 版和 VM 版扩充动态 SQL 语句被拒绝,并返回错误码 -104 和语法错误 SQLCODE。