Oracle Database 11gにおけるパーティション操作
このチュートリアルでは、Oracle Database 11gにおけるさまざまなパーティション化技術を使用する方法について紹介します。
約50分
このチュートリアルでは、以下のトピックについて説明します。
このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。 (警告:すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)
注:各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。
Oracle Database 11gには、表データをパーティション化するいくつかの新技術があり、取得パフォーマンスを向上させてデータの組織化を実現することができます。 これらの技術には、以下が含まれます。
| リファレンス |
キー列を複製せずに親の表からパーティション・キーを継承することで、親子関係にある表を論理的に同一レベル・パーティション化する |
| インターバル |
レンジ・パーティションを自動で作成する |
| 拡張コンポジット |
2次元で論理的なレンジ・パーティション化を有効にする |
| バーチャル・カラム |
表のバーチャル・カラムに対してパーティション・キー列を定義可能にする |
トピック・リストに戻る
このチュートリアルを実施する前に、次の準備をしておく必要があります。
| 1. |
Oracle Database 11gがインストールされていること。 |
| 2. |
partition.zipファイルをダウンロードし、作業ディレクトリに解凍すること。 |
| 3. |
端末ウィンドウを開き、以下のコマンドを実行します。
sqlplus / as sysdba
@setup

|
トピック・リストに戻る
リファレンス・パーティション化は、キー列を複製せずに親表からパーティション・キーを継承することで、親子関係にある表を論理的に同一レベル・パーティション化します。 パーティション化キーは既存の親子関係によって解決され、アクティブ主キーまたは外部キーの制約によって実行されます。 また、論理的依存性によりパーティション・メンテナンス操作と自動的に関連付けられるので、アプリケーション開発がより簡単になり、またエラーの発生を抑えることができます。
以下の手順を実行して、リファレンス・パーティション化の使用方法について学習します。
| 1. |
端末ウィンドウを開き、SHユーザーとしてSQL*Plusにログインします。 create_orders.sqlスクリプトを実行して、レンジ・パーティション化されたORDERS表を作成します。
@create_orders

|
| 2. |
create_order_items.sqlスクリプトを実行して、リファレンス・パーティション化されたORDER_ITEMS表を作成します。
@create_order_items
|
| 3. |
query_dict_1.sqlスクリプトを実行して、リファレンス・パーティション化されたORDER_ITEMS表の情報を参照します。
@query_dict_1


|
| 4. |
insert_orders.sqlスクリプトを実行して、データをORDERS表に挿入します。
@insert_orders

|
| 5. |
show_data_placement.sqlスクリプトを実行して、パーティション内でどのようにデータがコロケートされたかを確認します。
@show_data_placement



|
| 6. |
パーティション単位の結合を表示するには、_parallel_broadcast_enabledパラメータをFALSEに設定します。 以下のコマンドを実行します。
ALTER SESSION SET "_parallel_broadcast_enabled"=FALSE;
注:並列によるパーティション単位の結合は、2つの大きなパーティション表を並列に結合する際に、非常に効率よく行えます。 このチュートリアルでは非常に大きなデータ・セットを使用しないので、並列によるパーティション単位の結合による実行計画がどのようなものであるかを示すため、parameter _parallel_broadcast_enabledをFalseに設定してハッシュ結合ヒントを問合せで使用します。 この環境では、並列によるパーティション単位の結合を見るため、パラメータを設定したりヒントを使用したりする必要はありません。

|
| 7. |
show_plan.sqlスクリプトを実行して、パーティション単位の結合に関する情報を表示します。
@show_plan



|
| 8. |
drop_partition.sqlスクリプトを実行して、p_before_jan_2006パーティションをORDERS表からドロップします。
@drop_partition

|
| 9. |
query_dict_2.sqlスクリプトを実行して、表の情報を表示します。
@query_dict_2

|
| 10. |
add_partition.sqlスクリプトを実行して、p2007_01パーティションを追加します。 注:親表に2つのパーティションが追加され、2つ目は"依存表"句を使用して、子表パーティションに対して異なる表領域の割当てを使用します。
@add_partition




|
| 11. |
cleanup_1.sqlスクリプトを実行して、このシナリオで作成したパーティションおよび表領域をドロップします。
@cleanup_1

|
トピック・リストに戻る
インターバル・パーティション化は、レンジ・パーティションを完全に自動的に作成します。 新しいパーティションの作成を管理することは、煩雑で非常に繰り返しの多い作業です。 これは特に、日々の新規パーティションを追加するなど、予測可能な小さい範囲のパーティションの追加で指摘することができます。 インターバル・パーティション化は、オンデマンドのパーティションの作成を自動化します。
以下の手順を実行して、インターバル・パーティション化の使用方法について学習します。
| 1. |
create_newsales.sqlスクリプトを実行して、NEWSALESインターバル・パーティション化表を作成します。
@create_newsales

|
| 2. |
query_dict_3.sqlスクリプトを実行して、USER_TAB_PARTITIONSNEWSALESディクショナリ・ビューにNEWSALES表の情報を問い合わせます。
@query_dict_3

|
| 3. |
insert_newsales.sqlスクリプトを実行して、新規パーティション(セグメント)を作成するための新しいデータをNEWSALES表に挿入します。
@insert_newsales

