この項目では、Sybase データ・ソースにアクセスする際のトラブルシューティングのヒントを提供しています。
autocommit(true) モードの問題を解決するには 、Connection.setAutoCommit(false) モードを使用したり 、set chained on 言語コマンドを使用したりして、アプリケーションが 接続をチェーン・モードに変更できるようにします。
ストアード・プロシージャーの問題を解決するには、 コマンド sp_procxmode procedure_name "anymode" を使用します。
このエラーは、分散トランザクション管理 (DTM) がインストールされていないサーバー上で、XA スタイル・トランザクションが試みられると発生します。
このエラーは、予約語の不適切な使用によって生じます。予約語は、列名として使用できません。
この問題を解決するには、変数を名前変更して、予約語を除去します。「Sybase Adaptive Server Enterprise Reference Manual; Volume 1: Building Blocks」の第 4 章で、予約語のリストを検索できます。このマニュアルは、http://manuals.sybase.com/onlinebooks/group-as/asg1250e/refman からオンラインで入手できます。
問題
java.sql.SQLException: JZ0NE: Incorrect URL format
原因
管理コンソールで JDBC プロバイダー・タイプの選択としてリストされている Sybase JDBC ドライバーが IPv6 をサポートしていません。 管理コンソールには、IPv6 環境でデータベースに接続するのに必要なバージョンである、Sybase jConnect JDBC ドライバー v6.0 EBF12884 の事前フォーマット済みのテンプレートは含まれていません。
ただし、管理コンソールを使用して、Sybase jConnect JDBC ドライバー v6.0 EBF12884 を定義することはできます。
解決策
com.sybase.jdbc3.jdbc.SybConnectionPoolDataSource
com.sybase.jdbc3.jdbc.SybXADataSource
SQL Exception: The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the 'tempdb' database. Calling DatabaseMetaData.getBestRowIdentifier()
Sybase ではこの問題を解決するために事例 10880427 を公開しています。
エスケープと DatabaseMetaData メソッドを使用するには、 これらのメソッドを使用する Adaptive Server Enterprise または Adaptive Server Anywhere データベースにストアード・プロシージャーをインストールします。 これらのストアード・プロシージャーは、一部の接続メソッドでも必要です。
escape_name map_string --------------------------------- abs abs(%1) acos acos(%1) asin asin(%1) atan atan(%1) atan2 atn2(%1, %2) ceiling ceiling(%1) :::::::::::::::::::::::::::::::::::::::::::::::::::::::: locate charindex ((convert (varchar, %1)), (convert (varchar, %2)))
java IsqlApp -U sa -P -S jdbc:sybase:Tds:hostname:4100 -I %JDBC_HOME%¥sp¥sql_server12.sql -c go
SVR-ERROR: SQL Exception SELECT INTO command not allowed within multi-statement transaction
Sybase では、この問題を解決するために事例 10868947 を公開しています。
com.sybase.jdbc2.jdbc.SybSQLException: Implicit conversion from data type 'IMAGE' to 'VARBINARY' is not allowed. Use the CONVERT function to run this query.
このエラーは VARBINARY 列のみに関するものであるため、IMAGE 列も存在している場合は混乱が生じます。
// ***************CORRECTION***************************** // setBinaryStream fails for column type of VARBINARY , use setBytes() instead //stmt4.setBinaryStream(8,new java.io.ByteArrayInputStream(tempbyteArray),tempbyteArray.length); stmt4.setBytes(8,tempbyteArray);
アプリケーションでデッドロックが発生すると、 Sybase はデッドロックを検出し、例外をスローします。 この検出により、トランザクション・マネージャーは、 内部の TMFAIL を使用して xa_end を呼び出します。
呼び出しは正常終了しますが、別の Sybase 例外 XAERR_PROTO が生成されます。 この例外はエラー・ログにしか出力されず、機能的な問題は発生しません。 アプリケーションはすべて従来どおり実行されるため、この問題への対処は必要ありません。
Sybase では、この問題を解決するために事例 10869169 を公開しています。
at com.sybase.jdbc2.jdbc.SybXAResource.sendRPC(SybXAResource.java:711) at com.sybase.jdbc2.jdbc.SybXAResource.sendRPC(SybXAResource.java:602) at com.sybase.jdbc2.jdbc.SybXAResource.start(SybXAResource.java:312)
この問題が影響するのは、ローカルおよびグローバルの両方のトランザクションを実行している場合です。ローカル・トランザクション で、autoCommit デフォルト値が false に設定されている場合に、グローバルまたは XA トランザクションが開始されると (ユーザーによるユーザー・トランザクションの開始、またはコンテナーによるコンテナー・トランザクションの開始)、例外が発生します。
この問題は Sybase のバグで、 autoCommit の値にかかわらず start() メソッドは予想外のエラーを発生して異常終了します。 現在、この問題に関する対処法はないため、ローカルとグローバルのトランザクションを一緒に実行しないようにすることをお勧めします。この問題を解決するために、事例 10880792 が公開されています。
データベース名がデータ・ソース・プロパティーに正しく入力されていることを確認してください。
ほとんどのデータベース (DB2、Oracle、Informix、MS SQL Server およ び Cloudscape) は、指定されたデータベースが存在しないと例外をスローします。しかし Sybase は、誤ったデータベース名が指定されても例外をスローしません。Sybase は SQL 警告を生成してから、デフォルトのデータベースに 接続します。要求されたデータベース名のつづりが間違っている場合 、Sybase ではマスター・データベースまたはデフォルトのデータベースに接続されるため、 目的の表が見つからないことになります。
これらのステップのいずれも問題を修正できない場合は、使用可能なオンライン・サポート (ヒント、技術文書、および修正) を見て、問題が判別され、文書化されているかどうかを確認します。そこに問題がリストされていない場合は、IBM サポートに連絡してください。