181 DBMS_SHARDING_DIRECTORY
このパッケージは、ディレクトリベースのデータ分散を使用して作成されたOracle Globally Distributed Databaseを管理するプロシージャを提供します。
この章のトピックは、次のとおりです:
181.1 DBMS_SHARDING_DIRECTORYの概要
PL/SQLパッケージDBMS_SHARDING_DIRECTORYはディレクトリベースのデータ分散方法を使用して、シャード・データベースのディレクトリ表に対するサポート操作を提供します。
このパッケージには、次のことを実行するプロシージャが含まれています。
- パーティション・エントリへのキーの追加
- キー・マッピング・エントリの削除
- パーティション分割のためのキーへのフラグ設定
このパッケージのAPIは、シャード・カタログで起動できます。
ディレクトリ表は、ルート表の作成時に自動的に作成されます。 ディレクトリ表の定義はshard user schema.root_table$SDIRです。
キーを追加および削除する場合、コミットが含まれるAPIと含まれないAPIがあります。 APIのコミット・バージョンが使用されないかぎり、コミットが明示的に発行されるまで、ディレクトリ・コンテンツはシャードに伝播されません。
参照:
シャード・データベースのディレクトリベースのデータ分散の詳細は、『Oracle Globally Distributed Databaseガイド』のディレクトリベースのシャーディングを参照してください。
181.2 DBMS_SHARDING_DIRECTORYのセキュリティ・モデル
ユーザーがすべてのDBMS_SHARDING_DIRECTORYサブプログラムを実行するには、DBMS_SHARDING_DIRECTORYパッケージに対するEXECUTE権限が必要です。
このパッケージのプロシージャはルート表のスキーマ所有者のみが実行できます。また、そのスキーマ所有者はシャード・カタログでのみプロシージャを実行できます。
181.3 DBMS_SHARDING_DIRECTORYのパブリック定数
キーからパーティションへの割当てルール用に定義された、DBMS_SHARDING_DIRECTORY.setAssignmentRuleプロシージャで使用するためのパブリック定数があります。
これらの定数はすべて、DBMS_SHARDING_DIRECTORYパッケージの一部として定義されます。 これらの定数を参照するには、DBMS_SHARDING_DIRECTORYという接頭辞を付け、続けて次に示す記号を付ける必要があります
-
NONE constant number :=0;-- ルールベースの割当てをオフにします -
LAST_PARTITION constant number := 1;-- 最後に追加されたパーティションにのみキーを割り当てるルール -
ROUNT_ROBIN constant number :=2;-- ラウンド・ロビンによってパーティションにキーを割り当てるルール -
RANDOM constant number :=3;-- パーティションにランダムにキーを割り当てるルール -
CUSTOM constant number :=4;-- 未定
181.4 DBMS_SHARDING_DIRECTORYサブプログラムの要約
この表に、DBMS_SHARDING_DIRECTORYパッケージのサブプログラムをリストし、説明します
表181-1 DBMS_SHARDING_DIRECTORYパッケージ・サブプログラム
| サブプログラム | 説明 |
|---|---|
|
このプロシージャでは、指定したパーティション名を持つディレクトリに新しいキーを追加できます。 |
|
|
このプロシージャでは、指定したパーティション名を持つディレクトリに新しいキーを追加し、最後にコミットを実行できます。 |
|
|
このプロシージャでは、後で実行する分割のためにディレクトリ内のキーをマークできます。 |
|
|
このプロシージャでは、ディレクトリからキーを削除できます。 |
|
|
このプロシージャでは、ディレクトリからキーを削除し、最後にコミットを実行できます。 |
|
|
このプロシージャを使用すると、今後のルート表への新しいキーの挿入に対して、自動的なキーからパーティションへの割当てルールを指定できます。 |
181.4.1 addKeyToPartitionプロシージャ
このプロシージャでは、指定したパーティション名を持つディレクトリに新しいキーを追加できます。
構文
DBMS_SHARDING_DIRECTORY.addKeyToPartition(
(schema_name IN varchar2,
root_table IN varchar2,
partition_name IN varchar2,
key ⦠);パラメータ
表181-2 addKeyToPartitionプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ルート表のスキーマ名。 |
|
|
パーティションの名前。 |
|
|
ルート表名。 |
|
|
シャード・キー列値。 |
使用上のノート
key列の値は、正しいタイプのCREATE TABLE文に指定されている順序と同じである必要があります。 このプロシージャが成功できるのは、指定されたキーがディレクトリにまだ存在しない場合のみです。
181.4.2 addKeyToPartitionCommitプロシージャ
このプロシージャでは、指定したパーティション名を持つディレクトリに新しいキーを追加できます。
構文
DBMS_SHARDING_DIRECTORY.addKeyToPartitionCommit(
(schema_name IN varchar2,
root_table IN varchar2,
partition_name IN varchar2,
key ⦠);パラメータ
表181-3 addKeyToPartitionCommitプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ルート表のスキーマ名。 |
|
|
パーティションの名前。 |
|
|
ルート表名。 |
|
|
シャード・キー列値。 |
使用上のノート
addKeyToPartitionCommitプロシージャは、最後に自動的にコミットを実行する点を除き、同じパラメータを持つaddKeyToPartitionプロシージャとまったく同じです。
key列の値は、正しいタイプのCREATE TABLE文に指定されている順序と同じである必要があります。 このプロシージャが成功できるのは、指定されたキーがディレクトリにまだ存在しない場合のみです。
181.4.3 flagKeyForSplitプロシージャ
このプロシージャでは、後で実行する分割のためにディレクトリ内のキーをマークできます。
構文
DBMS_SHARDING_DIRECTORY.flagKeyForSplit(
(schema_name IN varchar2,
root_table IN varchar2,
key ⦠);パラメータ
表181-4 flagKeyForSplitプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ルート表のスキーマ名。 |
|
|
ルート表名。 |
|
|
シャード・キー列値。 |
使用上のノート
key列の値は、正しいタイプのCREATE TABLE文に指定されている順序と同じである必要があります。 このプロシージャが成功できるのは、指定されたキーがディレクトリに存在する場合のみです。
後続のALTER TABLE SPLIT PARTITION操作では、ディレクトリ内で分割対象としてマークされたすべてのキーが処理され、対応するデータが新しいパーティションに分割されます。
181.4.4 removeKeyプロシージャ
このプロシージャでは、ディレクトリからキーを削除できます。
構文
DBMS_SHARDING_DIRECTORY.removeKey(
(schema_name IN varchar2,
root_table IN varchar2,
key ⦠);パラメータ
表181-5 removeKeyプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ルート表のスキーマ名。 |
|
|
ルート表名。 |
|
|
シャード・キー列値。 |
使用上のノート
key列の値は、正しいタイプのCREATE TABLE文に指定されている順序と同じである必要があります。 このプロシージャが成功できるのは、指定されたキーがディレクトリに存在し、キーを参照する行を持つ表(ルート表または子表のいずれか)がない場合のみです。
181.4.5 removeKeyCommitプロシージャ
このプロシージャでは、ディレクトリからキーを削除できます。
構文
DBMS_SHARDING_DIRECTORY.removeKeyCommit(
(schema_name IN varchar2,
root_table IN varchar2,
key ⦠);パラメータ
表181-6 removeKeyCommitプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ルート表のスキーマ名。 |
|
|
ルート表名。 |
|
|
シャード・キー列値。 |
使用上のノート
removeKeyCommitプロシージャは、最後に自動的にコミットを実行する点を除き、同じパラメータを持つremoveKeyプロシージャとまったく同じです。
key列の値は、正しいタイプのCREATE TABLE文に指定されている順序と同じである必要があります。 このプロシージャが成功できるのは、指定されたキーがディレクトリに存在し、キーを参照する行を持つ表(ルート表または子表のいずれか)がない場合のみです。
181.4.6 setAssignmentRule
このプロシージャを使用すると、今後のルート表への新しいキーの挿入に対して、自動的なキーからパーティションへの割当てルールを指定できます。
これは、異なるセッション間でシステムの再起動に関係なく有効になり、このプロシージャへの異なるrule_id値または自動割当てをオフにする必要があることを意味するNONEのコールがあるまで有効です。
ルールIDの値は、「DBMS_SHARDING_DIRECTORYのパブリック定数」で定義されています。
構文
DBMS_SHARDING_DIRECTORY.setAssignmentRule(
(schema_name IN varchar2,
root_table IN varchar2,
rule_id IN number);パラメータ
表181-7 setAssignmentRuleプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ルート表のスキーマ名。 |
|
|
ルート表名。 |
|
|
ルールID値は、「DBMS_SHARDING_DIRECTORYのパブリック定数」に示すように定義されています。 |