WebSphere Application Server Network Deployment, Version 6.0.x   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows

             目次と検索結果のパーソナライズ化

データ・アクセスの問題 - Sybase データ・ソース

この項目では、Sybase データ・ソースにアクセスする際のトラブルシューティングのヒントを提供しています。

Sybase データベースへのアクセス時に、どのような問題が発生しましたか?

"Sybase Error 7713: Stored Procedure can only be executed in unchained transaction mode" エラー

このエラーは、 以下のいずれかの場合に発生します。
  • JDBC が autocommit(true) モードで接続を試みた。
  • ストアード・プロシージャーが互換モードで作成されていない。

autocommit(true) モードの問題を解決するには 、Connection.setAutoCommit(false) モードを使用したり 、set chained on 言語コマンドを使用したりして、アプリケーションが 接続をチェーン・モードに変更できるようにします。

ストアード・プロシージャーの問題を解決するには、 コマンド sp_procxmode procedure_name "anymode" を使用します。

"JZ0XS: The server does not support XA-style transactions.Please verify that the transaction feature is enabled and licensed on this server."

このエラーは、分散トランザクション管理 (DTM) がインストールされていないサーバー上で、XA スタイル・トランザクションが試みられると発生します。

この問題を解決するには、Sybase マニュアル「Using Adaptive Server Distributed Transaction Management Features」に記載されている指示に従って、 分散トランザクション管理 (DTM) を使用可能にします。このプロシージャーの主なステップは以下のとおりです。
  1. DTM オプションをインストールする。
  2. license.dat ファイルを調べて、 DTM オプションがインストールされたことを確認する。
  3. ライセンス・マネージャーを再始動する。
  4. ISQL で DTM を使用可能にする。
  5. ASE サービスを再始動する。

コンテナー管理パーシスタンス (CMP) Enterprise Bean により例外が発生する

このエラーは、予約語の不適切な使用によって生じます。予約語は、列名として使用できません。

この問題を解決するには、変数を名前変更して、予約語を除去します。「Sybase Adaptive Server Enterprise Reference Manual; Volume 1: Building Blocks」の第 4 章で、予約語のリストを検索できます。このマニュアルは、http://manuals.sybase.com/onlinebooks/group-as/asg1250e/refman からオンラインで入手できます。

Sybase JDBC データ・ソースが、IPv6 環境で「Incorrect URL format」例外が発生して失敗する [バージョン 6.0.1] [バージョン 6.0.2]

問題

管理コンソールを使用して Sybase JDBC データ・ソースを構成し、それを IPv6 環境で使用しようとした場合、以下の例外が起こる可能性があります。
java.sql.SQLException: JZ0NE: Incorrect URL format

原因

管理コンソールで JDBC プロバイダー・タイプの選択としてリストされている Sybase JDBC ドライバーが IPv6 をサポートしていません。 管理コンソールには、IPv6 環境でデータベースに接続するのに必要なバージョンである、Sybase jConnect JDBC ドライバー v6.0 EBF12884 の事前フォーマット済みのテンプレートは含まれていません。

ただし、管理コンソールを使用して、Sybase jConnect JDBC ドライバー v6.0 EBF12884 を定義することはできます。

解決策

以下のステップを実行して、Sybase jConnect JDBC ドライバー v6.0 EBF12884 を定義します。
  1. 管理コンソールで、「リソース」>「JDBC プロバイダー」と進み、「新規作成」をクリックします。
  2. データベース・タイプに「ユーザー定義」を選択します。 これを選択すると、コンソールはプロバイダー・タイプを「ユーザー定義 JDBC プロバイダー」に、実装タイプを「ユーザー定義」に設定します。
  3. 次へ」をクリックして、JDBC プロバイダーの一般の構成ページに移動します。
  4. 「クラスパス」フィールドで、デフォルトの JAR ファイル名を jconn3.jar で置き換えます。
  5. 実装クラス名を以下のように設定します。
    • 1 フェーズ・トランザクションのみをサポートするデータ・ソース実装の場合は、以下のように入力します。
      com.sybase.jdbc3.jdbc.SybConnectionPoolDataSource
    • 2 フェーズ・トランザクションをサポートする実装の場合は、以下のように入力します。
      com.sybase.jdbc3.jdbc.SybXADataSource
  6. 適用」をクリックします。次に「データ・ソース」リンクをクリックします。
  7. 新規作成」をクリックして、データ・ソースの一般プロパティーを定義します。
  8. 一般データ・ソース・プロパティーを定義してから、「適用」をクリックします。 次に「カスタム・プロパティー」リンクをクリックします。
  9. 以下のプロパティーをカスタム・プロパティーとして定義します。 これらのプロパティーを設定するには、「新規作成」をクリックします。 それぞれに対して、プロパティー名および有効な値を入力します。
    • databaseName
    • serverName
    • portNumber

XA トランザクションで DatabaseMetaData.getBestRowIdentifier() メソッドを実行するとエラーが発生する

XA トランザクションで DatabaseMetaData.getBestRowIdentifier() メソッドを実行すると、以下のエラーが発生します。
SQL Exception: The 'CREATE TABLE' command is not allowed within a 
multi-statement transaction in the 'tempdb' database. Calling 
DatabaseMetaData.getBestRowIdentifier() 
現時点では 、Sybase を使用するとこのメソッドは失敗します。 次のメソッドについても、同様の問題が発生します。
  • getBestRowIdentifier()
  • getVersionColumns()
  • getTablePrivileges()
  • getProcedureColumns()
  • getPrimaryKeys()
  • getIndexInfo()
  • getImportedKeys()
  • getExportedKeys()
  • getCrossReference()
  • getColumns()
  • getColumnPrivileges()

