DB2 資料庫的資料存取問題
本文提供存取 DB2® 資料庫的疑難排解提示。
您存取 DB2 資料庫時發生何種問題?
- 連接至資料庫時發生Kerberos 登入錯誤
- SQL0567N "DB2ADMIN" 不是有效的授權 ID。 SQLSTATE=42602
- SQL0805N 找不到套件 package-name
- SQL0805N 找不到套件 "NULLID.SQLLC300"。 SQLSTATE=51002
- SQL30082N 嘗試建立連線失敗,安全原因為 "17" ("UNSUPPORTED 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
- COM.ibm.db2.jdbc.DB2ConnectionPoolDataSource
- java.sql.SQLException: 載入 T2 原生程式庫 db2jcct2 DSRA0010E: SQL State = null , Error Code = -99,999 失敗
- 當資料來源實作類型為 XA 時,資料庫中發生鎖定競用異常狀況
- “DSRA8050W: 嘗試在混合版次 Cell 中使用 DB2 Universal 資料來源時,發生「找不到指定的 DataStoreHelper 類別」異常狀況
- 嘗試在也安裝 WebSphere Application Server 的 Windows 機器上存取 DB2 時,發生錯誤 "'SYSTEM' 不是有效的授權 ID"
- XAException: XAER_NOTA on XA prepare call in DB2 Universal JDBC Driver type 4 after one phase transaction rollback
- 由於 JDBC 驅動程式檔案版本不相容,針對應用程式用戶端記載 java.rmi.MarshalException
- 對於使用 DB2 Universal 驅動程式第 4 類的應用程式,資料庫失敗會觸發有問題的 -99999 異常狀況
- 使用 DB2 Universal JDBC 驅動程式時,無法存取 Linux 上的 DB2
- 在儲存器管理持續性 Bean 中的任何 VARCHAR FOR BIT DATA 直欄上發生不合法轉換
連接至資料庫時發生 Kerberos 登入錯誤
- Enterprise JavaBeans (EJB) 3.0 Bean 中的注入陳述式是在屬性層次。
- persistence.xml 檔案不會呼叫關於您已連接之資料庫的 meta 資料資訊。
- 資料來源上的元件受管理別名無效。
- 資料庫設定為使用一次性安全機制,例如,一般使用者 ID 及密碼機制以外的機制,例如 Kerberos。
在注入 EJB 3.0 Bean 期間, Java 持續性 API (JPA) persistence.xml 檔會嘗試連接資料庫來查閱 meta 資料。 為了建立連線, Java™ 2 Connector (J2C) 會從安全環境定義要求「主題」。 在此實務範例中,未呼叫為了將資訊放入安全環境定義而呼叫的安全協同作業 API ,且會傳回不含 GSSCredentials 的主旨。
應該在 EJB 儲存器中進行呼叫,但 EJB 儲存器未呼叫協同作業 API ,因為安全 API 需要完整建構的 Bean 不存在。 此外, EJB 3.0 規格也明確指出 Bean 建構不應在已定義的安全環境定義中完成。 由於安全 API 的設計和 EJB 3.0 規格的方向, EJB 儲存器未呼叫安全協同作業 API ,因此安全環境定義不知道要設定「主體」,且沒有 GSSCredential。
缺少 GSSCredential 會導致「關聯式資源配接器 (RRA)」實作使用錯誤的程式碼路徑; 它會使用與元件受管理別名相關聯的身分,而不是告訴 DB2 使用 GSSCredential 進行連接。 結果是元件受管理別名配置為 Kerberos 不知道的身分,因此當 DB2 驅動程式將此身分轉遞至資料庫時,發生錯誤。
Caused by: javax.security.auth.login.FailedLoginException: Login error: com.ibm.security.krb5.KrbException,狀態碼: 6 訊息: 在 Kerberos 資料庫中找不到用戶端 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 檔案呼叫資料庫 meta 資料資訊。
如果 persistence.xml 檔呼叫所需的資料庫 meta 資料資訊,則 JPA 不需要連接至資料庫來擷取它。 這表示在存取 Bean 方法之前,不會建立連線。 透過此步驟,安全環境定義已正確設定且連線正常運作。
- 驗證資料來源上的元件受管理別名。
當 JPA 嘗試連接資料庫以收集 meta 資料時,驅動程式會回復使用資料來源上所設定的元件受管理別名,因為尚未配置安全環境定義。 如果您確定要驗證元件受管理別名,連線會成功。
- 請勿將一次性安全機制用於資料庫安全。
如果您想要使用一次性安全機制 (例如 Kerberos) ,則這不是選項。 如果資料庫未配置為接受標準使用者 ID 及密碼鑑別,則不會發生問題。 只有在系統需要特殊安全配置時,才會發生此問題。
SQL0567N DB2ADMIN
不是有效的授權 ID。 SQLSTATE=42602
- 請在管理主控台的資料來源內容頁面中驗證您的使用者名稱和密碼是否正確。
- 請確定使用者 ID 和密碼在之前、之間或之後不包含空白字元。
SQL0805N 找不到套件 package-name
- 如果套件名稱是 NULLID.SQLLC300,請參閱 SQL0805N 找不到套件 NULLID.SQLLC300 。 SQLSTATE=51002. 。
- 您嘗試在未備妥 XA 的 DB2 資料庫上使用已啟用 XA 的 JDBC 驅動程式。
- DB2 bind @db2ubind.lst 區塊傳輸所有授與公用
- DB2 bind @db2cli.lst 區塊傳輸所有授與公用
db2ubind.lst 及 db2cli.lst 檔案位於 DB2 安裝根目錄的 bnd 目錄中。 從該目錄執行指令。
SQL0805N 找不到套件 NULLID.SQLLC300
。 SQLSTATE=51002
- 已捨棄並重建基礎資料庫。
- DB2 已 ugpraded ,且其套件未正確重新連結。
若要解決此問題,請執行在 bnd 目錄中找到的 db2cli.lst Script ,以重新連結 DB2 套件。 例如: db2>@db2cli.lst。
SQL30082N 嘗試建立連線失敗,安全原因為 17
(不受支援的函數
) SQLSTATE=08001
- 用戶端傳送新密碼值給不支援變更密碼功能的伺服器。
- 用戶端將 SERVER_ENCRYPT 鑑別資訊傳送至不支援密碼加密的伺服器。
- 用戶端將使用者 ID (但無密碼) 傳送至不支援僅使用者 ID 鑑別的伺服器。
- 用戶端未指定鑑別類型,且伺服器未回應支援的類型。 這可能包括伺服器傳回用戶端無法從中選擇的多種類型。
若要解決此問題,請確保用戶端和伺服器使用相同的安全機制。 例如,如果這是資料來源的錯誤,請驗證您已指派使用者 ID 及密碼或鑑別別名。
SQLException , ErrorCode -99,999 及 SQLState 58004 ,含 Java
SQLException , ErrorCode -99,999 及 SQLState 58004 ,搭配 Java™ StaleConnectionException: COM.ibm.db2.jdbc.DB2Exception: [IBM] [CLI Driver] 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 檔案具有正確的使用者 ID 和密碼。
錯誤訊息 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。 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 安裝根目錄中的 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
- 在管理主控台的資料來源內容頁面上,驗證在資料來源上指定了正確的資料庫名稱。
- 在自訂內容頁面上,檢查您的使用者名稱及密碼自訂內容。 請驗證它們是否正確。
- 請確定使用者 ID 和密碼在之前、之間或之後不包含任何空白字元。
- 檢查應用程式例如, 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
錯誤碼: -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
- 尋找具有鎖定等待狀態的應用程式控點,然後尋找保留鎖定的代理程式 ID ,以驗證代理程式的 ID。
- 跳至該控點,以驗證其具有鎖定等待狀態,以及保留其鎖定的代理程式 ID。 如果它是與前一個代理程式 ID 相同的代理程式 ID ,則您知道您具有循環鎖定 (死鎖)。
- 如果不需要並行存取,請檢查您的應用程式,並使用限制較少的隔離層次。
- 變更 accessIntent 值以移至較低隔離層次時請小心。 此變更可能會導致資料完整性問題。
- 若為 DB2/UDB 7.2 版及更早版本,您可以從 DB2 指令行視窗設定 DB2_RR_TO_RS 旗標,以消除不必要的死鎖,例如當 Bean 方法上定義的 accessIntent 限制性過強時 (例如,「悲觀更新」)。 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 回復,則交易 B 查詢的結果集中包含 column1=10 的列。 在開啟 DB2_RR_TO_RS 的情況下,交易 B 不會等待交易 A 確定或回復。 交易 B 會立即接收不包含已刪除列的查詢結果。 設定 DB2_RR_TO_RS 會有效地變更鎖定行為,從而避免死鎖。
找不到資料來源 ([data-source-name]) 的 COM.ibm.db2.jdbc.DB2ConnectionPoolDataSource
此錯誤以訊息 DSRA8040I: 無法連接至 DataSource。
當 DB2 JDBC 驅動程式的類別路徑正確設為 ${DB2_JDBC_DRIVER_PATH}/db2java.zip ,但未設定環境變數 DB2_JDBC_DRIVER_PATH 時,通常會發生此錯誤。
如果您使用 DB2 7.1 或 7.2 版,且尚未執行 usejdbc2,則也會發生此錯誤。 如果您的路徑是正確的,但您仍收到此錯誤,則這可能是問題。
- 移至「管理 WebSphere® 變數」頁面。
- 選取 環境 ,以驗證沒有變數 DB2_JDBC_DRIVER_PATH的項目。
若要更正此問題: 請新增變數 DB2_JDBC_DRIVER_PATH ,其值等於包含 db2java.zip 檔案的目錄路徑。
java.sql.SQLException: 載入 T2 原生程式庫 db2jcct2 DSRA0010E: SQL State = null , Error Code = -99,999
- 在安裝 DB2之後,機器未重新開機。 請將收到錯誤的機器重新開機,然後再試一次。
- 所執行的資料庫作業使用與所配置資料來源不同的範圍。 例如, testConnection 指令會針對伺服器層次上存在的資料來源,在節點層次執行。 在機器上尋找 db2profile Script ,並確定環境包含指向 DB2 原生程式庫的指標。 db2profile Script 存在於 DB2 使用者 ID 的根目錄中。 如需 testConnection 指令的相關資訊,請參閱測試連線服務。
- 針對執行 WebSphere Application Server的使用者,未正確設定 DB2 環境定義。 在機器上尋找 db2profile Script ,並確定環境包含指向 DB2 原生程式庫的指標。
當資料來源實作類型為 XA 時,資料庫中發生鎖定競用異常狀況
| 症狀 | 問題 | 說明 | 建議回應 |
|---|---|---|---|
| 在您應用程式透過實作類型 XA 的資料來源所存取的 DB2 資料庫中,發生鎖定競用異常狀況。 | 您的應用程式正在嘗試存取被處於已結束 (e) 狀態但無法由交易管理程式準備的 XA 交易鎖定的資料庫記錄。 | 已結束但無法準備的 DB2 XA 交易處於已結束 (e) 狀態。 因為未將它視為不確定,所以交易管理程式無法回復此交易。 DB2 不會在不確定的交易清單中傳回它。 DB2 也不會立即回復交易; 它會等待直到釋放所有資料庫連線為止。 在此不作為期間,交易會繼續保留資料庫的鎖定。 如果您的應用程式伺服器未切斷資料庫的所有連線以容許回復,則結束的交易會持續鎖定相同的資料庫記錄。 如果您的應用程式嘗試存取這些已鎖定的記錄,則 DB2中會發生鎖定競用異常狀況。 |
DB2 8.2 版隨附範例應用程式,可連接至已定義的 DB2 伺服器,並使用可用的 DB2 API 來取得這些特定結束交易的清單。 應用程式提供配置設定,可讓您指定應用程式回復這些交易之前的時間量。 在 DB2 8.2 版的 sqllib/samples/db2xamon.c 目錄中找到範例應用程式,然後執行它。 |
“DSRA8050W: 找不到指定的 DataStoreHelper 類別" 嘗試在混合版次 Cell 中使用 DB2 Universal 資料來源時發生異常狀況
當您將 WebSphere Application Server 6.0 版或更新版本與舊版一起使用,並嘗試在舊版上建立 DB2 Universal 資料來源時,通常會發生此錯誤。
這可能是因為 DB2 Universal Datasource 在第 5 版和舊版上無法使用,但第 6 版管理主控台可讓您建置一個。
若要更正此問題: 請在 6.0 版或更新版本上建立資料來源。
在同時安裝 WebSphere Application Server 的 Windows 機器上嘗試存取 DB2 時發生錯誤 'SYSTEM' 不是有效的授權 ID
嘗試在也安裝 WebSphere Application Server 的 Windows 機器上存取 DB2 時,發生錯誤 'SYSTEM' 不是有效的授權 ID
訊息
| 症狀 | 問題 | 說明 | 建議回應 |
|---|---|---|---|
對於 Windows 上使用 DB2 作為後端的 WebSphere Application Server 安裝,您會在 JVM 日誌中看到下列異常狀況: |
如果配置中的 WebSphere Application Server 是 DB2 伺服器的用戶端,則會發生此異常狀況。 基礎問題是在 Windows 上的 WebSphere Application Server 與 DB2 之間發生授權衝突,當應用程式嘗試連接至 DB2 時,未提供使用者 ID 及密碼。 | 當 DB2 用戶端與 DB2 資料庫在相同機器上執行時, DB2 容許用戶端在沒有使用者 ID 及密碼的情況下進行連接。 連線是在擁有用戶端程序之使用者的認證下建立: 在此情況下,是應用程式伺服器 JVM。 不過,如果 WebSphere Application Server 以 Windows 服務方式執行,且 登入身分選項設為 本端系統帳戶,則應用程式伺服器 JVM 會分類為稱為 SYSTEM 的特殊 Windows 使用者的子元件。 不容許此使用者連接至 DB2,導致先前顯示的異常狀況。 |
有兩個選項可供選擇:
|
XAException: XAER_NOTA on XA prepare call in DB2 Universal JDBC Driver type 4 after one phase transaction rollback
症狀
對於使用 DB2 v8.2可用的 DB2 Universal JDBC 驅動程式第 4 類 XA 的應用程式,連線可能會失敗並觸發 XAER_NOTA XAException 錯誤。 下列程式碼區塊是此異常狀況的範例:
J2CA0027E: 在上呼叫準備時,發生異常狀況
dataSource jdbc/SDOSVT 中的 XA 資源配接器,在
交易 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 8.2 版 Fix Pack 1 ,這相當於 8.1 版 Fix Pack 8。 這些版本所提供的「通用 JDBC 驅動程式 XA」可解決先前針對第 4 類模式所說明的問題。
由於 JDBC 驅動程式檔案版本不相容,針對應用程式用戶端記載 java.rmi.MarshalException
症狀
對於包含應用程式用戶端的應用程式,下列錯誤訊息會顯示在應用程式伺服器的用戶端日誌檔中:
java.rmi.MarshalException: CORBA MARSHAL 0x4942f89a No; nested exception is: org.omg.CORBA.配置: 無法從基礎橋接器讀取值: 不符的序列化 UID: Source (rep. IDRMI:com.ibm.db2.jcc.c.SqlException:63EEE52211DCD763:82CE0C0DA2B0A000) = 82CE0C0DA2B0A000 而 Target (代表 ID 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 Universal 驅動程式類型 4 的應用程式,資料庫失敗會觸發有問題的 -99999 異常狀況
症狀
如果您使用 DB2 Universal 驅動程式類型 4 來存取 DB2 Network Server ,且資料庫失敗,則資料庫伺服器會發出一般 -99999 異常狀況,以回應每個 JDBC getConnection 要求。 下列程式碼摘錄中所舉例說明的這個異常狀況,可能會在您的應用程式中造成非預期的行為。
java.sql.SQLException: 開啟 Socket 時發生 IO 異常狀況 埠 1527 上的伺服器 bs8.rchland.ibm.com 。 DB2 Server 可能是 down.DSRA0010E: SQL State = null , 錯誤碼 = -99,999DSRA0010E: SQL State = null , 錯誤碼 = -99,999 位於 com.ibm.db2.jcc.b.a.<init>(a.java:125) at com.ibm.db2.jcc.b.b.a(b.java:1011) 位於 com.ibm.db2.jcc.c.l.<init>(l.java:197) 位於 com.ibm.db2.jcc.b.b.<init>(b.java:258) 位於 com.ibm.db2.jcc.DB2PooledConnection。 <init>(DB2PooledConnection.java:44) 位於 com.ibm.db2.jcc.DB2ConnectionPoolDataSource.getPooledConnectionX (DB2ConnectionPoolDataSource.java:80) 位於 com.ibm.db2.jcc.DB2ConnectionPoolDataSource.getPooledConnection (DB2ConnectionPoolDataSource.java:45) at com.ibm.ws.rsadapter.DSConfigurationHelper$1.run (DSConfigurationHelper.java:945)
問題
以第 4 類模式執行時,部分版本的 DB2 Universal Driver 會觸發資料庫失敗的一般異常狀況,而不是 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 Universal JDBC 驅動程式時,無法在 Linux 上存取 DB2
症狀
java.security。AccessControlException: Access denied (java.lang.RuntimePermission accessClassInPackage.sun.io)
- 如果您執行 64 位元 Linux:
com.ibm.db2.jcc.b.SqlException: 載入 T2 原生程式庫 db2jcct2
問題
在 Linux 上配置 DB2 以使用「通用 JDBC 驅動程式」的處理程序未完成。
解決方案
- 驗證 Linux 平台的 Java™ SDK 1.4.2 設定需求是否已完成。
- 配置開發環境,以使用 DB2 JDBC 支援在 Linux 上建置 Java 應用程式。 如需相關資訊,請參閱 DB2 的應用程式開發主題。
- 如果您在 Linux/IA64 平台上執行 DB2 ,並使用 DB2 v8.1 Fix Pack 7A, 執行 DB2 UDB 第 8 版 FixPak 7a for Linux on IA64 報告遺漏 libdb.so.3 程式庫中說明的其他步驟。 只有 Fix Pack 7A才需要此步驟。 DB2 v8.1 Fix Pack 7 或更早版本 DB2; DB2 v8.1 Fix Pack 8 或更新版本的 DB2不需要此步驟。
儲存器管理持續性 Bean 中的任何 VARCHAR FOR BIT DATA 直欄發生無效轉換
如果 Enterprise Bean 的儲存器管理持續性 (CMP) 類型已在 DB2 表格上定義任何 VARCHAR FOR BIT DATA 直欄,部署在 DB2 通用 JDBC 第 4 類驅動程式中,以持續保存資料,則會在執行時期擲出不合法轉換的 SQLException。 只有在您使用 DB2 通用 JDBC 第 4 類驅動程式,且 deferPrepares 內容設為 true 時,才會發生這個異常狀況。 當 deferPrepares 內容設為 true 時, DB2 通用 JDBC 第 4 類驅動程式會使用標準 JDBC 資料對映。
目前,產生的已部署程式碼未遵循標準 JDBC 規格對映。 執行時失敗是因為準備執行 Enterprise Bean 的工具發生問題。
- 在資料來源配置中,將 deferPrepares 內容設為 false。
- 如果您的表格有任何 VARCHAR FOR BIT DATA 或 LONG VARCHAR FOR BIT DATA 直欄,請不要使用 DB2 通用 JDBC 類型 4 驅動程式。 如需詳細資料,請參閱 DB2 V8.1 ReadMe。