12
Oracle Database 10g Release 2 オンライン・データ再編成お よび再定義 オラクル・ホワイト・ペーパー 2005 9

Oracle Database 10g Release 2オンライン・データ再 …otndnld.oracle.co.jp/products/database/oracle10g/availability/pdf/... · SQL*PLUS からオンラインで表を再定義する手順

  • Upload
    hadiep

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

Oracle Database 10g Release 2オンライン・データ再編成お

よび再定義

オラクル・ホワイト・ペーパー 2005年 9月

Oracle Database 10g Release 2 オンライン・データ再編成および再定義

概要 ...................................................................................................................... 3 はじめに .............................................................................................................. 3 オンライン・データ再定義............................................................................... 4

SQL*PLUSからオンラインで表を再定義する手順 .................................. 6 中間同期化..................................................................................................... 7 手動でトリガー、制約、索引、権限付与を定義する ............................. 7 エラー後の中断とクリーンアップ ............................................................. 7 オンラインの表再定義の例 ......................................................................... 8 個別のパーティション再編成の例 ............................................................. 9

他のオンライン・データ再編成機能............................................................... 9 オンラインの表および索引の操作 ........................................................... 10 未使用領域の再生....................................................................................... 10 その他のデータベース再編成機能 ........................................................... 11

結論 .................................................................................................................... 11

Oracle Database 10g Release 2オンライン・データ再編成および再定義

2

Oracle Corporation発行「Oracle Database 10g Release 2 Online Data Reorganization & Redefinition」の翻訳版です。

Oracle Database 10g Release 2 オンライン・データ再編成および再定義

概要

企業が何らかのメンテナンスのために、システムをオフラインにする日が急速に

減少しています。企業がグローバルになり、E-Commerceを目指すにつれて

E-Commerceに伴う停止時間にかかるコストが時間あたり100万ドルを優に超えて

しまいます。そのためシステムには今、高可用性が必須です。現在、システムが

使用不能であれば、顧客が戻ってくるとは考えられません。彼らは、システムが

オンライン状態の競合会社と取引をするでしょう。

オンライン・データ再編成、つまりデータ再編成中にユーザーがデータベースに

十分にアクセスできる機能が、データベース全体の可用性を向上して計画停止時

間を減少させます。Oracle9iでは、データベース管理者がデータ再編成だけではな

く、データ再定義もオンラインで実行できるオンライン・データ再定義機能が導

入されました。

Oracleデータベースの各リリースで、拡張されたオンライン・データ再編成機能

が導入されています。その中には、オンラインで索引を作成する、オンラインで

索引を再作成する、オンラインで索引を結合する、オンラインで索引構成表(IOT)

を移動するなどの機能があります。

オンライン・データ再定義機能は、今までにない柔軟性を管理者に提供し、ユー

ザーにデータベースへのフル・アクセスを許可する一方、表の物理属性の変更、

データおよび表の構造の変換が実行できます。また、この機能により、アプリケー

ションのアップグレードが、より簡単、安全そして高速になります。

はじめに

Oracle Database 10g Release 2のオンライン・データ再編成と再定義機能は、データ

ベースの可用性、管理性、パフォーマンスを強化するために設計されました。こ

のホワイト・ペーパーでは、オンライン・データ再定義の概要とその機能の使用

例について説明します。

Oracle Database 10gには、次のオンライン機能が追加されています。

• 依存オブジェクト、すなわちトリガー、制約、索引のコピー

• LONG列および LONGRAW列を LOBに変換

• 主キーまたは rowidの代わりに一意のキーを使用

• データの順序付けに使用する列の指定

• ストアド・プロシージャの再コンパイルなしに表を変更

Oracle Database 10g Release 2オンライン・データ再編成および再定義

3

Oracle Corporation発行「Oracle Database 10g Release 2 Online Data Reorganization & Redefinition」の翻訳版です。

• オンライン・セグメント圧縮

Oracle Database 10g Release 2には、次のオンライン機能が追加されています。

• 単一パーティションの再編成

• 詳細キューとクラスタ化された表の再編成

• ADTを含む表の再編成

• 依存オブジェクトをコピーする機能の向上

o 維持および複製の統計

o Check制約と NOT NULL制約

o ネストした表の依存オブジェクト

管理者は、パーティションおよびパラレル操作などの既存する機能を引き続き使

用して、Oracle Database 10gのオンライン機能を補完できます。たとえば、履歴デー

タを個別の管理と簡単な追加または削除できるよう、時間に関連したパーティ

ションに分割するパーティション化により、大きな履歴表とその索引をサポート

