80 DBMS_HS_PARALLEL

DBMS_HS_PARALLEL PL/SQLパッケージを使用すると、異種ターゲットにアクセスする場合に並列処理が可能となります。このパッケージは、大規模な外部表からデータを取り出すときのパフォーマンスを改善するように設計されています。

この章では、以下のトピックについて説明します。

80.1 DBMS_HS_PARALLELサブプログラムの使用方法

DBMS_HS_PARALLELは、実行者の権限を使用するCURRENT_USERの認証IDでコンパイルされます。つまり、このパッケージのすべてのプロシージャは、コール・ユーザーの権限で実行されます。

80.2 DBMS_HS_PARALLELサブプログラムの要約

この表は、DBMS_HS_PARALLELサブプログラムをアルファベット順に示し、簡単に説明しています。

表80-1 DBMS_HS_PARALLELパッケージのサブプログラム

サブプログラム 説明

CREATE_OR_REPLACE_VIEW

リモート表からデータを並列に取り出すために参照される読取り専用ビューを作成(または置換)します。

CREATE_TABLE_TEMPLATE

リモート表から収集した情報に基づいてCREATE TABLEテンプレートを作成します。この情報を使用すると、最適なOracleのCREATE TABLE句を追加できます。

DROP_VIEW

CREATE_OR_REPLACE_VIEWプロシージャによって作成されたビューおよび内部オブジェクトを削除します。CREATE_OR_REPLACE_VIEWプロシージャによってビューが作成されていない場合は、エラー・メッセージが戻されます。

LOAD_TABLE

リモートの表からローカルのOracle表にデータを並列にロードします。ローカルのOracle表が存在しない場合は、自動的に作成されます。

80.2.1 CREATE_OR_REPLACE_VIEWプロシージャ

このプロシージャは、リモート表からデータをパラレル取得するために参照される、読取り専用のビューを作成(または置換)します。

構文

CREATE_OR_REPLACE_VIEW (remote_table, database_link, oracle_view, parallel_degree)

パラメータ

表80-2 CREATE_OR_REPLACE_VIEWプロシージャのパラメータ

パラメータ 説明

remote_table

リモート・データベース表の名前。[remote_schema_name.]remote_table_nameの形式で指定します。

database_link

リモート・データベース・リンクの名前。コールは、異機種間サービスのデータベース・リンクにのみ適用できます。

oracle_view

Oracleビューの名前。[schema_name.]oracle_view_nameの形式で指定します。デフォルトのスキーマ名は現行のユーザーです。oracle_viewパラメータが指定されない場合は、リモート表の名前がビュー名として使用されます。

parallel_degree

操作の並列処理数は、レンジ・パーティション数(該当する場合)またはCPU数に基づいて計算されます。値の範囲は、2から16です。

使用上のノート

  • 指定したOracleビューが作成され、その後のこのビューへの参照では、内部のデータベース・オブジェクトが使用され、リモートのOracle以外の表データが並列に取り出されます。Oracleビューがすでに存在する場合は、次のOracleのエラー・メッセージが表示されます。

    ORA-00955: name is already used by an existing object
    
  • ビューは、読取り専用ビューとして作成されます。ビューを挿入または更新しようとすると、次のOracleのエラー・メッセージが表示されます。

    ORA-01733: virtual column not allowed here
    
  • リモート表またはデータベース・リンクが存在しない場合は、次のいずれかのOracleエラー・メッセージが表示されます。

    ORA-00942: table or view does not exist
    or
    ORA-02019: connection description for remote database not found
    
  • CREATE_OR_REPLACE_VIEWプロシージャを実行するには、CREATE VIEWCREATE TABLECREATE TYPECREATE PACKAGEおよびCREATE FUNCTION権限が必要です。

  • 次のいずれかのOracleエラー・メッセージが発生した場合、Oracle初期化パラメータ・ファイルのPROCESSESおよびSESSIONSパラメータの値を増やしてください。

    ORA-12801: error signaled in parallel query server P003
    or
    ORA-00018: maximum number of session exceeded
    
  • CREATE_OR_REPLACE_VIEWプロシージャによって、いくつかの内部オブジェクトが作成されるため、DROP_VIEWプロシージャを使用してビューおよび内部オブジェクトを削除します。SQLのDROP VIEW文ではビューのみが削除され、内部オブジェクトは削除されません。

80.2.2 CREATE_TABLE_TEMPLATEプロシージャ

このプロシージャはリモート表から集めた情報に基づき、CREATE TABLEテンプレートを作成します。この情報を使用すると、最適なOracleのCREATE TABLE句を追加できます。

