2 Teradata Gatewayの機能と制限
ゲートウェイのインストールおよび構成後、ゲートウェイを使用してTeradataデータにアクセスし、アプリケーションからTeradataデータベースにTeradataコマンドを渡し、分散問合せを実行し、データをコピーできます。
- 「リモート挿入行ソース」
リモート挿入行ソース機能を使用すると、OracleデータベースおよびOracle Databaseゲートウェイを介してローカルのOracleデータを処理する必要があるリモート挿入が可能になります。 この機能を使用するには、OracleデータベースおよびOracle Databaseゲートウェイのバージョンが12.2以上である必要があります。 - 「パススルー機能の使用」
ゲートウェイは、DBMS_HS_PASSTHROUGH
パッケージを使用して、アプリケーションからTeradataデータベースにTeradataコマンドまたは文を直接渡すことができます。 - 「ストアド・プロシージャおよびストアド関数の実行」
プロシージャ機能を使用すると、ゲートウェイはTeradataデータベースで定義されたストアド・プロシージャを実行できます。 - 「マルチバイト文字セットの比率の抑制」
マルチバイト文字セットを含むTeradataデータベースからOracleデータベースへの比率拡張(たとえば、US7ASCII
からAL32UTF8
、またはKO16MSWIN949
からKO16KSC5601
)は抑制されます。 - IPv6のサポート
- 「ゲートウェイ・セッションIDLEタイムアウト」
- 「Teradataのデータベース互換性の問題」
- 既知の制限事項
- 既知の問題点
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関数には、
USER
、USERENV
およびSYSDATE
が含まれ、元のOracleデータベースからのデータの選択が含まれます。 - Oracleデータベース内の表、およびリモート表の
LONG
またはLOB
列を含むSQL文。
リモート挿入行ソース機能を介して機能するリモートINSERT
文の例を次に示します:
INSERT INTO gateway_table@gateway_link select * from local_table;
親トピック: Teradata Gatewayの機能と制限
2.2 パススルー機能の使用
ゲートウェイは、DBMS_HS_PASSTHROUGH
パッケージを使用して、アプリケーションからTeradataデータベースにTeradataコマンドまたは文を直接渡すことができます。
PL/SQLブロック内のDBMS_HS_PASSTHROUGH
パッケージを使用して、次のようにTeradataデータベースに渡す文を指定します:
DECLARE
num_rows INTEGER;
BEGIN
num_rows := DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@TERA('command');
END;
/
ここで、command
は次のいずれにもできません:
BEGIN TRANSACTION
BT
COMMIT
END TRANSACTION
ET
ROLLBACK
DBMS_HS_PASSTHROUGH
パッケージでは、バインド値を渡すこと、およびSELECT
文を実行することがサポートされています。
関連項目:
DBMS_HS_PASSTHROUGH
パッケージの詳細は、「Oracle Database異機種間接続ユーザー・ガイド」の「Oracle Database PL/SQLパッケージおよびタイプ・リファレンス」および「第3章 Oracle Databaseゲートウェイの機能」を参照してください。
親トピック: Teradata Gatewayの機能と制限
2.3 ストアド・プロシージャおよびストアド・ファンクションの実行
プロシージャ機能を使用すると、ゲートウェイはTeradataデータベースで定義されたストアド・プロシージャを実行できます。
ゲートウェイを再リンクしたり、プロシージャをゲートウェイに定義する必要はありませんが、プロシージャのアクセス権限はゲートウェイによるアクセスを許可する必要があります。
Standard PL/SQL文は、ストアド・プロシージャの実行に使用されます。
ゲートウェイは、相互に排他的な3つのモードでストアド・プロシージャをサポートしています:
- 通常モード:
IN
/OUT
引数にのみアクセスできます - 戻り値モード: すべてのストアド・プロシージャの戻り値があります
- 結果セット・モード: 出力値は、最後の結果セットとして使用できます
- 「戻り値およびストアド・プロシージャ」
デフォルトでは、すべてのストアドプロシージャおよびストアド関数は、ユーザーに戻り値を返しません。 - 「結果セットとストアド・プロシージャ」
Oracle Database Gateway for Teradataは、結果セットを返すストアド・プロシージャをサポートします。
親トピック: Teradata Gatewayの機能と制限
2.3.1 戻り値およびストアド・プロシージャ
デフォルトでは、すべてのストアド・プロシージャおよび関数は、ユーザーに戻り値を返しません。
戻り値を有効にするには、初期化パラメータ・ファイルでHS_FDS_PROC_IS_FUNC
パラメータを設定します。
関連項目:
初期化パラメータ・ファイルとHS_FDS_PROC_IS_FUNC
パラメータの編集の詳細は、「初期化パラメータ」を参照してください。
ノート:
HS_FDS_PROC_IS_FUNC
ゲートウェイ初期化パラメータを設定する場合は、既存のすべてのストアド・プロシージャのプロシージャ実行文の構文を変更する必要があります。
次の例では、従業員名JOHN SMYTHE
がTeradataストアド・プロシージャREVISE_SALARY
に渡されます。 ストアド・プロシージャは、Teradataデータベースから給与値を取得し、JOHN SMYTHE
の新しい年次給与を計算します。 RESULT
で戻された改訂済給与は、Oracleデータベースの表でEMP
を更新するために使用されます:
DECLARE INPUT VARCHAR2(15); RESULT NUMBER(8,2); BEGIN INPUT := 'JOHN SMYTHE'; RESULT := REVISE_SALARY@TERA(INPUT); UPDATE EMP SET SAL = RESULT WHERE ENAME =: INPUT; END; /
プロシージャ機能は、Oracle以外のデータ型をPL/SQLデータ型との間で自動的に変換します。
親トピック: ストアド・プロシージャおよびストアド関数の実行
2.3.2 結果セットとストアド・プロシージャ
Oracle Database Gateway for Teradataは、結果セットを返すストアド・プロシージャをサポートします。
デフォルトでは、すべてのストアド・プロシージャおよび関数は、ユーザーに結果セットを返しません。 結果セットを有効にするには、初期化パラメータ・ファイルでHS_FDS_RESULTSET_SUPPORT
パラメータを設定します。
関連項目:
初期化パラメータ・ファイルとHS_FDS_RESULTSET_SUPPORT
パラメータの編集の詳細は、「初期化パラメータ」を参照してください。 Oracle以外のデータベースでの結果セットに対するOracleサポートの詳細は、「Oracle Database異機種間接続ユーザー・ガイド」を参照してください。
ノート:
HS_FDS_RESULTSET_SUPPORT
ゲートウェイ初期化パラメータを設定する場合は、既存のすべてのストアド・プロシージャに対してプロシージャ実行文の構文を変更する必要があります。そうしないと、エラーが発生します。
Oracle Database Gateway for Teradataを介して結果セットを含むストアド・プロシージャにアクセスすると、異機種間サービスの順次モードになります。
Oracle Database Gateway for Teradataは、プロシージャの説明中に異機種間サービスに次の情報を返します:
- リモート・ストアド・プロシージャのすべての入力引数
- 出力引数はなし
- 参照カーソル・タイプの1つの出力引数(ストアド・プロシージャから戻される最初の結果セットに対応)
クライアント・プログラムは、仮想パッケージ関数dbms_hs_result_set.get_next_result_set
を使用して、後続の結果セットの参照カーソルを取得する必要があります。 最後に返される結果セットは、プロシージャのout引数です。
結果セットへのアクセスの制限は次のとおりです:
- リモート・ストアド・プロシージャから戻された結果セットは、送信された順に取得される必要があります
- ストアド・プロシージャの実行時に、以前に実行されたストアド・プロシージャから戻された結果セットがすべて(データが完全に完了しているかどうかに関係なく)クローズされます
次の例では、Teradataストアド・プロシージャを実行して、Teradataからemp
表およびdept
表の内容をフェッチします:
CREATE PROCEDURE refcurproc (@arg1 varchar(255), @arg2 varchar(255) output) AS SECLECT @arg2 = @arg1 SELECT * FROM EMP SELECT * FROM DEPT GO
このストアド・プロシージャは、入力パラメータarg1
を出力パラメータarg2
に割り当て、参照カーソルrc1
で問合せSELECT * FROM EMP
を開き、参照カーソルrc2
で問合せSELECT * FROM DEPT
を開きます。
ノート:
ストアド・プロシージャを作成する前に、チェーン・モードを設定する必要があります。 Teradataで次のコマンドを発行:set chained on
- 「順次モードでの結果セットからのOCIプログラム・フェッチ」
この例では、結果セットから順次モードでフェッチするOCIプログラムを示します。 - 「PL/SQL順次モードでの結果セットからのプログラム・フェッチ」
表loc_emp
は、Teradataemp
表とまったく同じローカル表であるとします。
親トピック: ストアド・プロシージャおよびストアド関数の実行
2.3.2.1 順次モードでの結果セットからのOCIプログラム・フェッチ
この例では、結果セットから順次モードでフェッチするOCIプログラムを示します。
次の例は、結果セットから順次モードでフェッチするOCIプログラムを示しています:
OCIEnv *ENVH; OCISvcCtx *SVCH; OCIStmt *STMH; OCIError *ERRH; OCIBind *BNDH[3]; OraText arg1[20]; OraText arg2[255]; OCIResult *rset; OCIStmt *rstmt; ub2 rcode[3]; ub2 rlens[3]; sb2 inds[3]; OraText *stmt = (OraText *) "begin refcurproc@TERA(:1,:2,:3); end;"; OraText *n_rs_stm = (OraText *) "begin :ret := DBMS_HS_RESULT_SET.GET_NEXT_RESULT_SET@TERA; end;"; /* Prepare procedure call statement */ /* Handle Initialization code skipped */ OCIStmtPrepare(STMH, ERRH, stmt, strlen(stmt), OCI_NTV_SYNTAX, OCI_DEFAULT); /* Bind procedure arguments */ inds[0] = 0; strcpy((char *) arg1, "Hello World"); rlens[0] = strlen(arg1); OCIBindByPos(STMH, &BNDH[0], ERRH, 1, (dvoid *) arg1, 20, SQLT_CHR, (dvoid *) &(inds[0]), &(rlens[0]), &(rcode[0]), 0, (ub4 *) 0, OCI_DEFAULT); inds[1] = -1; OCIBindByPos(STMH, &BNDH[1], ERRH, 1, (dvoid *) arg2, 20, SQLT_CHR, (dvoid *) &(inds[1]), &(rlens[1]), &(rcode[1]), 0, (ub4 *) 0, OCI_DEFAULT); inds[2] = 0; rlens[2] = 0; OCIDescriptorAlloc(ENVH, (dvoid **) &rset, OCI_DTYPE_RSET, 0, (dvoid **) 0); OCIBindByPos(STMH, &BNDH[2], ERRH, 2, (dvoid *) rset, 0, SQLT_RSET, (dvoid *) &(inds[2]), &(rlens[2]), &(rcode[2]), 0, (ub4 *) 0, OCI_DEFAULT); /* Execute procedure */ OCIStmtExecute(SVCH, STMH, ERRH, 1, 0, (CONST OCISnapshot *) 0, (OCISnapshot *) 0, OCI_DEFAULT); /* Convert result set to statement handle */ OCIResultSetToStmt(rset, ERRH); rstmt = (OCIStmt *) rset; /* After this the user can fetch from rstmt */ /* Issue get_next_result_set call to get handle to next_result set */ /* Prepare Get next result set procedure call */ OCIStmtPrepare(STMH, ERRH, n_rs_stm, strlen(n_rs_stm), OCI_NTV_SYNTAX, OCI_DEFAULT); /* Bind return value */ OCIBindByPos(STMH, &BNDH[1], ERRH, 1, (dvoid *) rset, 0, SQLT_RSET, (dvoid *) &(inds[1]), &(rlens[1]), &(rcode[1]), 0, (ub4 *) 0, OCI_DEFAULT); /* Execute statement to get next result set*/ OCIStmtExecute(SVCH, STMH, ERRH, 1, 0, (CONST OCISnapshot *) 0, (OCISnapshot *) 0, OCI_DEFAULT); /* Convert next result set to statement handle */ OCIResultSetToStmt(rset, ERRH); rstmt = (OCIStmt *) rset; /* Now rstmt will point to the second result set returned by the remote stored procedure */ /* Repeat execution of get_next_result_set to get the output arguments */
- 「CHARセマンティクス」
ゲートウェイは、オプションでCHAR
セマンティクス・モードで実行できます。
親トピック: 結果セットとストアド・プロシージャ
2.3.2.1.1 CHARセマンティクス
ゲートウェイは、オプションでCHAR
セマンティクス・モードで実行できます。
TeradataのCHAR
列を常にCHAR(n BYTE)
と記述するのではなく、この機能ではそれらをCHAR(n CHAR)
およびVARCHAR(n CHAR)
と記述します。 この概念は、OracleデータベースCHAR
セマンティクスに似ています。 このオプションをアクティブ化するには、HS_NLS_LENGTH_SEMANTICS=CHAR
を指定する必要があります。 詳細は、「初期化パラメータ」を参照してください。
親トピック: 順次モードでの結果セットからのOCIプログラム・フェッチ
2.3.2.2 PL/SQL順次モードでの結果セットからのプログラム・フェッチ
表loc_emp
は、Teradata emp
表とまったく同じローカル表であるとします。
同じ仮定がloc_dept
にも当てはまります。outargs
は、Teradataストアド・プロシージャのout引数に対応する列を含む表です。
create or replace package rcpackage is type RCTYPE is ref cursor; end rcpackage; /
declare rc1 rcpackage.rctype; rec1 loc_emp%rowtype; rc2 rcpackage.rctype; rec2 loc_dept%rowtype; rc3 rcpackage.rctype; rec3 outargs%rowtype; out_arg varchar2(255); begin -- Execute procedure out_arg := null; refcurproc@TERA('Hello World', out_arg, rc1); -- Fetch 20 rows from the remote emp table and insert them into loc_emp for i in 1 .. 20 loop fetch rc1 into rec1; insert into loc_emp (rec1.empno, rec1.ename, rec1.job, rec1.mgr, rec1.hiredate, rec1.sal, rec1.comm, rec1.deptno); end loop; -- Close ref cursor close rc1; -- Get the next result set returned by the stored procedure rc2 := dbms_hs_result_set.get_next_result_set@TERA; -- Fetch 5 rows from the remote dept table and insert them into loc_dept for i in 1 .. 5 loop fetch rc2 into rec2; insert into loc_dept values (rec2.deptno, rec2.dname, rec2.loc); end loop; --Close ref cursor close rc2; -- Get the output arguments from the remote stored procedure -- Since we are in sequential mode, they will be returned in the -- form of a result set rc3 := dbms_hs_result_set.get_next_result_set@TERA; -- Fetch them and insert them into the outarguments table fetch rc3 into rec3; insert into outargs (rec3.outarg, rec3.retval); -- Close ref cursor close rc3; end; /
親トピック: 結果セットとストアド・プロシージャ
2.4 マルチバイト文字セットの比率の抑制
マルチバイト文字セットを含むTeradataデータベースからOracleデータベースへの比率拡張(たとえば、US7ASCII
からAL32UTF8
、またはKO16MSWIN949
からKO16KSC5601
)は抑制されます。
デフォルトでは、Oracleゲートウェイは、データが切り捨てられることや、サイズが不十分なバッファの割当てを防ぐための最悪の比率を想定しています。 ただし、Teradataデータベースに関する特定の知識があり、拡張を実行しない場合は、HS_KEEP_REMOTE_COLUMN_SIZE
パラメータを指定して拡張を抑制できます。 詳細は、「初期化パラメータ」を参照してください。
親トピック: Teradata Gatewayの機能と制限
2.5 IPv6のサポート
Oracleデータベースとゲートウェイ間の完全なIPv6サポートに加えて、このゲートウェイとTeradata間でIPv6もサポートされます。 詳細は、「初期化パラメータ」のHS_FDS_CONNECT_INFO
パラメータを参照してください。
親トピック: Teradata Gatewayの機能と制限
2.6 ゲートウェイ・セッションIDLEタイムアウト
オプションで、ゲートウェイ・パラメータHS_IDLE_TIMEOUT
を使用して、アイドル状態の長いゲートウェイ・セッションを自動的に終了するように選択できます。 具体的には、ゲートウェイ・セッションは、指定された時間制限を超えてアイドル状態になると、保留中の変更をロールバックして終了します。
親トピック: Teradata Gatewayの機能と制限
2.7 Teradataのデータベース互換性の問題
TeradataデータベースとOracleデータベースは、一部の領域で機能が異なるため、互換性の問題が発生します。 互換性の問題については、次のリンクで説明します:
2.7.1 スキーマに関する考慮事項
Oracleのスキーマの概念がTeradataに存在しません。 問合せに含まれるスキーマ名は、Teradataによってデータベース名として認識されます。 Oracleデータベースでは、オブジェクトのスキーマはそのオブジェクトの所有者と同じです。 ただし、ALL_TABLES
などのデータ・ディクショナリ・ビューでOWNER
フィールドを取得または参照する場合、OWNER
フィールドはTeradataデータベース名を参照しています。
データ・ディクショナリ表を問い合せると、次の結果が返されます:
-
ALL_*
データ・ディクショナリ表、すべてのTeradataデータベースのデータが返されます。 Teradataデータベース名は、参照されるデータ・ディクショナリ表に応じて、OWNER
列、INDEX_OWNER
列またはTABLE_OWNER
列で返されます。 -
ALL_USERS
データ・ディクショナリ表。各Teradataデータベース名は、USERNAME
列で返されます。 -
USER_*
データ・ディクショナリ表。参照されるデータ・ディクショナリ表に応じて、デフォルトのTeradataデータベースのデータがOWNER
またはTABLE_OWNER
列に対して返されます。 デフォルトのTeradataデータベースが定義されていない場合は、DBC Teradataシステム・データベースが使用されます。
親トピック: Teradataのデータベース互換性の問題
2.7.2 命名規則
命名規則の問題には、次のものがあります:
2.7.2.1 オブジェクトの命名規則
OracleとTeradataでは、異なるデータベース・オブジェクト命名規則を使用します。 たとえば、各オブジェクト名に使用できる最大文字数は異なる場合があります。 また、一重引用符と二重引用符、大/小文字の区別、および英数字の使用はすべて異なる場合があります。
親トピック: 命名規則
2.7.2.2 大文字と小文字の区別
識別子を二重引用符で囲む場合を除き、Oracleデータベースはデフォルトで大文字になります。 たとえば、emp
というTeradata表を参照するには、次のように二重引用符で名前を入力します:
SQL> SELECT * FROM "emp"@TERA;
ただし、OracleアプリケーションからScottという名前のTeradataデータベースでemp
というTeradata表を参照するには、次のように入力します:
SQL> SELECT * FROM "Scott"."emp"@TERA;
SCOTT
という名前のTeradataデータベースでemp
というTeradata表(すべて大文字で構成される名前)の場合、次のように二重引用符文字なしで所有者名を入力できます:
SQL> SELECT * FROM SCOTT."emp"@TERA;
または
SQL> SELECT * FROM scott."emp"@TERA;
Oracleでは、すべてのTeradataオブジェクト名を二重引用符で囲み、Teradataデータ・ディクショナリに表示されるオブジェクト名に正確な大文字と小文字を使用することをお薦めします。 「データ・ディクショナリ」にリストされている、サポートされているOracleデータ・ディクショナリ表またはビューを参照する場合は、この規則は必要ありません。
これらの規則に従って既存のアプリケーションを変更できない場合は、Oracleでビューを作成し、Teradata名を正しい文字の大/小文字に関連付けます。 たとえば、大文字の名前のみを使用して既存のOracleアプリケーションのTeradata表emp
を参照するには、次のビューを定義します:
SQL> CREATE VIEW EMP (EMPNO, ENAME, SAL, HIREDATE) AS SELECT "empno", "ename", "sal", "hiredate" FROM "emp"@TERA;
このビューを使用すると、アプリケーションは次のような文を発行できます:
SQL> SELECT EMPNO, ENAME FROM EMP;
ビューの使用は、Teradataデータ・ディクショナリに由来するデータ・ディクショナリ情報を複製する回避策です。 Teradataデータベースで対応する表のデータ定義が変更されるたびに、Oracleビュー定義を更新する準備が必要です。
親トピック: 命名規則
2.7.3 データ型
データ型の問題は次のとおりです:
2.7.3.1 バイナリ・リテラル表記法
Oracle SQLでは、一重引用符で囲まれた16進数を使用して、データ型RAW
として定義されている列に比較または挿入されるリテラル値を表します。
この表記法は、TeradataのVARBINARY
およびBINARY
データ型と互換性のある構文には変換されません(一重引用符で囲まれたff
と16進数字)。
たとえば、次の文はサポートされていません。
SQL> INSERT INTO BINARY_TAB@TERA VALUES ('ff'xb)
ここで、BINARY_TAB
には、VARBINARY
またはBINARY
データ型の列が含まれます。 VARBINARY
およびBINARY
データ型への挿入または更新時にバインド変数を使用します。
親トピック: データ型
2.7.4 問合せ
親トピック: Teradataのデータベース互換性の問題
2.7.4.1 行選択
Teradataは、行を返す前に、選択したすべての行の問合せ条件を評価します。 1つ以上の行の評価プロセスでエラーが発生した場合、残りの行が条件を満たしていても、行は返されません。
Oracleは、問合せ条件の行ごとに評価し、評価が成功すると行を返します。 行は、行が評価に失敗するまで返されます。
親トピック: 問合せ
2.7.5 ロック
Teradataデータベースのロック・モデルは、Oracleモデルと大きく異なります。 ゲートウェイは、基礎となるTeradataの動作に依存するため、次のシナリオが、ゲートウェイを介してTeradataにアクセスするOracle applicationsに影響する可能性があります:
-
読取りアクセスによって書込みアクセスがブロックされる場合があります。
-
書き込みアクセスは、読み取りアクセスをブロックすることがあります。
-
文レベルの読取り一貫性は保証されません。
関連項目:
Teradataロック・モデルの詳細は、Teradataのドキュメントを参照してください。
親トピック: Teradataのデータベース互換性の問題
2.8 既知の制限事項
この項または「既知の問題点」で示されていない非互換性の問題が発生した場合は、Oracleサポート・サービスに連絡してください。 次のトピックでは、既知の制限について説明し、可能な場合に対処するための推奨事項を示します:
- 「トランザクションの整合性」
- 「トランザクション機能」
- PL/SQLカーソル・ループのCOMMITまたはROLLBACKによるオープン・カーソルのクローズ
- 「パススルー機能」
- 「日付列のバインド変数」
- 「SQL構文」
- SQL*Plus
- データベース・リンク
親トピック: Teradata Gatewayの機能と制限
2.8.1 トランザクションの整合性
次の場合、ゲートウェイはトランザクションの整合性を保証できません:
-
ゲートウェイによって処理された文によってターゲット・データベースで暗黙的なコミットが発生した場合
-
自動コミット・モードで動作するようにターゲット・データベースが構成されている場合
ノート:
Oracleでは、次のことを強くお薦めします:
-
特定の文を実行するとターゲット・データベースで暗黙的なコミットが発生することがわかっている場合は、この文が独自のトランザクションで実行されていることを確認します。
-
自動コミット・モードで動作するようにターゲット・データベースを構成しないでください。
-
親トピック: 既知の制限事項
2.8.2 トランザクション機能
ゲートウェイは保存ポイントをサポートしていません。 分散更新トランザクションがゲートウェイに関係していて、ユーザーが保存ポイントを作成しようとすると、次のエラーが発生します:
ORA-02070: database dblink does not support savepoint in this context
デフォルトでは、ゲートウェイはCOMMIT_CONFIRM
として構成され、Teradataデータベースがトランザクションによって更新されると、常にコミット・ポイント・サイトになります。
親トピック: 既知の制限事項
2.8.3 PL/SQLカーソル・ループのCOMMITまたはROLLBACKによるオープン・カーソルのクローズ
PL/SQLカーソル・ループで発行されたCOMMIT
またはROLLBACK
は、オープンしているすべてのカーソルをクローズし、次のエラーが発生する可能性があります:
ORA-1002: fetch out of sequence
このエラーを回避するには、COMMIT
またはROLLBACK
文をカーソル・ループの外に移動します。
親トピック: 既知の制限事項
2.8.4 パススルー機能
Oracleでは、パススルー機能を使用してそのような文を実行するときに、 DDL文を独自のトランザクションに配置することをお薦めします。 DDL文の後に明示的なCOMMIT
を発行する必要があります。
ゲートウェイを通過するSQL文によってTeradataデータベースで暗黙的なコミットが発生した場合、Oracleトランザクション・マネージャはコミットを認識せず、Oracle ROLLBACK
コマンドを使用してトランザクションをロールバックすることはできません。
親トピック: 既知の制限事項
2.8.5 日付列のバインド変数
データ型TIME
またはTIMESTAMP
の列をバインド変数と比較することはできません。
次のSQL文を実行すると、エラー・メッセージが表示されます:
SQL> select time_column from time_table@TERA where time_column = :a;
次のエラーが発行されます:
Invalid operation on an ANSI Datetime or Interval value.
親トピック: 既知の制限事項
2.8.6 SQL構文
SQL構文の制限事項は、次のとおりです:
関連項目:
SQL構文に関する制限事項の詳細は、「サポート対象のSQL構文および関数」を参照してください。
親トピック: 既知の制限事項
2.8.6.1 WHERE CURRENT OF句
WHERE CURRENT OF
句を含むUPDATE
およびDELETE
文は、Oracle ROWID
の実装に依存しているため、ゲートウェイではサポートされていません。 ゲートウェイを通じて特定の行を更新または削除するには、条件スタイルとしてWHERE
句を使用する必要があります。
親トピック: SQL構文
2.8.7 SQL*Plus
小文字の表名を囲むには、二重引用符を使用する必要があります。
たとえば:
copy from tkhouser/tkhouser@inst1 insert loc_tkhodept using select * from "tkhodept"@TERA;
親トピック: 既知の制限事項
2.8.8 データベース・リンク
ゲートウェイは共有サーバー・プロセスではなく、共有データベース・リンクをサポートできません。 ゲートウェイ・セッションはそれぞれ別のゲートウェイ・プロセスを起動し、接続は共有されません。
親トピック: 既知の制限事項
2.9 既知の問題点
この項では、既知の問題点について説明し、可能な場合は問題を修正するための提案を示します。 問題についての疑問は、Oracleサポート・サービスに問い合せてください。 現在の問題のリストは、オンライン上で入手できます。 リストへのアクセスに関する情報は、Oracleサポート・サービスに連絡してください。
既知の問題は次のとおりです:
親トピック: Teradata Gatewayの機能と制限
2.9.1 Teradata LONG VARCHARデータ型
LONG VARCHAR
データ型を使用する場合は、次の制限が適用されます:
-
サポートされていないSQL関数は、Teradataデータ型
LONG VARCHAR
として定義されている列にアクセスするSQL文では使用できません。 -
SQL*Plusを使用して、データの長さが80文字を超える場合に、Teradataデータ型
LONG VARCHAR
として定義されている列からデータを選択することはできません。 Oracleでは、Pro*CまたはOracle Call Interfaceを使用して、Teradataデータベース内のこのようなデータにアクセスすることをお薦めします。 -
INSERT
またはUPDATE
が機能するには、LONG VARCHAR
データ型がNULLABLE
である必要があります。 -
LONG VARCHAR
列を含む表には、表に定義された一意の索引が必要です。そうしないと、表に主キーとして機能する個別の列が必要です。 -
LONG VARCHAR
データは、パススルー問合せを介して読み取れません。
ゲートウェイは、DBMS_SQL
パッケージのPL/SQL関数COLUMN_VALUE_LONG
をサポートしていません。
関連項目:
SQL構文に関する制限事項の詳細は、「サポート対象のSQL構文および関数」を参照してください。
親トピック: 既知の問題
2.9.2 スキーマ名およびPL/SQL
PL/SQLブロック内のSQL文でTeradataデータベース・オブジェクトにスキーマ名をプレフィクスとして付けないと、次のエラー・メッセージが表示されます:
ORA-6550 PLS-201 Identifier table_name must be declared.
SQL文を変更して、オブジェクトのスキーマ名を含めます。
親トピック: 既知の問題