できます。

データの再編成中、パラレル・オプションを使用すると、操作が同時に行われ、

パフォーマンスが向上します。これは、複数のパーティションが関連している場

合、たとえば複数のパーティションにおける索引の再構築には、特に便利です。

Oracle Database 10gのオンライン機能は、データ可用性、データベース・パフォー

マンス、応答時間、ディスクスペース利用率を向上させ、これらすべては現在の

ミッション・クリティカルな環境において重要なものです。

オンライン・データ再定義

大きく、アクティブなデータベースでは、大型で使用度の高い表を再定義して、

問い合わせのパフォーマンス、またはこれらの表に対して実行されるデータ操作

言語(DML)の向上が必要になります。さらに、ビジネス・アプリケーションに

よって、基盤となるデータベース構成の定期的な変更または変換が要求されるこ

とがあります。Oracle オンライン再定義機能が、従来の表をオフラインにする表

再定義の方法と異なる点は、可用性を大きく高めるということです。

オンラインで再定義される場合、表は再定義処理中に、すべての読込みと書込み

操作に使用可能です。処理後、管理者は、元の表から新たに定義された表にいつ

切り替えるかを管理できます。切り替えには時間がかからず、表のサイズや再定

義の複雑さに影響されません。再定義プロセスは、効果的に新しい表を作成し、

データ・ブロックのレイアウトを効率よく改善します。

Oracle Database 10g Release 2のオンライン・データ再定義機能は、データ可用性、

データベース・パフォーマンス、応答時間およびディスクスペース利用率を向上

させます。

Oracle Database 10g Release 2オンライン・データ再編成および再定義

4

Oracle Corporation発行「Oracle Database 10g Release 2 Online Data Reorganization & Redefinition」の翻訳版です。

オンラインで表を再定義することで、管理者は次の作業が可能になります。

• 表、詳細キュー、クラスタ化された表の物理属性または記憶域パラメー

タの変更

• ヒープ表または IOTを異なる表領域に移動

• パラレル問合せに対するサポートを追加

• パーティション化のサポートを追加または削除

• 単一パーティションの再編成

• ヒープ表または IOTを再作成して断片化を軽減

• ヒープ表を IOTに、IOTをヒープ表に変更

• 表の列を追加、削除、または名前の変更

• LONG列または LONGRAW列を LOBに変換

• 表のデータを変換

• 抽象データ型を含む表の再編成

さらに、アプリケーションのアップグレード中に、管理者は再定義処理を始め、

その後、定期的に仮表を同期させて元の表に対する最新の変更が仮表に含まれる

ようにします。これにより、最終的な再定義の手順を完了する時間が短縮されま

す。管理者は、再定義処理を完了する前に、仮表のデータを認証および使用でき

ます。これは、アップグレード処理が円滑に進むことの確認が必要な管理者にとっ

て、非常に便利な機能です。

オンライン・データ再編成は、Oracle Enterprise Manager(OEM)または SQL*Plus

コマンドライン・インタフェースのいずれかを使用して完了できます。次の図 1

に、OEM オブジェクトの再編成ウィザード・ビューのサンプルを示します。

図 1: OEM オブジェクトの再編成ウィザード・ビュー

Oracle Database 10g Release 2オンライン・データ再編成および再定義

5

Oracle Corporation発行「Oracle Database 10g Release 2 Online Data Reorganization & Redefinition」の翻訳版です。

SQL*PLUSからオンラインで表を再定義する手順

Oracle Database 10g DBMS_REDEFINITION PL/SQLのパッケージには次のプロ

シージャが含まれています。

• DBMS_REDEFINITION.ABORT_REDEF_TABLE( )

• DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS( )

• DBMS_REDEFINITION.FINISH_REDEF_TABLE( )

• DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT()

• DBMS_REDEFINITION.START_REDEF_TABLE( )

• DBMS_REDEFINITION.SYNC_INTERIM_TABLE( )

• DBMS_REDEFINITION.UNREGISTER_DEPENDENT_OBJECT()

再定義処理中、問合せに役立つ表が 2つあります。

• DBA_REDEFINITION_OBJECTS、再定義中に使用されるオブジェクト

• DBA_REDEFINITION_ERRORS

オンラインで表を再定義するには、管理者は次の手順が必要になります。

1. 必要な属性すべてを持つ、空白の仮表を作成する

2. DBMS_REDEFINITION.START_REDEF_TABLE( )を呼び出して再定義処理を

始め、次を提供する

• スキーマ名

• 再定義する表

• 仮表の名前

• 列のマッピング。列のマッピング情報が提供されていない場合は、す