Sybase ではこの問題を解決するために事例 10880427 を公開しています。

エスケープと DatabaseMetaData メソッドを使用する場合の Sybase の要件

エスケープと DatabaseMetaData メソッドを使用するには、 これらのメソッドを使用する Adaptive Server Enterprise または Adaptive Server Anywhere データベースにストアード・プロシージャーをインストールします。 これらのストアード・プロシージャーは、一部の接続メソッドでも必要です。

LOCATE () の有無を確認するには、以下のようにします。
  1. Sybase isql コマンド・プロンプトを開きます。
  2. コマンド use master を入力します。
  3. コマンド go を入力します。
  4. SQL コマンドを入力し、jdbc_function_escapes から * を選択します。
  5. コマンド go を入力します。
以下のように表示されます。
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)))
関数が存在しない場合は 、jConnect をバージョン 5.2 EBF 10635 以上にアップグレードし、以下のコマンドを実行します。
java IsqlApp -U sa -P -S jdbc:sybase:Tds:hostname:4100 -I %JDBC_HOME%¥sp¥sql_server12.sql -c go

Sybase の使用時にデータベースのデッドロックと XA_PROTO エラーが発生する

IBM WebSphere Application Server で Sybase を使用する場合は、 データベースのデッドロックとエラーが発生しないように以下のいずれかを実行してください。
  • 接続のトランザクション分離レベルを TRANSACTION_READ_COMMITTED に変更します。共用不能接続または共用可能接続に対する接続の分離レベルを設定し、アセンブリー・ツールを使用して、データ・ソースのリソース参照でその分離レベルを定義します。
  • 以下のいずれかを実行して Sybase を変更します。
    • 既存の表を使用する場合は、alter table table name lock datarows コマンドを使用して表のロック方式を変更し、行ロック・レベルの細分度を設定します。
    • データ行にシステム全体のロック方式を設定すると、それ以降に作成された表はすべてその値を継承し、 データ行のロック方式を使用します。
      注: 元のデータベースおよび表は除去する必要があります。

SELECT INTO コマンドが含まれたストアード・プロシージャーを実行すると例外が発生する

SELECT INTO コマンドが含まれたストアード・プロシージャーを実行しようとすると、 以下の例外が発生します。
SVR-ERROR: SQL Exception SELECT INTO command not allowed within multi-statement transaction

Sybase では、この問題を解決するために事例 10868947 を公開しています。

IMAGE から VARBINARY への変換についてエラーが誤って報告される

以下のエラーが誤って報告されます。
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 列も存在している場合は混乱が生じます。

この問題を回避するには、以下のいずれかを実行してください。
  • PreparedStatement.setBinaryStream() メソッドではなく PreparedStatement.setBytes() メソッドを使用します。
  • setBinaryStream() メソッドを引き続き使用したい場合は、列の型として LONG VARBINARY を使用します。 VARBINARY のサイズの上限は 255 バイトなので、必要に応じてこれを変更してください。
以下に例を示します。
// ***************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);

JDBC 1.0 標準のメソッドがインプリメントされず、使用時に SQL 例外が発生する

以下の JDBC 1.0 標準のメソッドがインプリメントされず、使用時に SQL 例外が発生する
  • ResultSetMetaData.getSchemaName()
  • ResultSetMetaData.getTableName() (テキストとイメージのデータ型の場合のみインプリメントされます)
  • ResultSetMetaData.getCatalogName()

デッドロック・エラーを解決しようとすると、 Sybase トランザクション・マネージャーが異常終了する

アプリケーションでデッドロックが発生すると、 Sybase はデッドロックを検出し、例外をスローします。 この検出により、トランザクション・マネージャーは、 内部の TMFAIL を使用して xa_end を呼び出します。

呼び出しは正常終了しますが、別の Sybase 例外 XAERR_PROTO が生成されます。 この例外はエラー・ログにしか出力されず、機能的な問題は発生しません。 アプリケーションはすべて従来どおり実行されるため、この問題への対処は必要ありません。

Sybase では、この問題を解決するために事例 10869169 を公開しています。

接続の autoCommit 値が false のときに XA トランザクションを開始すると、エラーが発生する

スローされる例外は、 javax.transaction.xa.XAException で、 以下のようなスタック・トレースを伴います。
       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 が公開されています。

データベース名を間違って指定しても 、Sybase が例外をスローしない

データベース名がデータ・ソース・プロパティーに正しく入力されていることを確認してください。

ほとんどのデータベース (DB2、Oracle、Informix、MS SQL Server およ び Cloudscape) は、指定されたデータベースが存在しないと例外をスローします。しかし Sybase は、誤ったデータベース名が指定されても例外をスローしません。Sybase は SQL 警告を生成してから、デフォルトのデータベースに 接続します。要求されたデータベース名のつづりが間違っている場合 、Sybase ではマスター・データベースまたはデフォルトのデータベースに接続されるため、 目的の表が見つからないことになります。

これらのステップのいずれも問題を修正できない場合は、使用可能なオンライン・サポート (ヒント、技術文書、および修正) を見て、問題が判別され、文書化されているかどうかを確認します。そこに問題がリストされていない場合は、IBM サポートに連絡してください。




関連タスク
データ・アクセス・アプリケーションの開発
例: CMP Bean と BMP Bean 間の接続を共用するための IBM 拡張 API の使用
関連資料
データ・アクセスの問題
データ・アクセスの問題 - Oracle データ・ソース
データ・アクセスの問題 - DB2 データベース
データ・アクセスの問題 - SQL サーバー・データ・ソース
データ・アクセスの問題 - Cloudscape データベース
データ・アクセス API に対する拡張機能
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 10:13:28 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/rtrb_dsaccess6.html