应用程序兼容性 (APPLCOMPAT) 级别在 Db2 12

应用程序的应用程序兼容性 (APPLCOMPAT) 级别控制新功能和增强功能的采用和使用,有时还可以减少不兼容更改的影响。 这样做的好处是,您无需立即更新应用程序即可完成 Db2 12 迁移过程。

更改开始激活功能级别 500 或更高级别后,您可以继续运行具有先前版本或特定版本功能和行为的应用程序 Db2 12 功能级别。 更改结束

更改开始当您准备让应用程序以新 Db2 版本或更高 Db2 功能级别的特性和行为运行时,可以为每个应用程序更改其应用程序兼容性级别。 应用程序兼容性级别适用于大多数SQL语句,包括数据定义语句(如CREATE和ALTER语句)以及数据控制语句(如GRANT和REVOKE语句)。更改结束

包的应用程序兼容性级别在绑定包时初始设置,基于以下值:

  1. APPLCOMPAT绑定选项值(如果指定)。 有关更多信息,请参阅 APPLCOMPAT 绑定选项
  2. 如果省略绑定选项,则APPLCOMPAT子系统参数。 有关详细信息,请参阅 APPL COMPAT LEVEL 字段(APPLCOMPAT 子系统参数)

对于静态SQL语句, SYSIBM.SYSPACKAGE 目录表的APPLCOMPAT列存储应用程序兼容性设置。 这种设置会因以下原因而改变:

  • 您为软件包发出REBIND命令,并为APPLCOMPAT选项指定不同的值。 如果省略此选项,则使用软件包的先前值。 如果没有可用值(例如在引入应用程序兼容性之前最后绑定包),则使用 APPLCOMPAT 子系统的参数值。
  • 包裹自动装订。 应用程序兼容性设置为之前的值。 如果没有可用值,则使用APPLCOMPAT子系统的参数值。

对于动态 SQL 语句,CURRENT APPLICATION COMPATIBILITY 特殊寄存器存储应用程序兼容性设置。 这种设置会因以下原因而改变:

  • 如上所述,特殊寄存器初始化为应用程序与软件包的兼容性。
  • 在执行软件包期间,SET CURRENT APPLICATION COMPATIBILITY语句可以更改特殊寄存器。 该值必须等同于或低于该软件包的APPLCOMPAT绑定选项值,若该值为 V12R1M500 或以上。 有关更多信息,请参阅当前应用程序兼容性特殊寄存器

更改开始对于新安装,APPLCOMPAT子系统的默认参数值为 V12R1M500。 但是,您可以指定一个更高的值。 对于迁移环境,默认值来自迁移输入成员。更改结束

提示: 更改开始当您迁移到 Db2 12 或激活任何更高功能级别时,只有在所有应用程序都可以使用 Db2 12 或更高功能级别的SQL功能后,才更改APPLCOMPAT子系统的参数值。 有关详情,请参阅指定默认应用程序兼容性级别更改结束

支持的APPLCOMPAT级别在 Db2 12

Db2 12 在多数情况下支持以下应用程序兼容性级别。

更改开始V12R1M5nn更改结束
更改开始

与已识别的 Db2 12 功能级别的行为兼容。 例如, V12R1M510 指定与最高可用 Db2 12 功能级别兼容。 必须激活同等或更高的功能级别。

更改开始有关每个应用程序兼容性级别中可用的新功能的信息,请参阅 V12R1Mnnn 应用程序兼容性级别更改结束

提示: 更改开始对于使用数据服务器客户端或驱动程序访问 Db2 for z/OS® 的应用程序,可能需要额外的程序准备步骤来提高应用程序兼容性级别。 有关详细信息,请参阅为数据服务器客户端和驱动程序设置应用程序兼容性级别更改结束
更改结束
更改开始V12R1更改结束
更改开始Db2 12 功能 500 级的行为兼容。 该值与指定 V12R1M500 的结果相同。更改结束
V11R1
Db2 11 新功能模式的行为兼容。 迁移到 Db2 12 后,此值与指定 V12R1M100 具有相同的结果。 欲了解更多信息,请访问 V11R1 应用程序兼容性级别
V10R1
DB2® 10 新功能模式的行为兼容。 更多信息,请参阅 V10R1 应用程序兼容性级别
提示: 更改开始为获得最佳效果,请将开发环境配置为使用应用程序在生产环境中运行时的最低应用程序兼容性级别。 对于动态 SQL,请记住考虑客户端和 NULLID 包的应用程序兼容性级别。 如果以较高的应用程序兼容性级别开发和测试应用程序,并尝试以较低的级别在生产中运行,那么在将应用程序部署到生产中时,很可能会遇到 SQL 代码 -4743 和其他错误。更改结束

示例: V10R1 应用程序兼容性

更改开始下面的示例显示了使用应用程序兼容性级别 V11R1 中引入的功能的结果,应用程序兼容性级别设置为 V10R1。 假设APPLCOMPAT子系统的参数值为 V10R1。 CREATE PROCEDURE语句示例未指定APPLCOMPAT关键字。 在此示例中,CREATE TYPE 语句成功执行,但 CREATE PROCEDURE 语句的 SQL 代码为 -4743。更改结束

CREATE TYPE PHONENUMBERS AS VARCHAR(12) ARRAY ??(1000000??)  
DSNT400I SQLCODE = 000,  SUCCESSFUL EXECUTION
CREATE PROCEDURE FIND_CUSTOMERS(                                     
  IN NUMBERS_IN KRAMSC01.PHONENUMBERS,                               
  IN AREA_CODE CHAR(3),                                              
  OUT NUMBERS_OUT KRAMSC01.PHONENUMBERS)                             
    BEGIN                                                            
      SET NUMBERS_OUT =                                              
        (SELECT ARRAY_AGG(T.NUM)                                     
        FROM UNNEST(NUMBERS_IN) AS T(NUM)                            
        WHERE SUBSTR(T.NUM, 1, 3) = AREA_CODE);                      
    END 
DSNT408I SQLCODE = -4743, ERROR:  ATTEMPT TO USE A FUNCTION WHEN THE 
   APPLICATION COMPATIBILITY SETTING IS SET FOR A PREVIOUS LEVEL    

更改开始然后将 CREATE PROCEDURE 语句的 APPLCOMPAT 绑定选项值设置为 V11R1 或更高,语句结果就会成功。更改结束

CREATE PROCEDURE FIND_CUSTOMERS(                                     
  IN NUMBERS_IN KRAMSC01.PHONENUMBERS,                               
  IN AREA_CODE CHAR(3),                                              
  OUT NUMBERS_OUT KRAMSC01.PHONENUMBERS)     
  APPLCOMPAT V11R1                        
    BEGIN                                                            
      SET NUMBERS_OUT =                                              
        (SELECT ARRAY_AGG(T.NUM)                                     
        FROM UNNEST(NUMBERS_IN) AS T(NUM)                            
        WHERE SUBSTR(T.NUM, 1, 3) = AREA_CODE);                      
    END 
DSNT400I SQLCODE = 000,  SUCCESSFUL EXECUTION