べての列(名前を変更されていない)を仮表に含むと仮定されます。

列のマッピングが提供されている場合は、列のマッピングで明示的に

指定されている列のみが考慮されます。

• 使用する再定義のメソッド、主キー、一意の索引または rowid

• オプションとして、データの順序付けに使用する列の指定

• オプションとして、再編成するパーティションの指定

3. オプションとして、手動でトリガー、制約、索引および仮表の付与を再定義

し、次に DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT()を使用し

て、登録する。

この手順は、トリガー、制約、索引または権限付与が、すでに表で定義され

ているものと異なる場合のみ必要です。

4. トリガー、制約、索引および権限付与が表で定義されている場合、

DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS( )の実行により、これら

を仮表で複製できます。再定義が完了すると、仮表(無効状態で作成された)

に関連する参照制約およびトリガーが有効になり、すべての統計がコピーさ

れ、すべての複製されたオブジェクトの名前は定義前の名前に変更されます。

Oracle Database 10g Release 2オンライン・データ再編成および再定義

6

Oracle Corporation発行「Oracle Database 10g Release 2 Online Data Reorganization & Redefinition」の翻訳版です。

5. オプションとして、DBMS_REDEFINITION.SYNC_INTERIM_TABLEを実行

することにより、仮表のデータを定期的に同期および認証する。

6. DBMS_REDEFINITION.FINISH_REDEF_TABLE( )プロシージャを実行して、

表の再定義を完了する。

• 元の表は、仮表のすべての属性、索引、制約、権限付与およびトリガー

を持つように再定義されます。

• すべての参照制約とトリガーは有効です。

元の表で定義された PL/SQLプロシージャとカーソルは無効です。次に使用され

るときに、それらは自動的に再び有効になります。

中間同期化

START_REDEF_TABLE( )を呼び出して再定義処理の開始後、

FINISH_REDEF_TABLE( )を呼び出す前に、元の表で多数の DML操作が発生した

可能性があります。その場合は、管理者が定期的に仮表を元の表に同期させるこ

とをお薦めします。これは、DBMS_REDEFINITION.SYNC_INTERIM_TABLE( )

プロシージャを呼び出すことによって実行できます。このプロシージャを呼び出

すと、FINISH_REDEF_TABLE( )が再定義処理の完了に必要とする時間が短縮され

ます。

DBMS_REDEFINITION.SYNC_INTERIM_TABLE( )プロシージャは、複数回呼び出

せます。

手動でトリガー、制約、索引、権限付与を定義する

DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS( )のアクションを無視する

ことが必要な場合があります。たとえば、索引を別の表領域に移動するとします。

これは、仮表で関連変更を行い、次にオブジェクトの新規バージョンを登録する

ために DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT()を使用するこ

とによって達成できます。次に、

DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS( )が実行されると、すでに

定義されているオブジェクト、このケースでは索引は無視されます。

以前に登録されたオブジェクトが必要でなくなるという発生確率の低い事態がで

は、プロシージャを使用して、登録解除できます。

エラー後の中断とクリーンアップ

再定義処理中にエラーが発生した場合、または管理者が再定義処理を中断する場

合は、DBMS_REDEFINITION.ABORT_REDEF_TABLE( )プロシージャが使用でき

ます。このプロシージャにより、再定義処理に関連する一時ログと一時表が削除

されます。このプロシージャが呼び出された後、管理者は仮表および関連するオ

ブジェクトを削除できます。

Oracle Database 10g Release 2オンライン・データ再編成および再定義

7

Oracle Corporation発行「Oracle Database 10g Release 2 Online Data Reorganization & Redefinition」の翻訳版です。

オンラインの表再定義の例

この例では、パーティション化されていない表 empをオンラインで再定義します。

この表には、empno、name、salary、phoneという列があります。スキーマ名は u1

で、表は次のように再定義されます。

• 列 salaryは、因数 1.10が乗算され、名前が salに変更

• 列 phoneは削除

• 新しい列 deptnoが追加され、deptnoの値を決定するためにユーザー定義

の関数 u1.emp_deptを使用

• 再定義された表は empnoの範囲によってパーティション化

• 索引 emp_idx2を表領域 tbs_2に配置

手順 1: 仮表 int_empの作成

CREATE TABLE int_emp

(empno NUMBER , name VARCHAR2(100),

sal NUMBER, deptno NUMBER DEFAULT 10)

PARTITION BY RANGE(empno)

(PARTITION emp1000 VALUES LESS THAN (1000) TABLESPACE tbs_1,

PARTITION emp2000 VALUES LESS THAN (2000) TABLESPACE tbs_2);

