2016-09-01 13 views
0

私たちは、DB2バージョン5.0のMicrosoft OLE DBプロバイダーを経由してZDB2(メインフレーム)へのリンクサーバーとSQL Serverの2016を使用しています。DB2OLEDBドライバーとエラーメッセージが2016

リンクサーバー(ZDB2)にリモート失敗したSQL文を実行するとエラーの説明がSQLのスタジオでクリアなが、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'. 

が、Javaの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手段のドキュメントはありますか? (私はすでにGoogleで検索)

は、事前にありがとうございます。

答えて

0

Microsofts JDBC Driverを使用している場合、リンクされたサーバーのエラーは、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/codeを置き換えているようです。

-204は、 "は未定義の名前です"(sqlstateおよびコードの前のテキストに記載されているとおり)です。 http://www.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/codes/src/tpc/db2z_n.html

あなたはJavaコードを言及しているため、DB2は、直接接続のためのJDBCドライバを提供していることに注意してください。これは少なくとも、MSドライバがDB2から返されたエラーコードを妨げる可能性を排除するものではありません。一般的には、システム・メンバーであるAFAIKからドライバとライセンス・ファイルを入手する必要がありますが、IBMからは公に提供されていませんが、z/OSのDB2に含まれています。しかし、Microsoftドライバを使用する必要がある理由がない限り、IBMドライバを使用することをお勧めします。私はOLE DB ProviderとJDBCの両方について言及していません。

+0

1)私の質問は、DB2エラーコードと状態についてではありませんでした。 2)DB2 Connectを使用することについて私は同意しますが、DB2 Connectのライセンスは使用しているコアの量が高すぎるため、安価なオプションを選択しました –

関連する問題