機械翻訳について

2 Informix Gatewayの機能と制限

ゲートウェイをインストールして構成した後、ゲートウェイを使用してInformixデータにアクセスし、アプリケーションからInformixデータベースにInformixコマンドを渡し、分散問合せを実行し、データをコピーできます。

2.1 リモート挿入行ソース

リモート挿入行ソース機能を使用すると、OracleデータベースおよびOracle Databaseゲートウェイを介してローカルのOracleデータを処理する必要があるリモート挿入が可能になります。 この機能を使用するには、OracleデータベースおよびOracle Databaseゲートウェイのバージョンが12.2以上である必要があります。

Oracle Database設計では、一部の分散文をデータベース・リンク・サイトで実行する必要があります。 ただし、特定の状況では、元のOracle Databaseからフェッチする必要があるこれらの問合せを実行するために必要なデータがあります。 同機種間接続では、リモートOracleデータベースがソースOracleデータベースをコールバックして、このようなデータを取得します。 ただし、異機種間接続では、これは実行できません。これは、外部データ・ストアが、問合せを発行したOracleインスタンスでのみ提供できるコールバック関数(データ)を問い合せる必要があることを意味します。 通常、これらの種類の文は、Oracle Databaseゲートウェイを介してサポートできるものではありません。

次のカテゴリのSQL文では、コールバックが発生します:

  • Oracleデータベースの表を参照するサブ選択を含むDML。

  • 元のOracleデータベースで実行する必要があるSQL関数または文を含むDELETE, INSERT, UPDATEまたはSELECT... FOR UPDATE..." SQL文。

    これらのSQL関数には、USERUSERENVおよびSYSDATEが含まれ、元のOracleデータベースからのデータの選択が含まれます。

  • Oracleデータベース内の表、およびリモート表のLONGまたはLOB列を含むSQL文。

リモート挿入行ソース機能を介して機能するリモートINSERT文の例を次に示します:

INSERT INTO gateway_table@gateway_link select * from local_table;

2.2 パススルー機能の使用

ゲートウェイは、DBMS_HS_PASSTHROUGHパッケージを使用して、アプリケーションからInformixデータベースにInformixコマンドまたは文を渡すことができます。

次のように、PL/SQLブロック内のDBMS_HS_PASSTHROUGHパッケージを使用して、Informixデータベースに渡される文を指定します:

DECLARE
    num_rows INTEGER;
BEGIN
    num_rows := DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@IFMX('command');
END;
/

commandには、次のいずれも使用できません。

  • COMMIT

  • CREATE DATABASE

  • DROP DATABASE

  • ROLLBACK

  • ROLLFORWARD DATABASE

  • Informixツール・コマンド

DBMS_HS_PASSTHROUGHパッケージでは、バインド値を渡すこと、およびSELECT文を実行することがサポートされています。

ノート:

パススルーで各DDL文の後にCOMMITを使用することをお薦めします。

関連項目:

DBMS_HS_PASSTHROUGHパッケージの詳細は、「Oracle Database異機種間接続ユーザー・ガイド」Oracle Database PL/SQLパッケージおよびタイプ・リファレンスおよび「第3章 Oracle Databaseゲートウェイの機能」を参照してください。

2.3 CHARセマンティクス

この機能により、ゲートウェイはオプションでCHARセマンティクス・モードで実行できます。

常にInformixのCHAR列をCHAR(n BYTE)と記述するのではなく、この機能では、これらをCHAR(n CHAR)およびVARCHAR(n CHAR)と記述します。 この概念は、OracleデータベースのCHARセマンティクスに似ています。 このオプションをアクティブ化するには、HS_NLS_LENGTH_SEMANTICS=CHARゲートウェイ・パラメータを指定する必要があります。

関連項目:

初期化パラメータ

2.4 マルチバイト文字セットの比率の抑制

この機能は、オプションで、マルチバイト文字セットを含むInformixデータベースからOracleデータベースへの比率の拡大を抑制します。

デフォルトでは、Oracleゲートウェイは、データが切り捨てられたり、不十分なバッファ・サイズにならないように最低比率を想定します。 ただし、Informixデータベースに関する特定の知識があり、拡張を実行しない場合は、HS_KEEP_REMOTE_COLUMN_SIZEパラメータを指定して拡張を抑制できます。