手順 2: 別の表領域の仮表で索引を作成

CREATE INDEX int_emp_idx2 ON int_emp (deptno) TABLESPACE tbs_2;

手順 3: 再定義処理の開始

DBMS_REDEFINITION.START_REDEF_TABLE('u1', 'emp', 'int_emp', 'empno empno,

name name, salary*1.10 sal, emp_dept (empno) deptno ');

手順 4: 手動で変更された索引の登録

DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT('u1', 'emp', 'int_emp',

dbms_redefinition.cons_index, 'u1', 'emp_idx2' , 'int_emp_idx2');

手順 5: 依存オブジェクトの複製

DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('u1', 'emp', 'int_emp', 1,

TRUE, TRUE, TRUE , FALSE, no_errors);

手順 6: オプションとして、仮表 int_empの同期化

DBMS_REDEFINITION.SYNC_INTERIM_TABLE('u1', 'emp', 'int_emp');

手順 7: 再定義の完了

DBMS_REDEFINITION.FINISH_REDEF_TABLE('u1', 'emp', 'int_emp');

このコールの後、表 empは、int_emp表のすべての属性を持つように再定義され

ます。表 empは、新たに再定義された表になります。

Oracle Database 10g Release 2オンライン・データ再編成および再定義

8

Oracle Corporation発行「Oracle Database 10g Release 2 Online Data Reorganization & Redefinition」の翻訳版です。

手順 8: 仮表の削除

DROP TABLE int_emp;

個別のパーティション再編成の例

この例では、パーティション化された emp表の単一のパーティション emp2000の

再編成を示します。再編成によって、パーティションは tbs_3という新規表領域に

移動されます。

手順 1: パーティション化されていない仮表 int_empの作成

CREATE TABLE int_emp

(empno NUMBER , name VARCHAR2(100),

sal NUMBER, deptno NUMBER DEFAULT 10)

TABLESPACE tbs_3);

手順 2: 再定義処理の開始

DBMS_REDEFINITION.START_REDEF_TABLE('u1', 'emp', 'int_emp', NULL,

dbms_redefinition.cons_use_rowid, '', 'emp2000') ;

手順 3: オプションとして、仮表 int_empの同期化

DBMS_REDEFINITION.SYNC_INTERIM_TABLE('u1', 'emp', 'int_emp', ‘emp2000’);

手順 4: 再定義の完了

DBMS_REDEFINITION.FINISH_REDEF_TABLE('u1', 'emp', 'int_emp', ‘emp2000’);

手順 5: 仮表の削除

DROP TABLE int_emp;

他のオンライン・データ再編成機能

DBMS_REDEFINITIONパッケージ以外に、CREATE/ALTER INDEXなどの SQL

文を使用して、いくつかのオンライン再編成タスクを実行できます。

Oracle Database 10g Release 2オンライン・データ再編成および再定義

9

Oracle Corporation発行「Oracle Database 10g Release 2 Online Data Reorganization & Redefinition」の翻訳版です。

オンラインの表および索引の操作

次の表に、SQL CREATE/ALTER INDEXおよび TABLE文の ONLINE句を使用し

て実行できる再編成の操作を示します。

Table Move Online Index Create Online Index Rebuild Online

Index Coalesce Online

ALTER TABLE emp MOVE ONLINE;

• パラレル操作はサポートされていな

• 圧縮される

CREATE INDEX emp.ename.idx ON emp(ename) ONLINE;

• パラレル操作がサポートされる

• パーティションがサポートされる

• クラスタ以外のすべての索引タイプ

• サポートされる索引タイプ: IOTセカンダリ、逆キー、ファンクショ

ナル、ビットマッ

プ、キー圧縮

ALTER INDEX emp.ename_idx REBUILD ONLINE;

• パラレル操作がサポートされる

• パーティションがサポートされる

• クラスタ以外のすべての索引タイプ

• サポートされる索引タイプ: IOTセカンダリ、逆キー、ファンクショ

ナル、ビットマッ

プ、キー圧縮

ALTER INDEX emp.ename_idx COALESCE;

• パラレル操作がサポートされる

• パーティションがサポートされる

• すべての索引タイプ

未使用領域の再生

データベースの存続期間中に、データには多くの更新と削除が行われ、その結果、

データベース内の領域が効率よく使用されないことがあります。Oracle Database

10gでは、オブジェクトが自動セグメント領域管理を使用して表領域に保存され

ると、このような領域は表、索引構成表、索引、パーティション、マテリアライ

ズド・ビューのために再生できます。

