Oracle Database 11gにおけるパーティション操作

このチュートリアルでは、Oracle Database 11gにおけるさまざまなパーティション化技術を使用する方法について紹介します。

約50分

トピック

このチュートリアルでは、以下のトピックについて説明します。

このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。 (警告:すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)

注:各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。

概要

Oracle Database 11gには、表データをパーティション化するいくつかの新技術があり、取得パフォーマンスを向上させてデータの組織化を実現することができます。 これらの技術には、以下が含まれます。

リファレンス
インターバル
拡張コンポジット
バーチャル・カラム

トピック・リストに戻る

このチュートリアルを実施する前に、次の準備をしておく必要があります。

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

以下の手順を実行して、ビジネス・ニーズを満たすようレンジ間コンポジット・パーティション化表を作成します。

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
Not doing too bad
On target
Filthy rich

以下の手順を実行して、バーチャル・カラムのパーティション化の使用方法について学習します。

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

 

トピック・リストに戻る

このチュートリアルで学習した内容は、次のとおりです。

リファレンス・パーティション化の使用
インターバル・パーティション化の使用
拡張されたコンポジット・パーティション化の使用
バーチャル・カラムパーティション化の使用

トピック・リストに戻る

このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。


Copyright (c) Oracle Corporation 2007 All Rights Reserved
Oracle Corporation発行の「Manipulating Partitions in Oracle Database 11g」の翻訳版です。

この文書はあくまで参考資料であり、掲載されている情報は予告なしに変更されることがあります。 万一、誤植などにお気づきの場合は、オラクル社までお知らせください。 オラクル社は本書の内容に関していかなる保証もしません。 また、本書の内容に関連したいかなる損害についても責任を負いかねます。

Oracleはオラクル社の登録商標です。
その他の会社名および製品名は、 あくまでその製品および会社を識別する目的にのみ使用されており、 それぞれの所有者の商標または登録商標です。