ディレクトリベースの分散データベースにおけるキーの管理

ディレクトリ表には、パーティションにキーをマッピングするためのメタデータが含まれています。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; -- 未定