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