DB2 数据库的数据访问问题

本主题提供了有关访问DB2®数据库。

访问 DB2 数据库时您遇到哪类问题?

连接到数据库时发生 Kerberos 登录错误

如果使用以下方案列表,那么尝试连接到数据库时将发生 Kerberos 登录错误。
  1. Enterprise JavaBeans (EJB) 3.0 bean 中的注入语句为属性级别。
  2. persistence.xml 文件未调出与您连接的数据库相关的元数据信息。
  3. 数据源上的组件管理的别名无效。
  4. 数据库设置为使用一次性安全性机制,例如,典型用户标识和密码机制以外的机制,如 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不是有效的授权 ID。 SQLSTATE=42602

如果您在尝试访问DB2 Universal数据库 (UDB):
  1. 验证管理控制台的数据源属性页面中您的用户名和密码是否正确。
  2. 确保该用户标识和密码之前、中间或之后均不包含空白字符。

SQL0805N 未找到软件包 package-name

这些异常可能的原因是:
要纠正DB2 Universal数据库(UDB),运行此一次性过程,使用db2cmd连接到相关数据库时的接口:
  1. DB2绑定@db2ubind.lst阻止所有授予公共
  2. DB2 bind @db2cli.lst blocking all grant public

db2ubind.lstdb2cli.lst文件位于bnd你的目录DB2安装根目录。 从该目录运行命令。

SQL0805N包裹NULLID.SQLLC300没找到。 SQLSTATE=51002

发生此错误的原因是:
  • 底层数据库已被删除并且重新创建。
  • DB2已升级,且其软件包未正确重新绑定。

要解决此问题,请重新绑定DB2通过运行db2cli.lst脚本位于bnd目录。 例如:db2>@db2cli.lst

SQL30082N由于安全原因,尝试建立连接失败17不支持的功能) SQLSTATE=08001

当客户机指定的安全性机制对于此服务器无效时,会发生此错误。 某些典型示例:
  • 客户机将新密码值发送给不支持更改密码功能的服务器。
  • 客户机将 SERVER_ENCRYPT 认证信息发送给不支持密码加密的服务器。
  • 客户机将用户标识但不带密码发送给了不支持仅通过用户标识认证的服务器。
  • 客户机尚未指定认证类型且服务器尚未以支持的类型响应。 这会包括返回客户机无法从中选择的多种类型的服务器。

要解决此问题,确保您的客户机和服务器使用同一安全性机制。 例如,如果这是有关您的数据源的错误,那么验证您是否已指定用户标识和密码或认证别名。

SQLException,带有ErrorCode-99,999 和 SQLState 58004,使用 Java

SQLException,带有ErrorCode-99,999 和 SQLState 58004,使用 Java™StaleConnectionException: COM.ibm.db2.jdbc.DB2Exception: [ IBM ][CLI 驱动程序] CLI0119E意外的系统故障。 SQLSTATE=58004 ,使用时WAS40-type数据源

意外的系统故障通常是在以 XA 方式(两阶段落实)运行时发生的。 其中许多可能的原因是:
  • 提供了无效的用户名或密码。
  • 数据库名称不正确。
  • 一些DB2软件包已损坏。
要确定您是否有用户名或密码问题,在 db2diag.log 文件中搜索以查看实际的错误消息和 SQL 代码。 类似以下示例的消息(带有 -1403 的 SQLCODE)表明无效的用户标识或密码:
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
要解决这些问题,请执行以下操作:
  1. 更正您的用户名和密码。 如果在 GUI 上为数据源指定密码,那么确保在 bean 上指定的用户名和密码是正确的。 在 bean 上指定的用户名和密码会覆盖创建数据源时所指定的内容。
  2. 使用正确的数据库名称。
  3. 按如下所示重新绑定软件包(在 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
  4. 确保 \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.0DataSource,但DB2不是JDBC 2.0-enabled。 这种情况经常发生在新安装的DB2因为DB2提供单独的驱动程序JDBC 1.X和2.0,具有相同的物理文件名。 缺省情况下,JDBC 1.X 驱动程序位于类路径中。

要确认问题所在:
  • 在 Windows 系统上,查找inuse存档于java12目录中DB2安装根目录。 如果缺少此文件,那么说明您正在使用 JDBC 1.x 驱动程序。
  • 在操作系统上AIX®或者Linux® ,检查数据源的类路径。 如果类路径未指向 java12 目录中的 db2java.zip 文件,那么说明您正在使用 JDBC 1.x 驱动程序。
要更正此问题,请执行以下操作:
  • 在 Windows 系统上,停止DB2 。 跑过usejdbc2.bat文件来自java12目录中DB2安装根。 从命令行运行此文件以验证它是否成功完成。
  • 在操作系统上AIX或者Linux ,将数据源的类路径更改为指向db2java.zip文件在java12你的目录DB2安装根目录。

CLI0119E 系统错误

如果您在尝试访问DB2 Universal数据库(UDB)数据源:
CLI0119E System error.  SQLSTATE=58004 -  DSRA8100 : Unable to get a XAconnection or DSRA0011E: 
Exception: COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] 
CLI0119E  Unexpected system failure. SQLSTATE=5800
  1. 在管理控制台的数据源属性页面上,验证对数据源指定了正确的数据库名称。
  2. 在定制属性页面上,检查用户名和密码定制属性。 验证它们是否正确。
  3. 确保该用户标识和密码之前、中间或之后均不包含任何空白字符。
  4. 检查WAS.policy应用程序存在文件, 例如,D:\WebSphere\AppServer\installedApps\markSection.ear\META-INF\was.policy
  5. 查看整个异常列表以获得底层 SQL 错误,并使用 DBM 提供商消息参考来查找。