構文

CREATE_TABLE_TEMPLATE (remote_table, database_link, oracle_table, create_table_template_string)

パラメータ

表80-3 CREATE_TABLE_TEMPLATEプロシージャのパラメータ

パラメータ 説明

remote_table

リモート・データベース表の名前。[remote_schema_name.]remote_table_nameの形式で指定します。

database_link

リモート・データベース・リンクの名前。コールは、異機種間サービスのデータベース・リンクにのみ適用できます。

oracle_table

データのロード先となるローカルOracle表の名前。[schema_name.]oracle_table_nameの形式で指定します。デフォルトのスキーマ名は現行のユーザーです。oracle_tableパラメータが指定されない場合は、リモート表の名前がローカルのOracle名として使用されます。

create_table_template_string

プロシージャが戻されたときにOracle CREATE TABLE SQLテンプレートを示します。

80.2.3 DROP_VIEWプロシージャ

このプロシージャは、CREATE_OR_REPLACE_VIEWプロシージャによって作成されたビューおよび内部オブジェクトを削除します。CREATE_OR_REPLACE_VIEWプロシージャによってビューが作成されていない場合は、エラー・メッセージが戻されます。

構文

DROP_VIEW (oracle_view)

パラメータ

表80-4 DROP_VIEWプロシージャのパラメータ

パラメータ 説明

oracle_view

CREATE_OR_REPLACE_VIEWプロシージャによって作成されたOracleビューの名前。CREATE_OR_REPLACE_VIEWプロシージャによってビューが作成されていない場合は、エラーが戻されます。

80.2.4 LOAD_TABLEプロシージャ

このプロシージャは、リモートの表からローカルのOracle表にデータを並列にロードします。ローカルのOracle表が存在しない場合は、自動的に作成されます。

構文

LOAD_TABLE (remote_table, database_link, oracle_table, truncate, parallel_degree, row_count)

パラメータ

表80-5 LOAD_TABLEプロシージャのパラメータ

パラメータ 説明

remote_table

リモート・データベース表の名前。[remote_schema_name.]remote_table_nameの形式で指定します

database_link

リモート・データベース・リンクの名前。コールは、異機種間サービスのデータベース・リンクにのみ適用できます。

oracle_table

データのロード先となるローカルOracle表の名前。[schema_name.]oracle_table_nameの形式で指定します。デフォルトのスキーマ名は現行のユーザーです。oracle_tableパラメータが指定されない場合は、リモート表の名前がローカルのOracle名として使用されます。

truncate

データのロード前にOracle表を切り捨てるかどうかを決定します。値は、TRUEまたはFALSEです。デフォルト値はTRUEで、この場合は最初にOracle表が切り捨てられます。FALSEに設定すると、データがロードされるまでOracle表は切り捨てられません。

parallel_degree

操作の並列処理数は、レンジ・パーティション数(該当する場合)またはCPU数に基づいて計算されます。値の範囲は、2から16です。

row_count

表のロード操作で追加された行数を示します。

使用上のノート

  • このプロシージャでは、リモート表のデータがローカルのOracle表へロードされるだけです。キー、索引、制約またはトリガーなどの他の依存関係は作成されません。パフォーマンスが大幅に向上するため、表データをロードした後にこれらの依存関係を作成することをお薦めします。依存関係の作成をデータのロード前にするか後にするかは、リモート表のデータおよび依存関係に関する情報に基づいて決定する必要があります。

  • ローカル表が存在しない場合は、LOAD_TABLEプロシージャによって、リモート表と完全に列が一致する単純な(パーティション化されていない)ローカル表が作成され、その後データがローカル表に挿入されます。

  • リモート表またはデータベース・リンクが存在しない場合は、エラー・メッセージが戻されます。

  • ローカル表がリモート表と互換性がない場合は、エラー・メッセージが戻されます。

  • LOAD_TABLEプロシージャを実行するには、CREATE TABLECREATE TYPECREATE PACKAGEおよびCREATE FUNCTION権限が必要です。

  • 次のいずれかのOracleエラー・メッセージが発生した場合、Oracle初期化パラメータ・ファイルのPROCESSESおよびSESSIONSパラメータの値を増やしてください。

    ORA-12801: error signaled in parallel query server P003
    or
    ORA-00018: maximum number of session exceeded
    
  • 並列処理を行うためには、次のいずれかが必要です。

    • リモート表がレンジ・パーティション化されている。

    • 数値列のヒストグラム情報が利用可能である。

    • 数値の索引または主キーが存在する。

  • ローカル表を削除するには、DROP TABLE SQL文を使用します。