Administration Guide

DB2 Universal Database Version 7 Incompatibilities

This section identifies incompatibilities introduced in DB2 Universal Database Version 7.

Application Programming

Query Patroller Universal Client


WIN UNIX OS/2

Change

This new version of the client application enabler (CAE) will only work with Query Patroller Server Version 7, because there are new stored procedures. CAE is the application interface to DB2 through which all applications must eventually pass to access the database.

Symptom

If this CAE is run against a back-level server, message SQL29001 is returned.

Object Transform Functions and Structured Types


WIN UNIX OS/2

Change

There is a minor and remotely possible incompatibility between a pre-Version 7 client and a Version 7 server that relates to changes that have been made to the SQLDA. As described in the Application Development Guide, byte 8 of the second SQLVAR can now take on the value X'12' (in addition to the values X'00' and X'01'). Applications that do not anticipate the new value may be affected by this extension.

Resolution

Because there may be other extensions to this field in future releases, developers are advised to only test for explicitly defined values.

Versions of Class and Jar Files Used by the JVM


WIN UNIX OS/2

Change

Previously, once a Java stored procedure or user-defined function (UDF) was started, the Java Virtual Machine (JVM) locked all files given in the CLASSPATH (including those in sqllib/function). The JVM used these files until the database manager was stopped. Depending on the environment in which you run a stored procedure or UDF (that is, depending on the value of the keepdari database manager configuration parameter, and whether or not the stored procedure is fenced), refreshing classes will let you replace class and jar files without stopping the database manager. This is different from the previous behavior.

Changed Functionality of Install, Replace, and Remove Jar Commands


WIN UNIX OS/2

Change

Previously, installation of a jar caused the flushing of all DARI (Database Application Remote Interface) processes. This way, a new stored procedure class was guaranteed to be picked up on the next call. Currently, no jar commands flush DARI processes. To ensure that classes from newly installed or replaced jars are picked up, you must explicitly issue the SQLEJ.REFRESH_CLASSES command.

Another incompatibility introduced by not flushing DARI processes is the fact that for fenced stored procedures, with the value of the keepdari database manager configuration parameter set to "YES", clients may get different versions of the jar files. Consider the following scenario:

  1. User A replaces a jar and does not refresh classes.
  2. User A then calls a stored procedure from the jar. Assuming that this call uses the same DARI process, User A will get an old version of the jar file.
  3. User B calls the same stored procedure. This call uses a new DARI, which means that the newly created class loader will pick up the new version of the jar file.

In other words, if classes are not refreshed after jar operations, a stored procedure from different versions of jars may be called, depending on which DARI processes are used. This differs from the previous behavior, which ensured (by flushing DARI processes) that new classes were always used.

32-bit Application Incompatibility



UNIX

Change

32-bit executables (DB2 applications) will not run against the new 64-bit database engine.

Symptom

The application fails to link. When you attempt to link 32-bit objects against the 64-bit DB2 application library, an operating system linker error message is displayed.

Resolution

The application must be recompiled as a 64-bit executable, and relinked against the new 64-bit DB2 libraries.

Changing the Length Field of the Scratchpad


WIN UNIX OS/2

Change

Any user-defined function (UDF) that changes the length field of the scratchpad passed to the UDF will now receive SQLCODE -450.

Symptom

A UDF that changes the length field of the scratchpad fails. The invoking statement receives SQLCODE -450, with the schema and the specific name of the function filled in.

Resolution

Rewrite the UDF body to not change the length field of the scratchpad.

SQL

Applications that Use Regular Tables Qualified by the Schema SESSION


WIN UNIX OS/2

Change

The schema SESSION is the only schema allowed for temporary tables, and is now used by DB2 to indicate that a SESSION-qualified table may refer to a temporary table. However, SESSION is not a keyword reserved for temporary tables, and can be used as a schema for regular base tables. An application, therefore, may find a SESSION.T1 real table and a SESSION.T1 declared temporary table existing simultaneously. If, when a package is being bound, a static statement that includes a table reference qualified (explicitly or implicitly) by "SESSION" is encountered, neither a section nor dependencies for this statement are stored in the catalogs. Instead, this section will need to be incrementally bound at run time. This will place a copy of the section in the dynamic SQL cache, where the cached copy will be private only to the unique instance of the application. If, at run time, a declared temporary table matching the table name exists, the declared temporary table is used, even if a permanent base table of the same name exists.

Symptom

In Version 6 (and earlier), any package with static statements involving tables qualified by SESSION would always refer to a permanent base table. When binding the package, a section, as well as relevant dependency records for that statement, would be saved in the catalogs. In Version 7, these statements are not bound at bind time, and could resolve to a declared temporary table of the same name at run time. Thus, the following situations can arise:

To summarize, any packages bound in Version 7 with static statements referring to SESSION-qualified tables will no longer perform like static SQL, because they require incremental binding. If, in fact, the application process issues a DECLARE GLOBAL TEMPORARY TABLE statement for a table that has the same name as an existing SESSION-qualified table, view, or alias, references to those objects will always be taken to refer to the declared temporary table.

Resolution

If possible, change the schema names of permanent tables so that they are not "SESSION". Otherwise, there is no recourse but to be aware of the performance implications, and the possible conflict with declared temporary tables that may occur.

The following query can be used to identify tables, views, and aliases that may be affected if an application uses temporary tables:

   select tabschema, tabname from SYSCAT.TABLES where tabschema = 'SESSION'

The following query can be used to identify Version 7 bound packages that have static sections stored in the catalogs, and whose behavior might change if the package is rebound (only relevant when moving from Version 6 to Version 7):

   select pkgschema, pkgname, bschema, bname from syscat.packagedep
      where bschema = 'SESSION' and btype in ('T', 'V', 'I')

Utilities and Tools

Data Links File Manager and File System Filter on Solaris



UNIX

Change

Data Links File Manager and File System Filter are not supported on Solaris OS 2.5.1.

db2set on AIX and Solaris



UNIX

Change

The command "db2set -ul (user level)" and its related functions are not ported to AIX or Solaris.

Connectivity and Coexistence

32-bit Client Incompatibility


WIN UNIX OS/2

Change

32-bit clients cannot attach to instances or connect to databases on 64-bit servers.

Symptom

If both the client and the server are running Version 7 code, SQL1434N is returned; otherwise, the attachment or connection fails with SQLCODE -30081.

Resolution

Use 64-bit clients.


[ Top of Page | Previous Page | Next Page ]