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パッケージのサブプログラム

サブプログラム 説明

addKeyToPartitionプロシージャ

このプロシージャでは、指定したパーティション名を持つディレクトリに新しいキーを追加できます。

addKeyToPartitionCommitプロシージャ

このプロシージャでは、指定したパーティション名を持つディレクトリに新しいキーを追加し、最後にコミットを実行できます。

flagKeyForSplitプロシージャ

このプロシージャでは、後で実行する分割のためにディレクトリ内のキーをマークできます。

removeKeyプロシージャ

このプロシージャでは、ディレクトリからキーを削除できます。

removeKeyCommitプロシージャ

このプロシージャでは、ディレクトリからキーを削除し、最後にコミットを実行できます。

setAssignmentRule

このプロシージャを使用すると、今後のルート表への新しいキーの挿入に対して、自動的なキーからパーティションへの割当てルールを指定できます。

169.4.1 addKeyToPartitionプロシージャ

このプロシージャでは、指定したパーティション名を持つディレクトリに新しいキーを追加できます。

構文

DBMS_SHARDING_DIRECTORY.addKeyToPartition(
   (schema_name    IN varchar2,
    root_table     IN varchar2,
    partition_name IN  varchar2,
    key … );

パラメータ

表169-2 addKeyToPartitionプロシージャのパラメータ

パラメータ 説明

schema_name

ルート表のスキーマ名。

partition_name

パーティションの名前。

root_table

ルート表名。

key

シャード・キー列値。

使用上のノート

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プロシージャのパラメータ

パラメータ 説明

schema_name

ルート表のスキーマ名。

partition_name

パーティションの名前。

root_table

ルート表名。

key

シャード・キー列値。

使用上のノート

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プロシージャのパラメータ

パラメータ 説明

schema_name

ルート表のスキーマ名。

root_table

ルート表名。

key

シャード・キー列値。

使用上のノート

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プロシージャのパラメータ

パラメータ 説明

schema_name

ルート表のスキーマ名。

root_table

ルート表名。

key

シャード・キー列値。

使用上のノート

key列の値は、正しいタイプのCREATE TABLE文に指定されている順序と同じである必要があります。このプロシージャが成功できるのは、指定されたキーがディレクトリに存在し、キーを参照する行を持つ表(ルート表または子表のいずれか)がない場合のみです。

169.4.5 removeKeyCommitプロシージャ

このプロシージャでは、ディレクトリからキーを削除できます。

構文

DBMS_SHARDING_DIRECTORY.removeKeyCommit(
   (schema_name    IN varchar2,
    root_table     IN varchar2,
    key … );

パラメータ

表169-6 removeKeyCommitプロシージャのパラメータ

パラメータ 説明

schema_name

ルート表のスキーマ名。

root_table

ルート表名。

key

シャード・キー列値。

使用上のノート

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プロシージャのパラメータ

パラメータ 説明

schema_name

ルート表のスキーマ名。

root_table

ルート表名。

rule_id

ルールID値は、「DBMS_SHARDING_DIRECTORYのパブリック定数」に示すように定義されています。