|
| 4. |
query_dict_4.sqlスクリプトを実行して、新規パーティションの情報を表示します。
@query_dict_4

|
| 5. |
merge_partition.sqlスクリプトを実行して、2つのパーティションをマージします。
@merge_partition

|
| 6. |
query_dict_5.sqlスクリプトを実行して、マージされたパーティションの情報を表示します。
@query_dict_5

|
| 7. |
create_hist_newsales.sqlスクリプトを実行して、レンジ・パーティション化表を作成します。
@create_hist_newsales

|
| 8. |
query_dict_6.sqlスクリプトを実行して、マージされたパーティションの情報を表示します。
@query_dict_6

|
| 9. |
insert_histnewsales_row_1.sqlスクリプトを実行して、行をHISTORICAL_NEWSALES表に挿入します。 パーティション化された表が現在インターバル・パーティション化された表にないため、挿入に失敗します。
@insert_histnewsales_row_1

|
| 10. |
alter_hist_newsales.sqlスクリプトを実行して、パーティション化した表をインターバル・パーティション化した表へ変更します。
@alter_hist_newsales

|
| 11. |
insert_histnewsales_row_2.sqlスクリプトを実行して、再度表に行を挿入します。
@insert_histnewsales_row_2

|
| 12. |
query_dict_7.sqlスクリプトを実行して、パーティションの情報を表示します。
@query_dict_7

|
トピック・リストに戻る
コンポジット・レンジ間パーティション化は、2つの次元における論理的なレンジ・パーティション化を実現します。たとえば、ORDER_DATEでパーティション化し、SHIPPING_DATEでレンジ・サブパーティション化します。 コンポジット・レンジ間パーティション化は、オブジェクトのパーティション化におけるビジネス・ニーズをマッピングする追加モデリング戦略を提供します。
この例では、注文を受けると、カレンダ月のうちに納品するよう顧客との品質保証契約に記載されています。 以下のタイプの注文を識別することができます。
| EARLY |
注文を受けた翌月半ば前に納品された注文のこと。 これらの注文は、顧客の期待を超える可能性があります。 |
| AGREED |
注文を受けたカレンダ月に配達された注文のこと(早期納品ではない)。 |
| LATE |
注文を受けた2カレンダ月から配達された注文のみのこと。 |
以下の手順を実行して、ビジネス・ニーズを満たすようレンジ間コンポジット・パーティション化表を作成します。
| 1. |
create_shipments.sqlスクリプトを実行して、SHIPMENTS表をORDER_DATEおよびSHIPDATEについてレンジ間コンポジット・パーティション化表として作成します。
@create_shipments

|
| 2. |
insert_shipments.sqlスクリプトを使用して、SHIPMENTS表に行を挿入します。
@insert_shipments

|
| 3. |
count_shipments.sqlスクリプトを実行して、データがどのようにSHIPMENTS表に配信されたかを表示します。
@count_shipments

|
トピック・リストに戻る
バーチャル・カラムパーティション化を、表のバーチャル・カラムに定義されたパーティション・キー列に対して使用することができます。 バーチャル・カラムは、式を検証することで定義します。 バーチャル・カラムは、表の作成時または修正時に定義できます。 論理的パーティション・オブジェクトに対するビジネス要求は往々にして、既存の列と1対1で適合しません。 Oracleのパーティション化は、バーチャル・カラムで定義されるパーティション化戦略を拡張することで、ビジネス要求に対して、より包括的に適合できるようにします。
この例において、従業員のカテゴリは以下のとおりです。
| Poor |
総給料(給料+歩合)が1,000未満 |
| Not doing too bad |
給料が1,000から3,000の間 |
| On target |
給料が3,000 |
| Filthy rich |
給料が3,000以上 |
以下の手順を実行して、バーチャル・カラムのパーティション化の使用方法について学習します。
| 1. |
create_employees.sqlスクリプトを実行して、バーチャル・カラムを持つEMPLOYEES表を作成します。
@create_employees

|
| 2. |
insert_employees.sqlスクリプトを実行して、INSERT行をEMPLOYEES表に挿入します。
@insert_employees

|
| 3. |
select_employees.sqlスクリプトを実行して、EMPLOYEES表を問い合わせます。
@select_employees

|
| 4. |
create_prod_ret.sqlスクリプトを実行して、表のパーティション化に使用したバーチャル・カラムを持つPRODUCT_RETURNS表を作成します。
@create_prod_ret

|
| 5. |
insert_prod_ret.sqlスクリプトを実行して、PRODUCT_RETURNS表に行を挿入します。
@insert_prod_ret

|
| 6. |
select_prod_return.sqlスクリプトを実行して、PRODUCT_RETURNS表を問い合わせます。
@select_prod_return



|
| 7. |
xplan_prod_ret.sqlスクリプトを実行して、バーチャル・カラムを定義する式を使用した問合せに対するパーティション・プルーニングを表示します。
@xplan_prod_ret

|
トピック・リストに戻る
このチュートリアルで学習した内容は、次のとおりです。
 |
リファレンス・パーティション化の使用 |
 |
インターバル・パーティション化の使用 |
 |
拡張されたコンポジット・パーティション化の使用 |
 |
バーチャル・カラムパーティション化の使用 |
トピック・リストに戻る
このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。
|