2016-09-01 5 views
0

DB2 버전 5.0 용 Microsoft OLE DB Provider를 통해 zDB2 (메인 프레임)에 연결된 서버와 함께 SQL Server 2016을 사용하고 있습니다.DB2OLEDB SQL Server에서 SQLException의 드라이버 및 오류 메시지 2016

링크 된 서버 (zDB2)에서 실패한 SQL 문을 원격으로 실행할 때 오류 설명은 SQL Studio에서는 분명하지만 Java에서는 쓸모가 없습니다. 문 (실종 스키마 이름)의

예 :

OLE DB provider "DB2OLEDB" for linked server "ZDB2" returned message "DB2GRP.TABLENAME IS AN UNDEFINED NAME SQLSTATE: 42704, SQLCODE: -204". 
Msg 7215, Level 17, State 1, Line 6 
Could not execute statement on remote server 'ZDB2'. 

그러나 자바되는 SQLException에서 다음과 같은 결과 :

com.microsoft.sqlserver.jdbc.SQLServerException: Could not execute statement on remote server 'ZDB2'. 
SQL State: S0001 
SQL Error code: 7215 

EXEC (N'UPDATE TABLENAME SET COLUMN1=''SOMEVALUE'' WHERE COLUMN2= ''032'' ') AT ZDB2 

은 SQL Studio에서 다음과 같은 결과를 제공

디버거를 사용하고 SQL Exception 객체를 검사하면 SQLException에 다른 데이터가없는 것 같습니다. 오류.

"원격 서버에서 명령문을 실행할 수 없습니다"외에도 잘못된 SQLException에 대해보다 유용한 설명을 얻으려면 어떻게해야합니까?

그리고 S0001 및 7215의 의미는 무엇입니까? (나는 이미 인터넷 검색)

감사합니다.

답변

0

Microsofts JDBC 드라이버를 사용할 때 SQLException의 일부가 아닌 연결된 서버의 오류가 경고문으로 저장됩니다.

이 내가 그것을 어떻게 있습니다 :

try{ 
    ... 
} catch (SQLException e) { 
    SQLWarning sqlWarning = currentStatement.getWarnings(); 
    if (sqlWarning != null) { 
     warning = sqlWarning.getMessage(); 
    } 
} 
0

S0001 및 7215는 Microsoft JDBC 드라이버의 응답이라고 생각합니다. DB2 오류 정보는 "SQLSTATE : 42704, SQLCODE : -204"이며 Java 출력에 표시되지 않습니다. Microsoft 드라이버가 DB2를 대신 전달하는 대신 자신의 sqlstate/코드로 대체하는 것처럼 보입니다.

-204는 "은 정의되지 않은 이름입니다"(sqlstate 및 코드 이전의 텍스트 참조). http://www.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/codes/src/tpc/db2z_n.html

Java 코드가 언급되었으므로 DB2는 직접 연결을위한 JDBC 드라이버를 제공합니다. DB2가 리턴 한 오류 코드와 MS 드라이버가 충돌 할 가능성을 최소한 제거해야합니다. 일반적으로 시스템 녀석 (AFAIK)으로부터 드라이버 및 라이센스 파일을 받아야하지만 IBM에서 공개적으로 제공하지는 않지만 z/OS 용 DB2에 포함되어 있습니다. 그러나 Microsoft 드라이버를 사용해야하는 이유가 아닌 한 IBM 드라이버를 사용하는 것이 좋습니다. OLE DB 공급자와 JDBC에 대한 언급이 혼란 스럽습니다.

+0

1) 내 질문은 DB2 오류 코드 및 상태에 대한 아니었다. 2) DB2 Connect 사용에 관해서는 동의하지만 DB2 Connect 사용권은 사용중인 코어의 양과 너무 비싸므로 우리는 더 저렴한 옵션을 선택했습니다 –