エディション・ベースの再定義機能を使用したアプリケーションのオンライン・アップグレードの実行

このチュートリアルでは、Oracle Database 11g Release 2の新機能であるエディション・ベースの再定義を使用して、データベース・アプリケーションのオンライン・アップグレードを実行する方法について説明します。

約1時間

トピック

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

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

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

概要

Oracle Databaseには、高可用性に加え、予期しない障害の発生時や計画保守時に企業が運用を継続できる幅広い機能が備わっています。 アプリケーションのオンライン・アップグレードに対応するため、Oracle Database 11g Release 2では、エディションという新しいデータベース・オブジェクト・タイプを導入することにより、データベース・オブジェクトのネーミング・メカニズムを強化しています。

エディションは、非スキーマ型のデータベース・オブジェクトです。 データベース・セッションはすべて、エディションに関連しています。 アプリケーションのアップグレード時には、新エディションが既存のエディションの子として作成され、子エディションは親エディションのすべてのオブジェクトを継承します。 アップグレードは、この新エディションのプライバシ内に適用されます。 エディション・ベースの再定義には、既存のスキーマのネーミング・メカニズムを使用して引き続きオブジェクトを参照できるという柔軟性があります。 オブジェクトのエディション名は、Oracle Databaseによって自動的に解決されます。そのため、アップグレードをまったく認識せずに、アップグレード前のアプリケーションで、旧エディションに関連するデータベース・オブジェクトを引き続き処理できます。 アプリケーションのアップグレードに伴うデータ変更は、旧エディションからは見えない新しい列や表にのみ書き込まれ、安全に実行されます。

Oracle Database 11g Release 2には、エディションごとに異なる表示で表を公開し、各エディションに独自の列のみを表示できる特殊なエディション・ビューが導入されています。 また、アップグレード後のエディションをアップグレード前のエディションで発生したデータ変更と同期させる(またはその逆の処理を行う)ため、Oracle Database 11g Release 2には旧エディションで行われたデータ変更を新エディションの列に伝播する(またはその逆の処理を行う)特殊なクロスエディション・トリガーが導入されています。

このチュートリアルでは、エディション・ビューとクロスエディション・トリガーによって、アプリケーションのオンライン・アップグレードがいかに簡素化されるかについて説明します。 このチュートリアルでは、employees表のPHONE_NUMBER列を、COUNTRY_CODE列とPHONE_NUMBER_WITHIN_COUNTRY列の2列に分割します。

注:アップグレードを実行する開発者は、SQLスクリプトを記述して、機械的にアプリケーションのアップグレードを実施することもできます。 このチュートリアルでは、Oracle SQL Developerを使用してアップグレード手順を実行します。

トピック・リストに戻る

このチュートリアルを始める前に以下の実行が必要となります。

1.

Oracle Database 11gをインストールします。

2.

Oracle SQL Developerをインストールします。

3.

このチュートリアルの実行に必要なファイルを含む作業ディレクトリに、ebr.zipファイルをダウンロードして解凍します。

トピック・リストに戻る

環境のセットアップ

このOBEを実行するには、以下の手順を実行して環境を設定しておく必要があります。

1.

Oracle SQL Developerを開きます。 接続ナビゲータの「New Connection」アイコンをクリックします。

 

2.

以下の詳細情報を設定して、sys接続を作成します。

Connection Name: sys
Username: sys
Password: <your_password>
Check the Save Password checkbox
Role: SYSDBA
Connection Type: Basic
Hostname: localhost
Port: 1521
SID: orcl

Test」ボタンをクリックします。 StatusSuccessになっていることを確認します。



接続を保存するには、「Save」をクリックします。


 
          
3.

以下の詳細情報を設定して、hr接続を作成します。

Connection Name: hr
Username: hr
Password: hr
Check the Save Password checkbox Role: Default Connection Type: Basic Hostname: localhost Port: 1521 SID: orcl

Test」ボタンをクリックします。 StatusSuccessになっていることを確認します。



接続を保存するには、「Connect」をクリックします。


 
          

トピック・リストに戻る

エディション・ベースの再定義の準備

アプリケーションのオンライン・アップグレードを開始する前に、以下の手順を実行してアプリケーションの準備をする必要があります。