如果在运行时遇到此错误DB2在Red HatLinux , 这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

此问题可能是由应用程序引起的DB2死锁,特别是当你访问DB2数据源:
ERROR CODE: -911
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/NT] SQL0911N
因为死锁或超时,所以当前事务已回滚。
原因码“2”。  SQLSTATE=40001
要诊断此问题,请完成下列步骤:
  1. 执行这些DB2命令:
    1. db2 update monitor switches using LOCK ON
    2. db2 get snapshot for LOCKS on dbName >
    directory_name\lock_snapshot.log现在有DB2锁定信息。
  2. 通过运行以下命令关闭锁监视器:db2 update monitor switches using LOCK OFF
要验证是否您有死锁:
  1. 查找具有锁定等待状态的应用程序句柄,然后查找保持锁定的代理程序标识以验证代理程序的标识。
  2. 转至该句柄以验证它是否具有锁定等待状态和对此句柄保持锁定的代理程序标识。 如果它具有与先前的句柄相同的代理程序标识,那么您知道您具有循环锁定(死锁)。
要解决此问题:
  1. 如果不需要并发访问,那么检查应用程序并使用较小限制的隔离级别。
  2. 当更改 accessIntent 值以改变成较低的隔离级别时要小心使用。 此更改会导致数据完整性问题:
  3. 为了DB2/UDB版本7.2和早期版本中,您可以设置DB2_RR_TO_RS旗帜来自DB2命令行窗口,以消除不必要的死锁,例如当accessIntentbean 方法上定义过于严格,例如,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 有效地更改锁定行为,因此避免死锁。

COM.ibm.db2.jdbc.DB2ConnectionPoolDataSource找不到数据源 ([data-source-name])

此错误用消息“DSRA8040I: 未能连接到数据源”表示。

此错误通常发生在DB2 JDBC驱动程序正确设置为${DB2_JDBC_DRIVER_PATH}/db2java.zip但环境变量DB2_JDBC_DRIVER_PATH未设置。

如果您使用DB2版本7.1或者7.2你还没有跑usejdbc2 。 如果路径正确但仍然会接收到此错误,那么说明这可能是个问题。

要确认问题所在:
  1. 进入管理WebSphere变量面板。
  2. 选择环境以验证是否没有变量 DB2_JDBC_DRIVER_PATH 条目。

要纠正此问题,请执行以下操作:添加变量 DB2_JDBC_DRIVER_PATH,该变量的值等于包含 db2java.zip 文件的目录路径。

[z/OS]

尝试发布或查询其中一个字段超过 255 个字符的实体时返回错误 10500 (E_Fatal)

当您尝试发布或查询它的一个字段超过 255 个字符的实体时,通常会发生此错误。 使用非英语字符时这个问题不明显,因为显示 255 个可视字符之前就达到了实限制。

要纠正此问题:接受这是使用中的限制DB2版本 7 z/OS®。请勿超过 255 个字符的限制。

java.sql.SQLException: 装入 T2 本机库文件时出现故障 db2jcct2 DSRA0010E: SQL 语句 = null,错误代码 = -99,999

“装入失败”消息表示发生了下列其中一个问题:
  • 安装后未重新启动计算机DB2 。 重新引导报告错误的机器并再试一次。
  • 执行的数据库操作与配置的数据源使用不同的作用域。 例如,对于存在于服务器级别上的数据源,testConnection 命令在节点级别上运行。 来源db2profile脚本并确保环境包含指向DB2本地库。 这db2profile脚本存在于根目录中DB2用户身份。 有关 testConnection 命令的更多信息,请参阅“测试连接服务”。
  • 这DB2上下文没有为运行的用户正确设置WebSphere Application Server。 来源db2profile脚本并确保环境包含指向DB2本地库。

数据源实现类型为 XA 时数据库中发生锁定争用异常

