DB2 数据库的数据访问问题
本文提供了有关访问 DB2® 数据库的故障诊断提示。
访问 DB2 数据库时您遇到哪类问题?
- 连接到数据库时发生 Kerberos 登录错误
- SQL0567N "DB2ADMIN" 不是有效的授权标识。 SQLSTATE=42602
- SQL0805N 找不到程序包名
- SQL0805N 未找到软件包“NULLID.SQLLC300”。 SQLSTATE=51002
- SQL30082N 尝试建立连接失败,安全原因为 "17" ("SUPPORTED FUNCTION") SQLSTATE=08001
- SQLException ,带有 ErrorCode -99,999 和 SQLState 58004 ,带有 Java
- 错误消息 java.lang.reflect.InvocationTargetException: com.ibm.ws.exception.WsException: DSRA0023E
- CLI0119E 系统错误
- COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/NT] SQL0911N
- 找不到数据源 ([data-source-name]) 的COM.ibm.db2.jdbc.DB2ConnectionPoolDataSource
尝试在实体的其中一个字段中发布或查询长度超过 255 个字符的实体时,返回错误 10500 (E_Fatal)
- java.sql.SQLException: 装入 T2 本机库文件时出现故障 db2jcct2 DSRA0010E: SQL 语句 = null,错误代码 = -99,999
- 数据源实现类型为 XA 时数据库中发生锁定争用异常
- “DSRA8050W: 当尝试在混合发布单元格中使用 数据源时,会出现 "无法找到指定的 类 "异常。 DB2 Universal DataStoreHelper
- 在同时安装了 WebSphere Application Server 的 Windows 机器上尝试访问 DB2 时,发生错误 "'SYSTEM' 不是有效的授权标识"
- 在一个阶段事务回滚后,DB2 通用 JDBC 驱动程序类型 4 中的 XA 准备调用上发生 XAException: XAER_NOTA
- 由于 JDBC 驱动程序文件版本不兼容导致对应用程序客户机记录 java.rmi.MarshalException
- 数据库故障导致对使用 DB2 通用驱动程序类型 4 的应用程序触发有问题的 -99999 异常
- 使用 DB2 通用 JDBC 驱动程序时无法访问 Linux 上的 DB2
- 容器管理的持久性 bean 中任何 VARCHAR FOR BIT DATA 列上发生非法转换
连接到数据库时发生 Kerberos 登录错误
- Enterprise JavaBeans (EJB) 3.0 bean 中的注入语句为属性级别。
- persistence.xml 文件未调出与您连接的数据库相关的元数据信息。
- 数据源上的组件管理的别名无效。
- 数据库设置为使用一次性安全性机制,例如,典型用户标识和密码机制以外的机制,如 Kerberos。
在 EJB 3.0 bean 的注入期间,Java Persistence API (JPA) persistence.xml 文件尝试连接到数据库以查找元数据。 要进行连接,Java™ 2 连接器 (J2C) 从安全上下文中请求主体集。 在此方案中,未调用为将信息放入安全上下文中而调用的安全性协作 API,并且返回的主体集中不包含 GSSCredentials。
调用应在 EJB 容器中进行,但 EJB 容器未调用协作 API,因为安全性 API 需要的完全构建 bean 不存在。 此外,EJB 3.0 规范明确说明,bean 构建不应在已定义的安全上下文中进行。 由于安全性 API 的设计和 EJB 3.0 规范的指导,EJB 容器未调用安全性协作 API,因此,安全上下文不知道要设置主体集,并且 GSSCredentials 不存在。
缺少 GSSCredentials 导致关系资源适配器 (RRA) 实现使用错误的代码路径;与告知 DB2 使用 GSSCredential 连接相反,它将使用与组件管理的别名相关联的标识。 结果是,组件管理的别名配置为对 Kerberos 未知的标识;因此,当 DB2 驱动程序将此标识中继转发到数据库时,会发生错误。
Caused by: javax.security.auth.login.FailedLoginException: Login error: com.ibm.security.krb5.KrbException, status code: 6 message: Client not found in Kerberos database at com.ibm.security.jgss.i18n.I18NException.throwFailedLoginException(I18NException.java:25) at com.ibm.security.auth.module.Krb5LoginModule.b(Krb5LoginModule.java:733) at com.ibm.security.auth.module.Krb5LoginModule.c(Krb5LoginModule.java:610) at com.ibm.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:433) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:45) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) at java.lang.reflect.Method.invoke(Method.java:599) at javax.security.auth.login.LoginContext.invoke(LoginContext.java:795) at javax.security.auth.login.LoginContext.access$000(LoginContext.java:209) at javax.security.auth.login.LoginContext$4.run(LoginContext.java:709) at java.security.AccessController.doPrivileged(AccessController.java:251) at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:706) at javax.security.auth.login.LoginContext.login(LoginContext.java:603) at com.ibm.db2.jcc.a.ud.a(ud.java:25)
- 确保注入语句处于
类级别
。这样可以防止您在创建 bean 时尝试进行注入。 持久性上下文项仍然存储在 Java 命名和目录接口 (JNDI) 中,但不会将这些项放入 bean 对象上的局部变量中。 bean 方法从 JNDI 查找这些持久性上下文项,到那时为止,该 bean 应当运行在正确的安全上下文中,因为 EJB 容器已调用安全性协作 API。
- 使 persistence.xml 文件调出数据库元数据信息。
如果 persistence.xml 文件调出所需数据库元数据信息,那么 JPA 无需连接到数据库以获取这些信息。 这意味着直到访问 bean 方法时才会进行连接。 通过此步骤,安全上下文已正确设置,并且连接可用。
- 验证数据源上的组件管理的别名。
当 JPA 为收集元数据而尝试连接到数据库时,驱动程序回退为使用数据源上设置的组件管理的别名,因为安全上下文尚未配置。 如果确保验证组件管理的别名,那么连接将成功。
- 不要将一次性安全性机制用于数据库安全性。
如果要使用一次性安全性机制,如 Kerberos,那么这不是可选项。 如果数据库未配置为接受标准用户标识和密码认证,那么此问题不会发生。 仅当您的系统需要特殊安全性配置时才会发生此问题。
SQL0567N DB2ADMIN
不是有效的授权标识。 SQLSTATE=42602
- 验证管理控制台的数据源属性页面中您的用户名和密码是否正确。
- 确保该用户标识和密码之前、中间或之后均不包含空白字符。
SQL0805N 未找到软件包 package-name
- 如果程序包名为 NULLID.SQLLC300,请参阅 SQL0805N 程序包 NULLID.SQLLC300 。 SQLSTATE=51002。 原因。
- 您正在尝试在非 XA 就绪的 DB2 数据库上使用支持 XA 的 JDBC 驱动程序。
- DB2 绑定 @db2ubind.lst 阻止所有授权公用
- DB2 bind @db2cli.lst blocking all grant public
db2ubind.lst 和 db2cli.lst 文件位于 DB2 安装根目录的 bnd 目录中。 从该目录运行命令。
SQL0805N 未找到程序包 NULLID.SQLLC300
。 SQLSTATE=51002
- 底层数据库已被删除并且重新创建。
- DB2 已丑化,其程序包未正确重新绑定。
要解决此问题,请通过运行在 bnd 目录中找到的 db2cli.lst 脚本来重新绑定 DB2 程序包。 例如:db2>@db2cli.lst。
SQL30082N 尝试建立连接失败,安全原因为 17
(SUPPORTED FUNCTION
) SQLSTATE=08001
- 客户机将新密码值发送给不支持更改密码功能的服务器。
- 客户机将 SERVER_ENCRYPT 认证信息发送给不支持密码加密的服务器。
- 客户机将用户标识但不带密码发送给了不支持仅通过用户标识认证的服务器。
- 客户机尚未指定认证类型且服务器尚未以支持的类型响应。 这会包括返回客户机无法从中选择的多种类型的服务器。
要解决此问题,确保您的客户机和服务器使用同一安全性机制。 例如,如果这是有关您的数据源的错误,那么验证您是否已指定用户标识和密码或认证别名。
SQLException ,带有 ErrorCode -99,999 和 SQLState 58004 ,带有 Java
SQLException, with ErrorCode -99,999 and SQLState 58004, with Java™ StaleConnectionException: COM.ibm.db2.jdbc.DB2Exception: [ IBM ][CLI驱动程序] CLI0119E 意外系统故障。 SQLSTATE=58004
,使用 WAS40-type 数据源时
- 提供了无效的用户名或密码。
- 数据库名称不正确。
- 某些 DB2 软件包已损坏。
2002-07-26-14.19.32.762905 Instance:db2inst1 Node:000
PID:9086(java) Appid:*LOCAL.db2inst1.020726191932
XA DTP Support sqlxa_open Probe:101
DIA4701E Database "POLICY2" could not be opened
for distributed transaction processing.
String Title: XA Interface SQLCA PID:9086 Node:000
SQLCODE = -1403- 更正您的用户名和密码。 如果在 GUI 上为数据源指定密码,那么确保在 bean 上指定的用户名和密码是正确的。 在 bean 上指定的用户名和密码会覆盖创建数据源时所指定的内容。
- 使用正确的数据库名称。
- 按如下所示重新绑定软件包(在 bnd 目录):
db2connect to dbname c:\SQLLIB\bnd>DB2 bind @db2ubind.lst blocking all grant public c:\SQLLIB\bnd>DB2 bind @db2cli.lst blocking all grant public - 确保 \WebSphere\AppServer\properties\wsj2cdpm.properties 文件具有正确的用户标识和密码。
错误消息 java.lang.reflect.InvocationTargetException: com.ibm.ws.exception.WsException: DSRA0023E
错误消息 java.lang.reflect.InvocationTargetException: com.ibm.ws.exception.WsException: DSRA0023E: 找不到 DataSource 实现类 COM.ibm.db2.jdbc.DB2XADataSource 。 尝试访问 DB2 数据库时
出现这种异常的一个可能原因是,用户试图使用 JDBC 2.0 DataSource, ,但 DB2 并非 JDBC 2.0-enabled。 这种情况经常发生在 DB2 的新安装中,因为 DB2 为 JDBC 1.X 和 2.0,具有相同的物理文件名。 缺省情况下,JDBC 1.X 驱动程序位于类路径中。
- 在 Windows 系统上,在 DB2 安装根目录中的 java12 目录中查找 inuse 文件。 如果缺少此文件,那么说明您正在使用 JDBC 1.x 驱动程序。
- 在 AIX® 或 Linux®等操作系统上,检查数据源的类路径。 如果类路径未指向 java12 目录中的 db2java.zip 文件,那么说明您正在使用 JDBC 1.x 驱动程序。
- 在 Windows 系统上,停止 DB2。 从 DB2 instalation 根目录中的 java12 目录运行 usejdbc2.bat 文件。 从命令行运行此文件以验证它是否成功完成。
- 在 AIX 或 Linux等操作系统上,更改数据源的类路径以指向 DB2 安装根目录的 java12 目录中的 db2java.zip 文件。
CLI0119E 系统错误
CLI0119E 系统错误。 SQLSTATE=58004 - DSRA8100 : 无法获取 XAconnection 或 DSRA0011E: 异常: COM.ibm.db2.jdbc.DB2Exception: [IBM] [CLI Driver] CLI0119E 意外的系统故障。 SQLSTATE=5800
- 在管理控制台的数据源属性页面上,验证对数据源指定了正确的数据库名称。
- 在定制属性页面上,检查用户名和密码定制属性。 验证它们是否正确。
- 确保该用户标识和密码之前、中间或之后均不包含任何空白字符。
- 检查应用程序例如, D:\WebSphere\AppServer\installedApps\markSection.ear\META-INF\was.policy是否存在 WAS.policy 文件。
- 查看整个异常列表以获得底层 SQL 错误,并使用 DBM 提供商消息参考来查找。
如果在 Red Hat Linux上运行 DB2 时迂到此错误,那么 max queues system wide 参数过低,无法在获取完成事务所需的资源时支持 DB2 。 存在此问题时,异常 J2CA0046E 和 DSRA0010E 会在异常 DSRA8100E 之前。
要更正此问题,请编辑 /proc/sys/kernal/msgmni 文件以将 max queues system wide 参数的值增大到大于 128 的值。
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/NT] SQL0911N
ERROR CODE: -911 COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/NT] SQL0911N 因为死锁或超时,所以当前事务已回滚。 原因码“2”。 SQLSTATE=40001
- 执行以下 DB2 命令:
db2 update monitor switches using LOCK ONdb2 get snapshot for LOCKS on dbName >
directory_name\lock_snapshot.log现在具有 DB2 锁定信息。 - 通过运行以下命令来关闭锁定监视器:
db2 update monitor switches using LOCK OFF
- 查找具有锁定等待状态的应用程序句柄,然后查找保持锁定的代理程序标识以验证代理程序的标识。
- 转至该句柄以验证它是否具有锁定等待状态和对此句柄保持锁定的代理程序标识。 如果它具有与先前的句柄相同的代理程序标识,那么您知道您具有循环锁定(死锁)。
- 如果不需要并发访问,那么检查应用程序并使用较小限制的隔离级别。
- 当更改 accessIntent 值以改变成较低的隔离级别时要小心使用。 此更改会导致数据完整性问题:
- 对于 DB2/UDB V 7.2 和更低发行版,可以从 DB2 命令行窗口设置 DB2_RR_TO_RS 标志以消除不必要的死锁,例如,当 Bean 方法上定义的 accessIntent 限制过多时,例如, PessimisticUpdate。 DB@_RR_TO_RS 设置具有两个影响:
- 如果 RR 是您选择的隔离级别,它有效地降低为 RS。
- 如果选择另一个隔离级别并且 DB2_RR_TO_RS 设置为开,那么扫描跳过已删除但未落实的行,即使此行可能有扫描资格。 跳跃行为影响 RR、读稳定性 (RS) 和游标稳定性 (CS) 隔离级别。
例如,考虑以下场景: 事务 A 使用 column1=10 删除行,事务 B 执行扫描,其中 column1>8 和 column1<12。 DB2_RR_TO_RS 关闭时,事务 B 等待事务 A 落实或回滚。 如果事务 A 回滚,column1=10 的行包 含在事务 B 查询的结果集中。 DB2_RR_TO_RS 打开时,事务 B 不等待事务 A 落实或回滚。 事务 B 立即接 收不包含已删除行的查询结果。 设置 DB2_RR_TO_RS 有效地更改锁定行为,因此避免死锁。
找不到数据源 ([data-source-name]) 的 COM.ibm.db2.jdbc.DB2ConnectionPoolDataSource
此错误用消息“DSRA8040I: 未能连接到数据源”表示。
当 DB2 JDBC 驱动程序的类路径正确设置为 ${DB2_JDBC_DRIVER_PATH}/db2java.zip 但未设置环境变量 DB2_JDBC_DRIVER_PATH 时,通常会发生此错误。
如果您正在使用 DB2 V 7.1 或 7.2 并且尚未运行 usejdbc2,那么也会发生此错误。 如果路径正确但仍然会接收到此错误,那么说明这可能是个问题。
- 转至 "管理 WebSphere® 变量" 页面。
- 选择环境以验证是否没有变量 DB2_JDBC_DRIVER_PATH 条目。
要纠正此问题,请执行以下操作:添加变量 DB2_JDBC_DRIVER_PATH,该变量的值等于包含 db2java.zip 文件的目录路径。
尝试发布或查询其中一个字段超过 255 个字符的实体时返回错误 10500 (E_Fatal)
当您尝试发布或查询它的一个字段超过 255 个字符的实体时,通常会发生此错误。 使用非英语字符时这个问题不明显,因为显示 255 个可视字符之前就达到了实限制。
要解决此问题: 在 z/OS®上使用 DB2 V 7 时接受此限制。 请勿超过 255 个字符的限制。
java.sql.SQLException: 装入 T2 本机库文件时出现故障 db2jcct2 DSRA0010E: SQL 语句 = null,错误代码 = -99,999
- 安装 DB2后未重新引导机器。 重新引导报告错误的机器并再试一次。
- 执行的数据库操作与配置的数据源使用不同的作用域。 例如,对于存在于服务器级别上的数据源,testConnection 命令在节点级别上运行。 在机器上查找 db2profile 脚本,并确保环境包含指向 DB2 本机库的指针。 db2profile 脚本存在于 DB2 用户标识的根目录中。 有关 testConnection 命令的更多信息,请参阅“测试连接服务”。
- 没有为运行 WebSphere Application Server的用户正确设置 DB2 上下文。 在机器上查找 db2profile 脚本,并确保环境包含指向 DB2 本机库的指针。
数据源实现类型为 XA 时数据库中发生锁定争用异常
| 症状 | 问题 | 描述 | 建议响应 |
|---|---|---|---|
| 在应用程序通过实现类型为 XA 的数据源访问的 DB2 数据库中发生锁定争用异常。 | 应用程序正在尝试访问被处于已结束 (e) 状态的 XA 事务锁定但无法由事务管理器准备的数据库记录。 | 结束但无法准备的 DB2 XA 事务处于已结束 (e) 状态。 因为不将其视为“不确定”,所以事务管理器无法恢复此事务。 DB2 不会在不确定事务列表中返回该值。 DB2 也不会立即回滚事务; 它会等待直到释放与数据库的所有连接。 在此不活动期间,该事务继续持有数据库的锁定。 例如,如果应用程序服务器不断开来自数据库的所有连接以允许进行回滚,那么已终止的事务仍然锁定同一数据库记录。 如果应用程序尝试访问这些锁定记录,那么 DB2中会发生锁定争用异常。 |
DB2 V 8.2 随附了一个样本应用程序,用于连接到定义的 DB2 服务器,并使用可用的 DB2 API 来获取这些特定已结束事务的列表。 此应用程序提供了使您能指定一个时间的配置设置,过了这个时间此应用程序
就会回滚这些事务。 在 DB2 V 8.2 的 sqllib/samples/db2xamon.c 目录中找到样本应用程序并运行该应用程序。 |
“DSRA8050W: 当尝试在混合发布单元格中使用 数据源时,会出现 "无法找到指定的 类 "异常。 DB2 Universal DataStoreHelper
当您将 WebSphere Application Server 版本 6.0 或更高版本与先前版本结合使用并尝试在先前版本上创建 DB2 Universal 数据源时,通常会发生此错误。
发生此情况的原因可能是 DB2 Universal 数据源在 V 5 和先前版本上不可用,但 V 6 管理控制台允许您构建一个数据源。
要纠正此问题:在 V6.0 或更高版本上创建数据源。
在同时安装了 WebSphere Application Server 的 Windows 机器上尝试访问 DB2 时,发生错误 "SYSTEM" 不是有效的授权标识
在同时安装了 WebSphere Application Server 的 Windows 机器上尝试访问 DB2 时,错误 "SYSTEM" 不是有效的授权标识
消息
| 症状 | 问题 | 描述 | 建议响应 |
|---|---|---|---|
对于使用 DB2 作为后端的 WebSphere Application Server on Windows 安装,您在 JVM 日志中看到以下异常: |
对于 WebSphere Application Server 是 DB2 服务器的客户机的配置,会发生此异常。 底层问题是 Windows 上的 WebSphere Application Server 与 DB2 之间的授权冲突,当应用程序尝试在未提供用户标识和密码的情况下连接到 DB2 时,会发生此冲突。 | 当 DB2 客户机和 DB2 数据库在同一机器上运行时, DB2 允许客户机在没有用户标识和密码的情况下进行连接。 连接在拥有客户机进程(在此示例中为应用程序服务器 JVN)的用户的凭证下进行。 但是,如果 WebSphere Application Server 作为 Windows 服务运行,并且 登录为选项设置为 本地系统帐户,那么应用程序服务器 JVM 将归类为名为 SYSTEM 的特殊 Windows 用户的子组件。 不允许此用户连接到 DB2,导致先前显示的异常。 |
您有两种选择:
|
在一个阶段事务回滚后,DB2 通用 JDBC 驱动程序类型 4 中的 XA 准备调用上发生 XAException: XAER_NOTA
症状
对于使用 DB2 v8.2随附的 DB2 Universal JDBC 驱动程序类型 4 XA 的应用程序,连接可能会失败并触发 XAER_NOTA XAException 错误。 下列代码块是此异常的一个示例:
J2CA0027E: An exception occurred while invoking prepare on an
XA Resource Adapter from dataSource jdbc/SDOSVT, within
transaction ID {XidImpl: formatId(57415344), gtrid_length(36), bqual_length(54),
data(000000ff5191398200000001000000296cac5c42fe3c6838631cbaafc8b5a9253b846544
000000ff5191398200000001000000296cac5c42fe3c6838631cbaafc8b5a9253b8465440000000
10000000000000000000000000002)}:
javax.transaction.xa.XAException: XAER_NOTA
at com.ibm.db2.jcc.a.xb.a(xb.java:1682)
at com.ibm.db2.jcc.a.xb.a(xb.java:841)
at com.ibm.db2.jcc.a.xb.prepare(xb.java:812)
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.prepare(WSRdbXaResourceImpl.java:837)
...
问题
如果在单阶段事务中使用 DB2 Universal JDBC 驱动程序类型 4 XA 连接 (例如,自动落实设置为 false 的本地事务) ,并且该单阶段事务已回滚,那么下次在两阶段事务中使用该连接将在准备调用时失败。
DB2 Universal JDBC 驱动程序类型 4 XA 支持中的问题导致 XA 准备调用失败。 如果已落实单阶段事务,那么不会发生此问题,并且在类型 2 方式下使用 DB2 Universal JDBC 驱动程序时不会发生此问题。
解决方案
升级到 DB2 V 8.2 修订包 1 ,这等同于 V 8.1 修订包 8。 随这些发行版提供的通用 JDBC 驱动程序 XA 解决了先前描述的类型为 4 方式的问题。
由于 JDBC 驱动程序文件版本不兼容导致对应用程序客户机记录 java.rmi.MarshalException
症状
对于包含应用程序客户机的应用程序,应用程序服务器的客户机日志文件中显示以下错误消息:
java.rmi.MarshalException: CORBA MARSHAL 0x4942f89a No; nested exception is: org.omg.CORBA.MARSHAL: Unable to read value from underlying bridge : Mismatched serialization UUID: 源 (Rep. IDRMI:com.ibm.db2.jcc.c.SqlException:63EEE52211DCD763:82CE0C0DA2B0A000) = 82CE0C0DA2B0A000 ,而目标 (Rep. 标识 RMI:com.ibm.db2.jcc.c.SqlException:63EEE52211DCD763:91C6171BC645E41B) = 91C6171BC645E41B vmcid: 0x4942f000 minor code: 2202 completed: No
问题
应用程序客户机上和应用程序服务器上的 db2jcc.jar 文件来自相互不兼容的 DB2 版本,或者与充当数据存储器的 DB2 版本不兼容。
解决方案
检查应用程序客户机,应用程序服务器和 DB2 服务器上的 db2jcc.jar 文件。 在客户机和应用程序服务器上,安装与 DB2 服务器兼容的相同版本的文件。
数据库故障导致对使用 DB2 通用驱动程序类型 4 的应用程序触发有问题的 -99999 异常
症状
如果使用 DB2 Universal 驱动程序类型 4 来访问 DB2 网络服务器,并且数据库失败,那么数据库服务器将发出通用 -99999 异常以响应每个 JDBC getConnection 请求。 下面摘录的代码中记录了此异常,它可能会导致应用程序中出现意外的行为。
java.sql.SQLException: IO Exception opening socket to server bs8.rchland.ibm.com on port 1527. The DB2 Server may be down.DSRA0010E: SQL State = null, Error Code = -99,999DSRA0010E: SQL State = null, Error Code = -99,999 at com.ibm.db2.jcc.b.a.<init>(a.java:125) at com.ibm.db2.jcc.b.b.a(b.java:1011) at com.ibm.db2.jcc.c.l.<init>(l.java:197) at com.ibm.db2.jcc.b.b.<init>(b.java:258) at com.ibm.db2.jcc.DB2PooledConnection. <init>(DB2PooledConnection.java:44) at com.ibm.db2.jcc.DB2ConnectionPoolDataSource.getPooledConnectionX (DB2ConnectionPoolDataSource.java:80) at com.ibm.db2.jcc.DB2ConnectionPoolDataSource.getPooledConnection (DB2ConnectionPoolDataSource.java:45) at com.ibm.ws.rsadapter.DSConfigurationHelper$1.run (DSConfigurationHelper.java:945)
问题
在类型 4 方式下运行时,某些版本的 DB2 Universal 驱动程序会触发数据库故障的一般异常,而不是 WebSphere Application Server 可以映射到旧连接异常的特定错误代码。 与 DB2 8.1 修订包 6 或修订包 7 以及 DB2 8.2相关联的驱动程序版本发生此问题。
解决方案
升级到 DB2 V 8.2 修订包 1 ,相当于 V 8.1 修订包 8 ,它提供了先前描述的方案中的有效错误代码。 WebSphere Application Server 将此错误代码映射到。 StaleConnectionException,
使用 DB2 通用 JDBC 驱动程序时无法访问 Linux 上的 DB2
症状
java.security.AccessControlException: Access denied (java.lang.RuntimePermission accessClassInPackage.sun.io)
- 如果运行 64 位 Linux:
com.ibm.db2.jcc.b.SqlException: Failure in loading T2 native library db2jcct2
问题
在 Linux 上配置 DB2 以使用通用 JDBC 驱动程序的过程未完成。
解决方案
- 验证 Linux 平台的 Java™ SDK 1.4.2 的设置需求是否已完成。
- 配置开发环境以在具有 DB2 JDBC 支持的 Linux 上构建 Java 应用程序。 有关更多信息,请参阅 DB2 的应用程序开发主题。
- 如果在 Linux/IA64 平台上运行 DB2 ,并且正在使用 DB2 v8.1 修订包 7A,请在 DB2 UDB V 8 FixPak 7a for Linux on IA64 上执行技术说明中描述的其他步骤,以报告缺少的 libdb.so.3 库。 此步骤只对于修订包 7A 是必需的。 对于 DB2 v8.1 修订包 7 或更低版本的 DB2; ,此步骤不是必需的; 对于 DB2 v8.1 修订包 8 或更高版本的 DB2,此步骤不是必需的。
容器管理的持久性 bean 中任何 VARCHAR FOR BIT DATA 列上发生非法转换
当具有容器管理的持久 (CMP) 类型且在 DB2 表上定义了任何 VARCHAR FOR BIT DATA 列的企业 Bean 部署在 DB2 通用 JDBC 类型 4 驱动程序中以持久存储数据时,将在运行时抛出非法转换的 SQLException。 仅当您使用 DB2 通用 JDBC 类型 4 驱动程序并将 deferPrepares 属性设置为 true 时,才会发生此异常。 当 deferPrepares 属性设置为 true 时, DB2 通用 JDBC 类型 4 驱动程序将使用标准 JDBC 数据映射。
当前,生成的部署代码不遵循标准 JDBC 规范映射。 执行时间的故障是因为准备要执行的企业 bean 的工具中存在问题。
- 在数据源配置中,将 deferPrepares 属性设置为 false。
- 如果表具有任何 VARCHAR FOR BIT DATA 或 LONG VARCHAR FOR BIT DATA 列,请勿使用 DB2 通用 JDBC 类型 4 驱动程序。 请参阅 DB2 V8.1 自述文件以获取更多详细信息。