1. 新しく作成したsys接続に接続します。 「sys」接続を右クリックし、「Connect」を選択します。

 

2. sysユーザーとして、hrユーザーのエディションを有効化します。 以下のコマンドを入力して、「Run Script」アイコンをクリックします。

ALTER USER hr ENABLE EDITIONS;

 

3.

エディション・ベースの再定義を実行するには、そのユーザーのすべての表の名前を変更する必要があります。 表記規則に従って、以前の名前と類似した名前を付けることができます。 このチュートリアルでは、表の名前の最後にアンダースコアを追加します。 たとえば、employeesという表の名前をemployees_に変更します。

hrユーザーに接続します。 「hr」接続を右クリックし、「Connect」を選択します。

 

4.

hrユーザーとして、employeesという表の名前をemployees_に変更します。以下のコマンドを入力して、「Run Script」アイコンをクリックします。

ALTER TABLE employees RENAME TO employees_;

 

5. hrユーザーとして、すべての表にエディション・ビューを作成します。 エディション・ビューには、元表の以前の名前を付けます。 たとえば、employees_という表のエディション・ビューの名前を、以前の実際の名前であるemployeesに変更します。

CREATE EDITIONING VIEW employees AS
SELECT
employee_id, first_name, last_name, email, PHONE_NUMBER, hire_date, job_id, salary, commission_pct, manager_id, department_id
FROM employees_;

 

トピック・リストに戻る

新エディションの作成

以下の手順で新エディションを作成します。

1. sys」タブを選択し、sys接続のSQL Worksheetに進みます。

 

2.

Oracle Database 11g Release 2を作成またはアップグレードする場合は、Ora$Baseという名前でエディションを取得します。 sysユーザーとして、現行エディションOra$Baseの子としてpost_upgradeという新エディションを作成します。

CREATE EDITION post_upgrade AS CHILD OF Ora$Base;

 

3.

sysユーザーとして、post_upgradeエディションのUSE権限をhrユーザーに付与します。

GRANT USE ON EDITION post_upgrade TO hr;

 

トピック・リストに戻る

新エディションの現行エディションへの設定

スクリプトで子エディションが作成されたため、以下の手順で子エディションを現行エディションに設定します。

1. hr」タブを選択し、hr接続のSQL Worksheetに進みます。

 

2.

子エディションのpost_upgradeを現行エディションに設定します。

ALTER SESSION SET EDITION = post_upgrade;

 

トピック・リストに戻る

アンダースコア付きの表の変更

post_upgradeエディションが設定されたら、以下の手順を実行して、スクリプトでemployees_表の定義を変更し、置換列を追加します。

1.

hr接続で、次のALTER文を使用して、COUNTRY_CODE列とPHONE_NUMBER_WITHIN_COUNTRY列を追加します。

ALTER TABLE employees_ ADD
(COUNTRY_CODE VARCHAR2(5),
PHONE_NUMBER_WITHIN_COUNTRY VARCHAR2(20));

Ora$Baseエディションの既存列(PHONE_NUMBER)は、post_upgradeエディションでも保持されます。

 

トピック・リストに戻る

エディション・ビューの置換え

以下の手順で、新規作成した置換列を追加して、親エディションに作成したエディション・ビューを置き換えます。

1.

hr接続で、次のコードを使用して、子エディションのemployeesエディション・ビューにCOUNTRY_CODE列とPHONE_NUMBER_WITHIN_COUNTRY列を追加します。

CREATE OR REPLACE EDITIONING VIEW employees AS
SELECT employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id, phone_number_within_country, country_code
FROM employees_;


 

トピック・リストに戻る

フォワード・クロスエディション・トリガーは、アップグレード前の列に発生したDML変更に基づいて、アップグレード後の列を更新します。 以下の手順で、employees_表にempl_forwardというフォワード・クロスエディション・トリガーを作成します。このトリガーは、Ora$Baseエディションでemployees_表にDMLが発行されると起動します。

1.

SQL Developerで、fwd_ce.sqlファイルを開きます。

 

2.

[F5]キーを押すか、「Run Script」ボタンをクリックして、スクリプトを実行します。

 

3.

Select Connectionダイアログで、Connectionの「hr」を選択します。

 

トピック・リストに戻る