領域は、オンラインかつインプレースで再生されます。したがって、費用がかか

るデータベースの停止時間および予備の記憶要件が排除されます。SHRINK

SPACE句を ALTER TABLE、ALTER INDEX、ALTER MATERIALIZED VIEWお

よび ALTER MATERIALIZED VIEW LOGの各コマンドに追加することにより、領

域は取得されます。

索引は、領域を再生している間に維持され、その処理が終わると完全に使用でき

る状態になります。オプションの CASCADE句は、すべての依存オブジェクトに

領域を再生する機能を提供します。したがって、表で領域を再生すると、その表

のすべての索引の領域も再生されます。

他のオプションおよび領域再生の制限に関する詳しい情報は『Oracle Database 管

理者ガイド』にあります。

データファイルも、データベースがオープン状態の時に削除できます。『Oracle

Database 管理者ガイ』の第 9章「データファイルおよび一時ファイルの管理」を

参照してください。

Oracle Database 10g Release 2オンライン・データ再編成および再定義

10

Oracle Corporation発行「Oracle Database 10g Release 2 Online Data Reorganization & Redefinition」の翻訳版です。

Oracle Database 10gにはセグメント・アドバイザが含まれています。デフォルトに

より、これは定期的、自動的に実行され、縮小に適しているセグメントを検索し

ます。縮小の候補となるセグメントが識別されると、アラートが送信され、オン

ライン再編成またはセグメント縮小の使用に関するアドバイスが生成されます。

その他のデータベース再編成機能

オンライン再編成を実行中に DBAが利用できる他の機能を次に示します。

• 構造を分析および認証するオンライン機能。この機能により、管理者は、

DML変更を許可する一方で、オブジェクトの構造を認証できます。

• データベース静止機能。この機能により、管理者はデータベースを停止

することなく、メンテナンス操作を実行できます。たとえば、管理者は

データベースを静止状態にしてデータベース表のスキーマを変更し、

PL/SQLプロシージャを更新してデータベース表のこの新しいスキーマ

を使用する新規バージョンにできます。この機能の使用には、Oracleの

Databaseリソース・マネージャが有効であることが必要です。

結論

Oracleでは、制約、トリガーおよびパーティションをオンラインで追加する機能、

索引をオンラインで作成、再作成、結合する機能、索引構成表をオンラインで移

動する機能など、すでに数多くのオンライン機能がサポートされています。オン

ライン・データ再定義および再編成機能を搭載した Oracle Database 10g Release 2

は、データベース全体の可用性と管理性を大幅に向上させます。また、この再定

義機能により、アプリケーションのアップグレードが、簡単および安全、より高

速になります。これらのオンライン機能には、その他に、データベース・パフォー

マンス、応答時間およびディスクスペース利用率の向上などの利点があります。

現在、Oracle Database 10g Release 2は業界で最も完全なオンライン・データ編成と

再定義機能を提供します。これらのオンライン機能により、データベース・ユー

ザーと管理者は、データの再編成および再定義中に、データベースに十分にアク

セスできます。これは、現在のミッション・クリティカルなコンピューティング

環境で、極めて重要な考慮事項です。

Oracle Database 10g Release 2オンライン・データ再編成および再定義

11

Oracle Corporation発行「Oracle Database 10g Release 2 Online Data Reorganization & Redefinition」の翻訳版です。

Oracle Database 10g Release 2オンライン・データ再編成および再定義 2005年 9月 著者: Lilian Hobbs 寄稿者: Paul Tsien Oracle Corporation World Headquarters 500 Oracle Parkway Redwood Shores, CA 94065 U.S.A. 海外からのお問合せ窓口: 電話: +1.650.506.7000 ファックス: +1.650.506.7200 www.oracle.com Copyright © 2005 Oracle Corporation All rights reserved. 無断転載を禁ず この文書はあくまで参考資料であり、掲載されている情報は予告なしに変更されることがあります。 オラクル社は、本ドキュメントの無謬性を保証しません。また、本ドキュメントは、法律で明示的または暗黙的に記載されているかどうかに関係なく、商

品性または特定の目的に対する適合性に関する暗黙の保証や条件を含む一切の保証または条件に制約されません。オラクル社は、本書の内容に関していか

なる保証もいたしません。また、本書により、契約上の直接的および間接的義務も発生しません。本書は、事前の書面による許可を得ることなく、電子的

または機械的に、いかなる形態または手段によっても複製または伝送することはできません。 Oracleは米国 Oracle Corporationおよび関連会社の登録商標です。他の製品名は、それぞれの所有者の商標です。