笔记:由于锁争用异常可能由多种因素引起,因此请考虑以下解释和建议的响应作为消除锁争用问题的可能原因的策略。
表 1. 锁争用错误消息描述及解决方法您有一个选择可以解决这个问题。
症状 问题 描述 建议响应
发生锁争用异常DB2您的应用程序通过实现类型 XA 的数据源访问的数据库。 您的应用程序正在尝试访问由处于结束(e)状态的 XA 事务锁定的数据库记录,但无法由事务管理器做好准备。 XA 事务DB2结束但无法准备,处于结束(e)状态。 因为不将其视为“不确定”,所以事务管理器无法恢复此事务。 DB2不会将其返回到可疑交易列表中。

DB2也不会立即回滚事务;它会等到所有与数据库的连接都被释放。 在此不活动期间,该事务继续持有数据库的锁定。 例如,如果应用程序服务器不断开来自数据库的所有连接以允许进行回滚,那么已终止的事务仍然锁定同一数据库记录。 如果您的应用程序尝试访问这些锁定的记录,则会发生锁争用异常DB2 。

DB2版本8.2附带一个示例应用程序,可连接到定义的DB2服务器并使用可用的DB2 API 来获取这些特定已结束交易的列表。 此应用程序提供了使您能指定一个时间的配置设置,过了这个时间此应用程序 就会回滚这些事务。 在以下位置找到示例应用程序sqllib/samples/db2xamon.c目录DB2版本8.2并运行它。

DSRA8050W:无法找到DataStoreHelper尝试使用时发生类指定的异常DB2 Universal混合发布单元中的数据源

此错误通常发生在您使用WebSphere Application Server版本6.0或更高版本与先前版本结合使用,并尝试创建一个DB2 Universal先前版本的数据源。

发生这种情况的原因是DB2 Universal版本 5 及之前的版本中没有数据源,但是版本 6 管理控制台允许您构建数据源。

要纠正此问题:在 V6.0 或更高版本上创建数据源。

错误SYSTEM 不是有效的授权 ID当尝试访问时DB2在 Windows 机器上WebSphere Application Server也安装了

错误SYSTEM 不是有效的授权 ID尝试访问时的消息DB2在 Windows 机器上WebSphere Application Server也安装了

表 2. 错误信息描述及解决方法有两个选择来解决此问题。
症状 问题 描述 建议响应
为一个WebSphere Application Server在使用的 Windows 安装上DB2作为后端,您会在 JVM 日志中看到以下异常:
java.sql.SQLException: [IBM][CLI 
Driver] SQL0567N "SYSTEM" is 
not a valid authorization ID.  
SQLSTATE=42602 DSRA0010E: 
SQL State = 42602, Error Code
= -567
  at COM.ibm.db2.jdbc.app.
SQLExceptionGenerator.
throw_SQLException
 (Unknown Source)
  at COM.ibm.db2.jdbc.app.
SQLExceptionGenerator.
check_return_code
 (Unknown Source)
  at COM.ibm.db2.jdbc.app.
DB2Connection.connect
 (Unknown Source)
  at COM.ibm.db2.jdbc.app.
DB2Connection.<init>
 (Unknown Source)
  at COM.ibm.db2.jdbc.app.
DB2ReusableConnection.<init>
 (Unknown Source)
  at COM.ibm.db2.jdbc.
DB2PooledConnection.
getConnection
 (Unknown Source)
  at com.ibm.ws.rsadapter.spi.
WSRdbDataSource.getConnection
(WSRdbDataSource.java:1035)
  at com.ibm.ws.rsadapter.spi.
WSManagedConnectionFactoryImpl.
createManagedConnection
(WSManagedConnectionFactoryImpl
.java:937)
  at com.ibm.ejs.j2c.
poolmanager.FreePool.
createManagedConnectionWithMC
Wrapper(FreePool.java:1502)
此异常发生在以下配置中WebSphere Application Server是DB2服务器。 根本问题是WebSphere Application Server在 Windows 上DB2当应用程序尝试连接到DB2无需提供用户ID和密码。 当一个DB2客户端和DB2数据库在同一台机器上运行, DB2允许客户端无需用户 ID 和密码即可连接。 连接在拥有客户机进程(在此示例中为应用程序服务器 JVN)的用户的凭证下进行。 然而,如果WebSphere Application Server作为 Windows 服务运行,并且登录身份选项设置为本地系统帐户,应用程序服务器 JVM 被归类为名为 SYSTEM 的特殊 Windows 用户的子组件。 不允许此用户连接到DB2 ,导致了之前显示的异常。 您有两种选择:
  • 修改WebSphere Application Server服务使用登录身份此帐户的选项,并提供一个具有连接到权限的帐户DB2 。 或
  • 配置您的应用程序服务器以提供凭据DB2使用容器管理或组件管理的身份验证来建立连接。

