DBMS_HS_PARALLEL
PL/SQLパッケージを使用すると、異種ターゲットにアクセスする場合に並列処理が可能となります。このパッケージは、大規模な外部表からデータを取り出すときのパフォーマンスを改善するように設計されています。
DBMS_HS_PARALLEL
は、実行者の権限を使用するCURRENT_USER
の認証IDでコンパイルされます。つまり、このパッケージのすべてのプロシージャは、コール・ユーザーの権限で実行されます。
DBMS_HS_PARALLEL
パッケージのプロシージャは、次のとおりです。
このプロシージャは、リモートの表からローカルのOracle表にデータを並列にロードします。ローカルのOracle表が存在しない場合は、自動的に作成されます。
次に、LOAD_TABLE
の構文を示します。
LOAD_TABLE (remote_table, database_link, oracle_table, truncate, parallel_degree, row_count)
次の表に、LOAD_TABLE
のパラメータを示します。
表61-1 LOAD_TABLEのパラメータ
パラメータ | 値 | 説明 |
---|---|---|
|
|
リモート・データベース表の名前。 |
|
|
リモート・データベース・リンクの名前。コールは、異機種間サービスのデータベース・リンクにのみ適用できます。 |
|
|
データのロード先となるローカルOracle表の名前。 |
|
|
Oracle表を、データのロード前に切り捨てるかどうかを決定します。値は、 |
|
|
操作の並列処理数は、レンジ・パーティション数(該当する場合)またはCPU数に基づいて計算されます。値の範囲は、 |
|
|
表のロード操作で追加された行数を示します。 |
このプロシージャでは、リモート表のデータがローカルのOracle表へロードされるだけです。キー、索引、制約またはトリガーなどの他の依存関係は作成されません。パフォーマンスが大幅に向上するため、表データをロードした後にこれらの依存関係を作成することをお薦めします。依存関係の作成をデータのロード前にするか後にするかは、リモート表のデータおよび依存関係に関する情報に基づいて決定する必要があります。
ローカル表が存在しない場合は、LOAD_TABLE
プロシージャによって、リモート表と完全に列が一致する単純な(パーティション化されていない)ローカル表が作成され、その後データがローカル表に挿入されます。
リモート表またはデータベース・リンクが存在しない場合は、エラー・メッセージが戻されます。
ローカル表がリモート表と互換性がない場合は、エラー・メッセージが戻されます。
LOAD_TABLE
プロシージャを実行するには、CREATE TABLE
、CREATE TYPE
、CREATE PACKAGE
およびCREATE FUNCTION
権限が必要です。
Oracleのエラー・メッセージ「ORA-12801: パラレル問合せサーバーP003にエラー・シグナルが発生しました」
または「ORA-00018: 最大セッション数を超えました」
のいずれかが表示される場合は、Oracleの初期化パラメータ・ファイル内でPROCESSES
およびSESSIONS
パラメータの値を増やします。
並列処理を行うためには、次のいずれかが必要です。
リモート表がレンジ・パーティション化されている。
数値列のヒストグラム情報が利用可能である。
数値の索引または主キーが存在する。
ローカル表を削除するには、DROP TABLE
SQL文を使用します。
このプロシージャは、リモート表から収集した情報に基づいてCREATE TABLEテンプレートを作成します。この情報を使用すると、最適なOracleのCREATE TABLE句を追加できます。
次に、CREATE_TABLE_TEMPLATE
の構文を示します。
CREATE_TABLE_TEMPLATE (remote_table, database_link, oracle_table, create_table_template_string)
次の表に、CREATE_TABLE_TEMPLATE
のパラメータを示します。
表61-2 CREATE_TABLE_TEMPLATEのパラメータ
パラメータ | 値 | 説明 |
---|---|---|
|
|
リモート・データベース表の名前。 |
|
|
リモート・データベース・リンクの名前。コールは、異機種間サービスのデータベース・リンクにのみ適用できます。 |
|
|
データのロード先となるローカルOracle表の名前。 |
|
|
プロシージャが戻されたときにOracle |
このプロシージャは、リモート表からデータを並列に取り出すために参照される読取り専用ビューを作成(または置換)します。
次に、CREATE_OR_REPLACE_VIEW
の構文を示します。
CREATE_OR_REPLACE_VIEW (remote_table, database_link, oracle_view, parallel_degree)
次の表に、CREATE_OR_REPLACE_VIEW
のパラメータを示します。
表61-3 CREATE_OR_REPLACE_VIEWパラメータ
パラメータ | 値 | 説明 |
---|---|---|
|
|
リモート・データベース表の名前。 |
|
|
リモート・データベース・リンクの名前。コールは、異機種間サービスのデータベース・リンクにのみ適用できます。 |
|
|
Oracleビューの名前。 |
|
|
操作の並列処理数は、レンジ・パーティション数(該当する場合)またはCPU数に基づいて計算されます。値の範囲は、 |
指定したOracleビューが作成されます。その後のこのビューへの参照では、内部のデータベース・オブジェクトが使用され、リモートのOracle以外の表データが並列に取り出されます。Oracleビューがすでに存在する場合は、Oracleのエラー・メッセージ「ORA-00955: すでに使用されているオブジェクト名です。
」が表示されます。
ビューは、読取り専用ビューとして作成されます。ビューを挿入または更新しようとすると、Oracleのエラー・メッセージ「ORA-01733: ここでは仮想列は使用できません。
」が表示されます。
リモート表またはデータベース・リンクが存在しない場合は、Oracleのエラー・メッセージ「ORA-00942: 表またはビューが存在しません。
」または「ORA-02019: 指定されたリモート・データベースは存在しません。
」が表示されます。
CREATE_OR_REPLACE_VIEW
プロシージャを実行するには、CREATE VIEW
、CREATE TABLE
、CREATE TYPE
、CREATE PACKAGE
およびCREATE FUNCTION
権限が必要です。
Oracleのエラー・メッセージ「ORA-12801: パラレル問合せサーバーP003にエラー・シグナルが発生しました」
または「ORA-00018: 最大セッション数を超えました」
のいずれかが表示される場合は、Oracleの初期化パラメータ・ファイル内でPROCESSES
およびSESSIONS
パラメータの値を増やします。
CREATE_OR_REPLACE_VIEW
プロシージャによって、いくつかの内部オブジェクトが作成されるため、DROP_VIEW
プロシージャを使用してビューおよび内部オブジェクトを削除します。SQLのDROP VIEW
文ではビューのみが削除され、内部オブジェクトは削除されません。