169 DBMS_SHARDING_DIRECTORY
このパッケージは、ディレクトリベースのデータ分散を使用して作成されたOracle Globally Distributed Databaseを管理するプロシージャを提供します。
この章のトピックは、次のとおりです:
169.1 DBMS_SHARDING_DIRECTORYの概要
PL/SQLパッケージDBMS_SHARDING_DIRECTORY
はディレクトリベースのデータ分散方法を使用して、シャード・データベースのディレクトリ表に対するサポート操作を提供します。
このパッケージには、次のことを実行するプロシージャが含まれています。
- パーティション・エントリへのキーの追加
- キー・マッピング・エントリの削除
- パーティション分割のためのキーへのフラグ設定
このパッケージのAPIは、シャード・カタログで起動できます。
ディレクトリ表は、ルート表の作成時に自動的に作成されます。ディレクトリ表の定義はshard user schema.root_table$SDIR
です。
キーを追加および削除する場合、コミットが含まれるAPIと含まれないAPIがあります。APIのコミット・バージョンが使用されないかぎり、コミットが明示的に発行されるまで、ディレクトリ・コンテンツはシャードに伝播されません。
参照:
シャード・データベースのディレクトリベースのデータ分散の詳細は、『Oracle Globally Distributed Databaseガイド』のディレクトリベースのシャーディングを参照してください。
169.2 DBMS_SHARDING_DIRECTORYのセキュリティ・モデル
ユーザーがすべてのDBMS_SHARDING_DIRECTORY
サブプログラムを実行するには、DBMS_SHARDING_DIRECTORY
パッケージに対するEXECUTE
権限が必要です。
このパッケージのプロシージャはルート表のスキーマ所有者のみが実行できます。また、そのスキーマ所有者はシャード・カタログでのみプロシージャを実行できます。
169.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;
-- 未定
169.4 DBMS_SHARDING_DIRECTORYサブプログラムの要約
この表に、DBMS_SHARDING_DIRECTORY
パッケージのサブプログラムをリストし、説明します
表169-1 DBMS_SHARDING_DIRECTORYパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
このプロシージャでは、指定したパーティション名を持つディレクトリに新しいキーを追加できます。 |
|
このプロシージャでは、指定したパーティション名を持つディレクトリに新しいキーを追加し、最後にコミットを実行できます。 |
|
このプロシージャでは、後で実行する分割のためにディレクトリ内のキーをマークできます。 |
|
このプロシージャでは、ディレクトリからキーを削除できます。 |
|
このプロシージャでは、ディレクトリからキーを削除し、最後にコミットを実行できます。 |
|
このプロシージャを使用すると、今後のルート表への新しいキーの挿入に対して、自動的なキーからパーティションへの割当てルールを指定できます。 |
169.4.1 addKeyToPartitionプロシージャ
このプロシージャでは、指定したパーティション名を持つディレクトリに新しいキーを追加できます。
構文
DBMS_SHARDING_DIRECTORY.addKeyToPartition( (schema_name IN varchar2, root_table IN varchar2, partition_name IN varchar2, key … );
パラメータ
表169-2 addKeyToPartitionプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ルート表のスキーマ名。 |
|
パーティションの名前。 |
|
ルート表名。 |
|
シャード・キー列値。 |
使用上のノート
key
列の値は、正しいタイプのCREATE TABLE
文に指定されている順序と同じである必要があります。このプロシージャが成功できるのは、指定されたキーがディレクトリにまだ存在しない場合のみです。
169.4.2 addKeyToPartitionCommitプロシージャ
このプロシージャでは、指定したパーティション名を持つディレクトリに新しいキーを追加できます。
構文
DBMS_SHARDING_DIRECTORY.addKeyToPartitionCommit( (schema_name IN varchar2, root_table IN varchar2, partition_name IN varchar2, key … );
パラメータ
表169-3 addKeyToPartitionCommitプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ルート表のスキーマ名。 |
|
パーティションの名前。 |
|
ルート表名。 |
|
シャード・キー列値。 |
使用上のノート
addKeyToPartitionCommit
プロシージャは、最後に自動的にコミットを実行する点を除き、同じパラメータを持つaddKeyToPartition
プロシージャとまったく同じです。
key
列の値は、正しいタイプのCREATE TABLE
文に指定されている順序と同じである必要があります。このプロシージャが成功できるのは、指定されたキーがディレクトリにまだ存在しない場合のみです。
169.4.3 flagKeyForSplitプロシージャ
このプロシージャでは、後で実行する分割のためにディレクトリ内のキーをマークできます。
構文
DBMS_SHARDING_DIRECTORY.flagKeyForSplit( (schema_name IN varchar2, root_table IN varchar2, key … );
パラメータ
表169-4 flagKeyForSplitプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ルート表のスキーマ名。 |
|
ルート表名。 |
|
シャード・キー列値。 |
使用上のノート
key
列の値は、正しいタイプのCREATE TABLE
文に指定されている順序と同じである必要があります。このプロシージャが成功できるのは、指定されたキーがディレクトリに存在する場合のみです。
後続のALTER TABLE SPLIT PARTITION
操作では、ディレクトリ内で分割対象としてマークされたすべてのキーが処理され、対応するデータが新しいパーティションに分割されます。
169.4.4 removeKeyプロシージャ
このプロシージャでは、ディレクトリからキーを削除できます。
構文
DBMS_SHARDING_DIRECTORY.removeKey( (schema_name IN varchar2, root_table IN varchar2, key … );
パラメータ
表169-5 removeKeyプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ルート表のスキーマ名。 |
|
ルート表名。 |
|
シャード・キー列値。 |
使用上のノート
key
列の値は、正しいタイプのCREATE TABLE
文に指定されている順序と同じである必要があります。このプロシージャが成功できるのは、指定されたキーがディレクトリに存在し、キーを参照する行を持つ表(ルート表または子表のいずれか)がない場合のみです。
169.4.5 removeKeyCommitプロシージャ
このプロシージャでは、ディレクトリからキーを削除できます。
構文
DBMS_SHARDING_DIRECTORY.removeKeyCommit( (schema_name IN varchar2, root_table IN varchar2, key … );
パラメータ
表169-6 removeKeyCommitプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ルート表のスキーマ名。 |
|
ルート表名。 |
|
シャード・キー列値。 |
使用上のノート
removeKeyCommit
プロシージャは、最後に自動的にコミットを実行する点を除き、同じパラメータを持つremoveKey
プロシージャとまったく同じです。
key
列の値は、正しいタイプのCREATE TABLE
文に指定されている順序と同じである必要があります。このプロシージャが成功できるのは、指定されたキーがディレクトリに存在し、キーを参照する行を持つ表(ルート表または子表のいずれか)がない場合のみです。
169.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);
パラメータ
表169-7 setAssignmentRuleプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ルート表のスキーマ名。 |
|
ルート表名。 |
|
ルールID値は、「DBMS_SHARDING_DIRECTORYのパブリック定数」に示すように定義されています。 |