在一个阶段事务回滚后,DB2 通用 JDBC 驱动程序类型 4 中的 XA 准备调用上发生 XAException: XAER_NOTA

症状

对于使用DB2 UniversalJDBC驱动程序类型 4 XA 可用DB2 v8.2,连接可能会失败并触发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 UniversalJDBC驱动程序类型 4 XA 连接用于单阶段事务(例如,自动提交设置为 false 的本地事务),并且该单阶段事务被回滚,则下次在两阶段事务中使用该连接时,准备调用将失败。

一个问题DB2 UniversalJDBC驱动程序类型 4 XA 支持导致 XA 准备调用失败。 如果单阶段事务已提交,则不会发生此问题,使用DB2 UniversalJDBC驾驶员处于 2 型模式。

解决方案

升级到DB2版本8.2 Fix Pack 1,相当于版本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
UIDs : Source (Rep.
IDRMI:com.ibm.db2.jcc.c.SqlException:63EEE52211DCD763:82CE0C0DA2B0A000)
= 82CE0C0DA2B0A000 whereas Target (Rep. ID
RMI:com.ibm.db2.jcc.c.SqlException:63EEE52211DCD763:91C6171BC645E41B)
= 91C6171BC645E41B  vmcid: 0x4942f000  minor code:
2202  completed: No 

问题

db2jcc.jar应用程序客户端计算机和应用程序服务器上的文件来自以下版本DB2彼此不兼容,或与版本不兼容DB2其功能如同数据存储一样。

解决方案

检查db2jcc.jar应用程序客户端计算机、应用程序服务器和您的DB2服务器。 在客户端计算机和应用程序服务器上,安装与以下版本兼容的相同版本的文件: DB2服务器。

数据库故障导致对使用 DB2 通用驱动程序类型 4 的应用程序触发有问题的 -99999 异常

症状

如果你使用DB2 Universal驱动程序类型 4 用于访问DB2网络服务器,并且您的数据库发生故障,数据库服务器会发出一个通用的 -99999 异常来响应每个JDBCgetConnection要求。 下面摘录的代码中记录了此异常,它可能会导致应用程序中出现意外的行为。

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 Fix Pack 6 或 Fix Pack 7,以及DB2 8.2。

解决方案

升级到DB2版本8.2 Fix Pack 1,相当于版本8.1 Fix Pack 8,在前面描述的场景中提供了有效的错误代码。 WebSphere Application Server将此错误代码映射到StaleConnectionException,正如预期的那样。

使用 DB2 通用 JDBC 驱动程序时无法访问 Linux 上的 DB2

症状

在里面WebSphere Application Server在Linux环境,使用的应用程序DB2 UniversalJDBC驾驶员访问DB2在Linux可能无法连接数据库。 数据库服务器可能会向应用程序服务器错误日志发送以下异常:
  • 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

问题

配置过程DB2在Linux与环球影城合作JDBC驱动程序不完整。

解决方案

  • 验证 Java™ SDK 的设置要求1.4.2为了Linux平台齐全。
  • 配置用于构建 Java 应用程序的开发环境Linux和DB2 JDBC支持。 请参阅应用程序开发主题DB2了解更多信息。
  • 如果你跑DB2在Linux/IA64平台并使用DB2 v8.1修复包7A,执行技术说明中描述的附加步骤DB2 UDB 版本 8FixPak7a为了Linux在IA64失踪libdb.so.3图书馆。 此步骤只对于修订包 7A 是必需的。 此步骤对于DB2 v8.1Fix Pack 7 或更早版本DB2;此步骤对于DB2 v8.1Fix Pack 8 或更高版本DB2。

容器管理的持久性 bean 中任何 VARCHAR FOR BIT DATA 列上发生非法转换

当具有容器管理持久性 (CMP) 类型的企业 bean 在DB2表部署在DB2普遍的JDBC类型4驱动程序来持久化数据,运行时会抛出非法转换的SQLException。 仅当您使用DB2普遍的JDBC 4 型驱动程序和deferPrepares属性被设置为 true。 当。。。的时候deferPrepares属性设置为 true, DB2普遍的JDBC 4 型驱动程序使用标准JDBC数据映射。

当前,生成的部署代码不遵循标准 JDBC 规范映射。 执行时间的故障是因为准备要执行的企业 bean 的工具中存在问题。

要避免接收到此异常,选择下列选项之一:
  • 在数据源配置中,将 deferPrepares 属性设置为 false。
  • 请勿使用DB2普遍的JDBC如果您的表有任何 VARCHAR FOR BIT DATA 或 LONG VARCHAR FOR BIT DATA 列,则使用类型 4 驱动程序。 參閱DB2 V8.1自述文件以了解更多详细信息。