関連項目:

初期化パラメータ

2.5 IPv6のサポート

Oracleデータベースとゲートウェイ間の完全なIPv6サポートに加えて、このゲートウェイとInformixデータベース間でIPv6もサポートされます。

関連項目:

HS_FDS_CONNECT_INFOパラメータの詳細は、「初期化パラメータ」を参照してください。

2.6 ゲートウェイ・セッションIDLEタイムアウト

オプションで、ゲートウェイ・パラメータHS_IDLE_TIMEOUTを使用して、アイドル状態の長いゲートウェイ・セッションを自動的に終了するように選択できます。 具体的には、ゲートウェイ・セッションが指定された時間制限を超えてアイドル状態になると、ゲートウェイ・セッションが終了し、保留中の更新がロールバックされます。 詳細は、「初期化パラメータ」HS_IDLE_TIMEOUTパラメータを参照してください。

2.7 Informixのデータベース互換性の問題

InformixデータベースとOracleデータベースは、一部の領域で機能が異なるため、互換性の問題が発生します。 互換性の問題については、次のリンクで説明します:

2.7.1 ANSI SQL Standard

American National Standards Institute(ANSI)は、SQLの業界標準を確立しました。 ゲートウェイは、ANSI標準に準拠するInformixデータベースのみをサポートします。 ANSI準拠のInformixデータベースを作成または起動する方法の詳細は、Informixのドキュメントを参照してください。

2.7.2 命名規則

命名規則の問題には、次のものがあります:

2.7.2.1 オブジェクトの命名規則

OracleとInformixでは、異なるデータベース・オブジェクトの命名規則が使用されます。 たとえば、各オブジェクト名に使用できる最大文字数は異なる場合があります。 また、一重引用符と二重引用符、大/小文字の区別、および英数字の使用はすべて異なる場合があります。

関連項目:

Oracle DatabaseリファレンスおよびInformixのドキュメント。

2.7.2.2 オブジェクト名

Informixデータベース・オブジェクトの名前は、最大18文字に制限されています。 オブジェクト名は、次の文字で構成できます:

  • 0から9の数値

  • 小文字aからz

  • 大文字AからZ

  • アンダースコア(_)

2.7.2.3 大文字と小文字の区別

Informixは、Oracleとは異なる方法で文字の大/小文字を処理します。 Informixでは、次のルールを使用します:

  • 表の所有者名は、二重引用符で囲まれていないかぎり、デフォルトで大文字になります

  • 列名、表名、ビュー名などは、常に小文字として扱われます

識別子を二重引用符で囲む場合を除き、Oracleデータベースはデフォルトで大文字になります。 たとえば、empというInformix表を参照するには、次のように二重引用符で名前を入力します:

SQL> SELECT * FROM "emp"@IFMX;

ただし、OracleアプリケーションからSCOTTが所有するempというInformix表を参照するには、次のように入力します:

SQL> SELECT * FROM "Scott"."emp"@IFMX;

empというInformix表がSCOTT(表の所有者名は大文字)によって所有されている場合、次のように二重引用符文字なしで所有者名を入力できます:

SQL> SELECT * FROM SCOTT."emp"@IFMX;

または

SQL> SELECT * FROM scott."emp"@IFMX;

Oracleでは、すべてのInformixオブジェクト名を二重引用符で囲み、Informixデータ・ディクショナリに表示されるオブジェクト名に正確な大文字と小文字を使用することをお薦めします。 「データ・ディクショナリ」にリストされている、サポートされているOracleデータ・ディクショナリ表またはビューを参照する場合は、この規則は必要ありません。

これらの規則に従って既存のアプリケーションを変更できない場合は、Oracleでビューを作成し、Informix名を正しい大文字と小文字に関連付けます。 たとえば、大文字の名前のみを使用して既存のOracleアプリケーションからInformix表empを参照するには、次のビューを定義します:

SQL> CREATE VIEW EMP (EMPNO, ENAME, SAL, HIREDATE)
      AS SELECT "empno", "ename", "sal", "hiredate"
      FROM "emp"@IFMX;

