本節列出使用 DB2 Connect 時最常見的連接問題。在各種問題發生時, 都會提供您:
註:
有時候也可以透過系統日誌來檢視 SNA 感應碼。是否可檢視,都取決於所使用的 SNA 子系統, 但是在某些狀況下,您可能必須啟用 SNA 追蹤來重建問題, 才能取得感應碼資訊。
訊息 SQL0965 及 SQL0969 可以不同的回覆碼從 DB2 Universal Database for AS/400、DB2 Universal Database for OS/390、 DB2 for MVS/ESA 及 DB2 for VM &VSE 發出。
當您遇到其中一個訊息時,您應該在文件中尋找原來的 SQL 碼, 以取得發出該訊息的資料庫伺服器產品。
從主電腦資料庫收到的 SQL 碼無法轉換 請先根據錯誤碼更正問題,然後再重新提出失敗的命令。
符號式目的地名稱尚未定義,或未正確定義。
例如,使用 APPC 節點, 而且在 DB2 節點目錄中指定的符號式目的地名稱與本端 APPC 通信子系統架構中的 CPI-C 登錄不符時, 就會發生這個問題。
另一個原因可能是您的機器上安裝了數個 SNA 堆疊。 您可能需要檢查 PATH 及 LIBPATH, 以確保系統先參照您要使用的堆疊。
SQL1403N 提供的使用者名稱及/或通行碼不正確。
如果需要的話,請確認 CONNECT 陳述式上所提供的通行碼是否正確 (必要時)。
如果不需要的話, 一定是系統資料庫目錄登錄在編目時誤用了 AUTHENTICATION SERVER (如果沒有明確指定 AUTHENTICATION 的話, 則這是預設值)。 如果是這種情況,請使用 AUTHENTICATION DCS 或 CLIENT 重新為該登錄編目。
一或數個通訊協定的支援無法順利啟動。 但核心資料庫管理程式的功能可順利啟動。
或許是在 DB2 Connect 閘道上未啟動 TCP/IP 通訊協定 先前可能已順利啟動從屬站連接。
如果 diaglevel = 4, 則 db2diag.log 中可能含有相同的登錄,例如:
1997-05-30-14.09.55.321092 Instance:svtdbm5 Node:000 PID:10296(db2tcpcm) Appid:none common_communication sqlcctcpconnmgr_child Probe:46 DIA3205E Socket address "30090" configured in the TCP/IP services file and required by the TCP/IP server support is being used by another process.
此警告是表示 DB2 Connect (作為遠端從屬站的閘道) 在處理一或數個從屬站通訊協定時, 遇到麻煩的症狀。 這些通訊協定可以是 TCP/IP、APPC 及其它, 而且通常該訊息表示,定義給 DB2 Connect 的通訊協定之一未正確架構。
通常原因是 DB2COMM 設定檔變數尚未定義,或未正確定義。 一般而言,問題的產生主要是因為定義在資料庫管理程式架構中的名稱 (例如, svcename、nname 或 tpname) 與 DB2COMM 變數不符。
可能的情況之一是,先前已順利連接, 但卻在沒有變更任何架構的狀況下,發生 SQL5043 錯誤訊息。 遠端系統使用 TCP/IP 通訊協定時, 若因某種原因而異常終止連接的話,會發生這種問題 發生這個問題時,連接可能還存在從屬站上, 而且可以發出如下所示的命令, 不需要進一步處理,即可復置該連接。
最有可能的原因是, 其中一個連到閘道的從屬站在 TCP/IP 埠上還有一個 handle。在每一部連到閘道的從屬站機器上:
SQL30020N 執行失敗, 因為發生一個「分散式通訊協定錯誤」,這將會影響後續命令及 SQL 陳述式的順利執行。
連絡服務人員,告知所發生的錯誤。
請檢查 db2dump 目錄,看看有沒有 ffdc 傾出 (pid.000),然後, 用 db2fdump 將這個傾出檔案格式化, 並在結果檔案中搜尋 "ERROR"。 MVS ABEND 可能會列在這裡。在這個情況下,請檢查 MVS 主控台, 取得進一步的資訊,然後在「DB2 for MVS Messages and Codes」一書中查閱異常終止碼。
SQL30060N "<authorization-ID>" 沒有執行作業 "<operation>" 的專用權。
連接到 DB2 for MVS 或 DB2 for OS/390 時, 通信資料庫 (CDB) 表格尚未正確更新 請參閱:
連接到錯誤的主電腦或 AS/400 資料庫伺服器位置 - 找不到目標資料庫。
可能是在 DCS 目錄登錄中指定的伺服器資料庫名稱錯誤。 發生這種錯誤時,會傳回 SQLCODE -30061 給應用程式。
請檢查 DB2 節點、資料庫及 DCS 目錄登錄 DCS 目錄登錄中的目標資料庫名稱欄位,必須根據平台與其資料庫名稱相對應。 例如,若是 DB2 Universal Database for OS/390 資料庫, 則要使用的名稱應該與 Boot Strap Data Set (BSDS) "LOCATION=locname" 欄位中所使用的名稱相同 (在啟動「分散式資料機能」(DDF) 時在 DSNL004I 訊息 (LOCATION=location) 中也有提供)。
DB2 Connect 快速入門一書包含如何更新 DB2 目錄的範例。 請參閱每一章中說明 SNA 架構的「更新 DB2 目錄」段落, 或者參閱「架構 DB2 Connect 的主電腦及 AS/400 資料庫」一章及「架構 TCP/IP 連接」一節。
APPC 或 APPN 節點的正確命令如下:
db2 catalog appc node <node_name> remote <sym_dest_name> security program db2 catalog dcs database <local_name> as <real_db_name> db2 catalog database <local_name> as <alias> at node <node_name> authentication dcs
TCP/IP 節點的正確命令如下:
db2 catalog tcpip node <node_name> remote <host_name_or_address> server <port_no_or_service_name> db2 catalog dcs database <local_name> as <real_db_name> db2 catalog database <local_name> as <alias> at node <node_name> authentication dcs
若要連到資料庫,請發出:
db2 connect to <alias> user <user_name> using <password>
訊息 SQL30073 發出時, 附帶回覆碼 119C。這項錯誤會發生在目標伺服器資料庫不支援 DB2 client 在透過 DB2 Connect 連接時所使用的字碼頁。該字碼頁是從執行 DB2 client 的作業環境架構中衍生出來的。
如需進一步的資訊,請參閱 Administration Guide。
通常,您只要在目標伺服器資料庫系統上安裝修正程式,即可解決這個問題。 請連絡適當的服務組織, 取得並引用可解決此問題的修正程式。
另有暫時解決方案,亦即使用者可以設定 DB2CODEPAGE 環境變數, 置換預設的字碼頁。 請檢查語言環境,或請設定 DB2CODEPAGE=850。
在 UNIX 平台上,使用者可以設定 LANG 環境變數為別的值,切換到別的字碼頁上。
症狀為下列訊息及 SNA 感應碼:
db2 connect to <database name> user <userid> 請輸入 <userid> 的通行碼: SQL30081N 偵測到通信錯誤。 使用的通訊協定:"APPC"。 使用的通信 API:"CPI-C"。 偵測到錯誤的位置:""。 偵測到錯誤的通信功能: "cmallc"。 通訊協定特定的錯誤碼:"1", "*", "0x10030021". SQLSTATE=08001
在這個範例中,感應碼是 10030021。
與此錯誤訊息相關的最常見感應碼,以及每一種情況的建議解決方案如下:
SQL30081N 有回覆碼 1 及感應碼 0877002C
所指定的網路名稱錯誤。
SQL30081N 有回覆碼 1 及 SNA 感應碼 ffff0003
指定了錯誤的 MAC 位址,或 SNA 鏈結不在作用中。
SQL30081N 有回覆碼 1 及 SNA 感應碼 10030021
LU 類型不符。
SQL30081N 有回覆碼 1 及 SNA 感應碼 084B6031
DSNZPARM 中的 MAXDBAT (在 DB2 for MVS 或 DB2 for OS/390 主電腦上) 設定為 0。
其它建議:
收到訊息 SQL30081N,有回覆碼 2 及 SNA 感應碼 08120022。
NCP (鏈結的主電腦端) 的 NUMILU 參數可能設定為預設值 (0)。請檢查是否有此種情形。 必要時, 請修改 NCP 定義,並在變更生效之後,重試此作業。
症狀是如下的訊息 (在此情況下不需要 SNA 感應碼):
db2 connect to <database> user <userid> SQL30081N 偵測到通信錯誤。 使用的通訊協定:"APPC"。 使用的通信 API:"CPI-C"。 偵測到錯誤的位置:""。 偵測到錯誤的通信功能: "cmsend"。通訊協定特定的錯誤碼:"9", "*", "0x10086021"。 SQLSTATE=08001
問題是未正確定義 DB2 Connect 系統上的「異動程式」名稱 (TPNAME)。 例如,您可能已經更新 SNA 架構,但卻未在 DB2 Connect 閘道上加以驗證。如需進一步的詳細資訊, 請參閱 DB2 Connect Enterprise Edition for OS/2 與 Windows NT 快速入門 或 DB2 Connect Personal Edition 快速入門。
症狀是如下的訊息 (不需要 SNA 感應碼):
SQL30081N 偵測到通信錯誤。 使用的通訊協定:"APPC"。 使用的通信 API:"CPI-C"。 偵測到錯誤的位置:""。 偵測到錯誤的通信功能: "cmrcv"。 通訊協定特定錯誤碼:"10", "*", "*"。 SQLSTATE=08001
請檢查確實已正確安裝 DB2。
使用 DB2 Connect for OS/2 閘道時,如果未正確定義 TP 名稱的話, 則您會看到下列訊息:
通訊協定特定的錯誤碼:"10", "*", "0x084C0000"。 SQLSTATE=08001
例如,若 CM/2 中發生這個情況的話,您應該如下定義:
異動程式名稱 = 'tpname' (使用者定義) OS/2 程式路徑及檔名 = notused
以及 (在下一個 CM/2 架構畫面上)
呈現類型 - 背景 作業類型 - 已在佇列中、已預載運算子
SQL30081N 偵測到通信錯誤。 使用的通訊協定:"APPC"。 使用的通信 API:"CPI-C"。 偵測到錯誤的位置:""。 偵測到錯誤的通信功能: "xcstp"。通訊協定特定的錯誤碼:"20", "*", "*"。 SQLSTATE=08001
請確定 DB2 Connect 系統上的 SNA 子系統確實已經啟動。
收到訊息 SQL30081N,有回覆碼 27 及 SNA 感應碼 800Axxxx。
「VTAM 路徑資訊單元」(PIU) 太長。
SQL30081N 偵測到通信錯誤。 使用的通訊協定:"TCP/IP"。使用的通信 API:"SOCKETS"。 偵測到錯誤的位置:""。 偵測到錯誤的通信功能: "connect"。通訊協定特定的錯誤碼:"79", "*", "*"。 SQLSTATE=08001
這個錯誤會發生在遠端從屬站無法連接 DB2 Connect 閘道的情況下。 它也會發生在從 DB2 Connect 閘道連接到主電腦時。
db2 update dbm cfg using diaglevel 4停止並重新啟動 DB2 之後, 請查閱 db2diag.log 檔案,檢查是否已經啟動 DB2 TCP/IP 通信 您應該會看到類似下面的輸出:
1998-02-03-12.41.04.861119 Instance:svtdbm2 Node:00 PID:86496(db2sysc) Appid:none common_communication sqlcctcp_start_listen Probe:80 DIA3000I "TCPIP" 已順利啟動通訊協定支援。
SQL30081N 偵測到通信錯誤。 使用的通訊協定:"TCP/IP"。使用的通信 API:"SOCKETS"。 偵測到錯誤的位置:"9.21.85.159"。 偵測錯誤的通信函數: "send"。 通訊協定特定的錯誤碼: "10032", "*", "*"。 SQLSTATE=08001
在試圖切斷與 TCP/IP 通信已經失敗之機器的連接時,可能會收到這個錯誤訊息。 請使用 TCP/IP 子系統更正問題。
在大部份的機器上,只要重新啟動機器的 TCP/IP 通訊協定就可以更正問題。 偶而,可能也需要重新啟動整部機器。