ディレクトリベースの分散データベースにおけるキーの管理
ディレクトリ表には、パーティションにキーをマッピングするためのメタデータが含まれています。DBMS_SHARDING_DIRECTORY
PL/SQL APIを使用して、キーを追加および削除できます。
ノート:
キーを追加および削除する場合、コミットが含まれるAPIと含まれないAPIがあります。APIのコミット・バージョンが使用されないかぎり、コミットが明示的に発行されるまで、ディレクトリ・コンテンツはシャードに伝播されません。キーの追加
addKeyToPartition
またはaddKeyToPartitionCommit
を使用して、指定したパーティション名のディレクトリにキーを追加できます。
addKeyToPartitionCommit
プロシージャは、最後に自動的にコミットを実行する点を除き、同じパラメータを持つaddKeyToPartition
プロシージャとまったく同じです。
PROCEDURE addKeyToPartition[Commit]
(schema_name IN varchar2, -- root table schema name
root_table IN varchar2, -- root table name
partition_name IN varchar2, -- name of the partition
key …) -- shard key column value
キー列の値は、正しいタイプのCREATE TABLE
文に指定されている順序と同じである必要があります。このプロシージャが成功できるのは、指定されたキーがディレクトリにまだ存在しない場合のみです。
キーの削除
removeKey
またはremoveKeyCommit
を使用して、ディレクトリからキーを削除できます。
removeKeyCommit
プロシージャは、最後に自動的にコミットを実行する点を除き、同じパラメータを持つremoveKey
プロシージャとまったく同じです。
PROCEDURE removeKey
(schema_name IN varchar2, -- root table schema name
root_table IN varchar2, -- root table name
key … ) -- shard key column values
キー列の値は、正しいタイプのCREATE TABLE
文に指定されている順序と同じである必要があります。このプロシージャが成功できるのは、指定されたキーがディレクトリに存在し、キーを参照する行を持つ表(ルート表または子表のいずれか)がない場合のみです。
キーからパーティションへの自動割当ての有効化
ルート表への後続の新しいキー挿入に対して、キーとパーティションの自動割当てルールを指定できます。
PROCEDURE setAssignmentRule
(schema_name IN varchar2, -- root table schema name
root_table IN varchar2, -- root table name
rule_id IN number); -- rule ID as defined in public constants
設定すると、キーとパーティション間の割当てルールは、システムの再起動に関係なく、プロシージャへの別のコールが別のルール値で実行されるまで、またはNONE
を使用して自動割当てをオフにする必要があることを意味するまで、様々なセッションにわたって有効のままになります。
次の定数は、キーとパーティションの割当てルールに定義されています。
-
NONE constant number :=0;
-- ルールベースの割当てのオフ -
LAST_PARTITION constant number := 1;
-- 最後に追加されたパーティションにのみキーを割り当てるルール -
ROUNT_ROBIN constant number :=2;
-- ラウンド・ロビンによってパーティションにキーを割り当てるためのルール -
RANDOM constant number :=3;
-- パーティションにキーをランダムに割り当てるルール -
CUSTOM constant number :=4;
-- 未定