このビューを使用すると、アプリケーションは次のような文を発行できます:

SQL> SELECT EMPNO, ENAME FROM EMP;

ビューの使用は、Informixデータ・ディクショナリに由来するデータ・ディクショナリ情報を複製する回避策です。 対応する表のデータ定義がInformixデータベースで変更されるたびに、Oracleビュー定義を更新する準備が必要です。

2.7.3 データ型

データ型の問題は次のとおりです:

2.7.3.1 バイナリ、バイト、およびテキスト・リテラル表記法

Oracle SQLでは、一重引用符で囲まれた16進数を使用して、データ型RAWとして定義されている列に比較または挿入されるリテラル値を表します。

この表記法は、Informix BINARYBYTEおよびTEXTデータ型(0xの後に16進数、一重引用符で囲まれた)と互換性のある構文には変換されません。

たとえば、次の文はサポートされていません。

SQL> INSERT INTO BYTE_TAB@IFMX VALUES ('Oxff');

ここで、BYTE_TABには、BINARYBYTEまたはTEXTデータ型の列が含まれます。 BINARYBYTEまたはTEXTデータ型への挿入または更新時にバインド変数を使用します。

2.7.3.2 データ型変換

Informixでは、暗黙的な日付変換はサポートされていません。 このような変換は明示的である必要があります。

たとえば、ゲートウェイは次のSELECT文に対してエラーを発行します:

SQL> SELECT DATE_COL FROM TEST@IFMX
     WHERE DATE_COL = "1-JAN-2001";

暗黙的な変換の問題を回避するには、次のように明示的な変換を追加します:

SQL> SELECT DATE_COL FROM TEST@IFMX
     WHERE DATE_COL = TO_DATE("1-JAN-2001");

関連項目:

データ型の制限の詳細は、「データ型変換」を参照してください。

2.7.4 問合せ

問合せの問題には、次のものがあります:

2.7.4.1 行選択

Informixは、選択したすべての行の問合せ条件を評価してから、いずれかの行を返します。 1つ以上の行の評価プロセスでエラーが発生した場合、残りの行が条件を満たしていても、行は返されません。

Oracleは、問合せ条件の行ごとに評価し、評価が成功すると行を返します。 行は、行が評価に失敗するまで返されます。

2.7.4.2 空の文字列

Oracleは、SQL文の空の文字列をNULL値として処理します。 Informixは、空の文字列を空の文字列として処理します。

空の文字列との比較

ゲートウェイは、リテラルの空の文字列を変換せずにInformixデータベースに渡します。 空の文字列でNULL値を表す場合は、Informixはそのように文を処理せず、空の文字列を使用します。

この問題を回避するには、次の例のように、空の文字列構文ではなくSQL文でNULLまたはIS NULLを使用します:

SELECT * from "emp"@IFMX where "ename" IS NULL;

空の文字列の選択

VARCHAR列の場合、ゲートウェイは空の文字列をNULL値としてOracleデータベースに返します。