リバース・クロスエディション・トリガーの定義

リバース・クロスエディション・トリガーは、アップグレード後のアプリケーションによって行われたDML変更に基づいて、アップグレード前の列を更新します。 以下の手順で、employees_表にempl_reverseというリバース・クロスエディション・トリガーを作成します。このトリガーは、post_upgradeエディションでemployees_表にDMLが発行されると起動します。

1.

SQL Developerで、rev_ce.sqlファイルを開きます。

 

2.

[F5]キーを押すか、「Run Script」ボタンをクリックして、スクリプトを実行します。

Select Connectionダイアログで、Connectionの「hr」を選択します。

 

トピック・リストに戻る

一括フォワード伝播

以下の手順で、表の既存行の列を分割します。

1.

SQL Developerで、bulk_fwd.sqlファイルを開きます。

 

2.

[F5]キーを押すか「Run Script」ボタンをクリックしてスクリプトを実行し、すべての行にフォワード・クロスエディション・トリガーを適用します。

Select Connectionダイアログで、Connetionに「hr」を選択します。

 

トピック・リストに戻る

フォワード・クロスエディション・トリガーの結果の確認

以下の手順で、フォワード・クロスエディション・トリガーの結果を確認します。

1.

SQL Developerで、/home/oracle/wkdir/ebr/ver_fwd.sql.ファイルを開きます。

 

2.

[F5]キーを押すか、「Run Script」ボタンをクリックして、スクリプトを実行します。

Select Connectionダイアログで、Connectionの「hr」を選択します。

employees_表の挿入や更新を行う前に、empl_forwardPHONE_NUMBER列の新しい値を使用してCOUNTRY_CODE列とPHONE_NUMBER_WITHIN_COUNTRY列を更新します。 したがって、post_upgradeエディションでは、PHONE_NUMBERCOUNTRY_CODEPHONE_NUMBER_WITHIN_COUNTRYを選択すると、PHONE_NUMBER_WITHIN_COUNTRYの更新値が表示されます。

 

トピック・リストに戻る

リバース・クロスエディション・トリガーの結果の確認

以下の手順で、リバース・クロスエディション・トリガーの結果を確認します。

1.

SQL Developerで、ver_rev.sqlファイルを開きます。

 

2.

[F5]キーを押すか、「Run Script」ボタンをクリックして、スクリプトを実行します。

Select Connectionダイアログで、Connectionの「hr」を選択します。

DMLが起動してpost_upgradeエディションのemployees_表で行の挿入やPHONE_NUMBER_WITHIN_COUNTRY列の更新が行われると、DMLはempl_reverseトリガーを起動します。 empl_reverseトリガーは、PHONE_NUMBER_WITHIN_COUNTRY列の新しい値を使用して、アップグレード前のPHONE_NUMBER列を更新します。 したがって、post_upgradeエディションでは、PHONE_NUMBERCOUNTRY_CODEPHONE_NUMBER_WITHIN_COUNTRYを選択すると、PHONE_NUMBERの更新値が表示されます。

 

トピック・リストに戻る

アップグレード後のエディションの全ユーザーへの適用

post_upgradeエディションが正常に動作を開始したら、以下の手順を実行して、すべてのユーザーがこのエディションを使用できるようにします。

1. sys」接続タブを選択します。

 

2.

次のコマンドを実行します。

GRANT USE ON EDITION post_upgrade to PUBLIC;

 

トピック・リストに戻る

この項では、チュートリアルで最初に停止したプロセスを起動します。

1.

ターミナル・ウィンドウを開き、次のコマンドを実行してhrユーザーとすべての関連データベース・オブジェクトを再作成します。

cd <location of files>/ebr
sqlplus / as sysdba
@hr_main

exit

 

トピック・リストに戻る

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

エディションを作成して、アプリケーションのオンライン・アップグレードを簡素化
エディション・ビューを作成して、エディション非対応表の異なる論理プロジェクトを設定
クロスエディション・トリガーを作成して、アプリケーションのオンライン・アップグレード時にアップグレード前と後のエディションで発生した、トランザクション・データの変更を適切に記録
アップグレード前のエディションをUNUSABLEに設定し、全ユーザーにpost-upgradeエディションを適用

トピック・リストに戻る

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