CHAR列の場合、ゲートウェイは列のフル・サイズを戻し、各文字を空白(')として返します。

2.7.4.3 空のバインド変数

VARCHARバインド変数の場合、ゲートウェイは空のバインド変数をInformixデータベースにNULL値として渡します。

2.7.5 ロック

Informixデータベースのロック・モデルは、Oracleモデルと大きく異なります。 ゲートウェイは、基礎となるInformixの動作に依存するため、次のシナリオが、ゲートウェイを介してInformixにアクセスするOracle applicationsに影響する可能性があります:

  • 読取りアクセス権によって書込み権限がブロックされる場合があります

  • 書き込みアクセスが読み取りアクセスをブロックする可能性がある

  • 文レベルの読取り一貫性は保証されません

    関連項目:

    Informixロック・モデルの詳細は、Informixのドキュメントを参照してください。

2.8 既知の制限事項

この項または既知の問題点で示されていない非互換性の問題が発生した場合は、Oracleサポート・サービスに連絡してください。 次のトピックでは、既知の制限について説明し、可能な場合に対処するための推奨事項を示します:

ノート:

制限に関するご質問や懸念がある場合は、Oracle Support Servicesまでお問い合わせください。

2.8.1 トランザクションの整合性

次の場合、ゲートウェイはトランザクションの整合性を保証できません:

  • ゲートウェイによって処理された文によってターゲット・データベースで暗黙的なコミットが発生した場合

  • 自動コミット・モードで動作するようにターゲット・データベースが構成されている場合

    ノート:

    Oracleでは、次のことを強くお薦めします:

    • 特定の文を実行するとターゲット・データベースで暗黙的なコミットが発生することがわかっている場合は、この文が独自のトランザクションで実行されていることを確認します。

    • 自動コミット・モードで動作するようにターゲット・データベースを構成しないでください。

2.8.2 トランザクション機能

ゲートウェイは保存ポイントをサポートしていません。 分散更新トランザクションがゲートウェイに関係していて、ユーザーが保存ポイントを作成しようとすると、次のエラーが発生します:

ORA-02070: database dblink does not support savepoint in this context

デフォルトでは、ゲートウェイはCOMMIT_CONFIRMとして構成され、このトランザクション・モードでは、Informixデータベースがトランザクションによって更新されると、常にコミット・ポイント・サイトになります。

Informixシステムでロギングを使用しない場合、デフォルトのトランザクション機能は使用できません。 Informixシステムのロギングを有効にすることを強くお薦めします。 ロギングを使用せず、読取り専用要件がある場合は、ゲートウェイ初期化パラメータ・ファイルでHS_TRANSACTION_MODEL=READ_ONLY_AUTOCOMMITを設定します。 ロギングを使用せず、Informixデータベースを更新する必要がある場合は、ゲートウェイ初期化パラメータ・ファイルでHS_TRANSACTION_MODEL=SINGLE_SITE_AUTOCOMMITを設定します。

関連項目:

初期化パラメータ・ファイルのカスタマイズの詳細は、「初期化パラメータ」およびOracle Database異機種間接続ユーザー・ガイドを参照してください。

2.8.3 PL/SQLカーソル・ループのCOMMITまたはROLLBACKによるオープン・カーソルのクローズ

PL/SQLカーソル・ループで発行されたCOMMITまたはROLLBACKは、オープンしているすべてのカーソルをクローズし、次のエラーが発生する可能性があります:

ORA-1002:  fetch out of sequence

このエラーを回避するには、COMMITまたはROLLBACK文をカーソル・ループの外に移動します。

2.8.4 パススルー機能

ゲートウェイを通過するSQL文によってInformixデータベースで暗黙的なコミットが発生した場合、Oracleトランザクション・マネージャはコミットを認識せず、Oracle ROLLBACKコマンドを使用してトランザクションをロールバックすることはできません。

2.8.5 Informix SMALLFLOATおよびREALのデータ型

Informix SMALLFLOATおよび REALデータ型の精度は、6です。

2.8.6 SQL構文

SQL構文の制限事項は、次のとおりです:

関連項目:

SQL構文の制限の詳細は、「サポートされているSQL構文および関数」を参照してください。

2.8.6.1 WHERE CURRENT OF句

WHERE CURRENT OF句を含むUPDATE 文およびDELETE文は、Oracle ROWID実装に依存するため、ゲートウェイではサポートされていません。 ゲートウェイを介して特定の行を更新または削除するには、条件スタイルのWHERE句を使用する必要があります。

2.8.6.2 CONNECT BY句

ゲートウェイは、SELECT文でCONNECT BY句をサポートしていません。

2.8.6.3 SELECT文でのNULLキーワードの使用

NULLキーワードは、構文がANSI SQLではないため、SELECT文の選択リストでは使用できません。

たとえば、次の文は使用できません:

SQL> SELECT NULL FROM . . . 
2.8.6.4 INSERT文の副問合せ

INSERT文の副問合せでは、同じ表に複数の別名を使用できません。 たとえば、次の文はサポートされていません。

SQL> INSERT INTO "emp_target"@IFMX
         SELECT a."empno" FROM "emp_source"@IFMX a,
            "emp_source"@IFMX b WHERE b."empno"=9999
2.8.6.5 DELETE文、INSERT文およびUPDATE文の副問合せ

DELETE文、INSERT文およびUPDATE文の副問合せのSQL文は、外部問合せで指定された表と同じ表を参照できません。 これは、Informixのロック・メカニズムによるものです。

2.8.6.6 ROWID

Oracle ROWIDの実装はサポートされていません。

2.8.6.7 EXPLAIN PLAN文

EXPLAIN PLAN文はサポートされていません。

2.8.7 SQL*Plus

SQL*Plusでは、ゲートウェイは、データ型BYTEとして定義されているInformix列からデータを取得するためのSELECT文の使用をサポートしていません。

小文字の表名を囲むには、二重引用符を使用する必要があります。次に例を示します:

copy from tkhouser/tkhouser@inst1 insert loc_tkhodept using select* from "tkhodept"@holink2;

2.8.8 データベース・リンク

ゲートウェイはマルチスレッド化されていないため、共有データベース・リンクをサポートできません。 ゲートウェイ・セッションはそれぞれ別のゲートウェイ・プロセスを起動し、接続は共有されません。

2.8.9 ゲートウェイのデータ・ディクショナリ・ビュー

ゲートウェイ・データ・ディクショナリでALL_VIEWSおよびUSER_VIEWSを問い合せると、ビュー定義の最初の64文字のみが返されます。

2.8.10 ストアド・プロシージャ

ゲートウェイは、Oracle以外のデータベースでストアド・プロシージャを実行できるプロシージャ機能をサポートしていません。

2.9 既知の問題点

この項では、既知の問題をリストし、可能な場合は問題を修正するための提案を示します。 問題についての疑問は、Oracleサポート・サービスに問い合せてください。 現在の問題のリストは、オンライン上で入手できます。 リストへのアクセスに関する情報は、Oracleサポート・サービスに連絡してください。

既知の問題は次のとおりです:

2.9.1 暗号化形式のログイン

Oracleデータベースでは、初期化パラメータDBLINK_ENCRYPT_LOGINはサポートされなくなりました。 バージョン7.3までは、このパラメータのデフォルトのTRUE値は、ログイン・ユーザーIDのパスワードがネットワーク上に(クリア・テキストで)送信されることを防ぎました。 それより後のバージョンでは、パスワードが自動的に暗号化されます。

2.9.2 Informix BYTEおよびTEXTのデータ型

BYTEおよびTEXTデータ型を使用する場合は、次の制限が適用されます:

  • サポートされていないSQL関数は、Informixデータ型TEXTとして定義されている列にアクセスするSQL文では使用できません。

  • データの長さが80文字を超える場合、SQL*Plusを使用して、Informixデータ型TEXTとして定義されている列からデータを選択することはできません。 Oracleでは、Pro*CまたはOracle Call Interfaceを使用して、Informixデータベース内のこのようなデータにアクセスすることをお薦めします。

  • INSERTまたはUPDATEが機能するには、BYTE およびTEXTデータ型がNULLABLEである必要があります。

  • BYTE列またはTEXT列を含む表には、表に定義された一意の索引が必要です。そうしないと、表に主キーとして機能する個別の列が必要です。

  • ビュー内のBYTE およびTEXTデータにはアクセスできません。

  • BYTE およびTEXTデータは、パススルー問合せを介して読み取れません。

  • バインド変数を使用して、32,739バイト未満のデータをBYTE列およびTEXT列に挿入することはできません。

ゲートウェイは、DBMS_SQLパッケージのPL/SQL関数COLUMN_VALUE_LONGをサポートしていません。

2.9.3 スキーマ名およびPL/SQL

PL/SQLブロック内のSQL文で、Informixデータベース・オブジェクトにスキーマ名をプレフィクスとして付けない場合は、次のエラー・メッセージが表示されます:

ORA-6550 PLS-201 Identifier table_name must be declared.

SQL文を変更して、オブジェクトのスキーマ名を含めます。

2.9.4 データ・ディクショナリ・ビューおよびPL/SQL

PL/SQLブロック内のSQL文のデータ・ディクショナリ・ビューを参照することはできません。