この章では、情報のプロビジョニングの使用方法について説明します。この章では、表領域リポジトリの作成例、データベース間での表領域の転送例、およびファイル・グループ・リポジトリを使用した異なるバージョンのファイルの格納例を示します。
次の各項では、情報のプロビジョニングの使用について説明します。
DBMS_STREAMS_TABLESPACE_ADMパッケージの次のプロシージャを使用すると、表領域リポジトリの作成、表領域リポジトリに対するバージョニングされた表領域セットの追加、および表領域リポジトリからのバージョニングされた表領域セットのコピーを実行できます。
ATTACH_TABLESPACES: 表領域リポジトリから表領域セットのバージョンをコピーし、データベースに表領域をアタッチします。
CLONE_TABLESPACES: データベースから表領域セットをコピーして、表領域リポジトリに新しいバージョンの表領域セットを追加します。表領域セット内の表領域は、コピー元のデータベースの一部として残ります。
DETACH_TABLESPACES: 表領域セットをデータベースからリポジトリに移動して、表領域リポジトリに新しいバージョンの表領域セットを追加します。表領域セット内の表領域は、コピー元のデータベースから削除されます。
この項では、表領域リポジトリの使用方法を例とともに説明します。この例での目標は、sales表領域(sales_tbs1およびsales_tbs2)に四半期レポートを実行することです。売上は、inst1.example.comデータベース内のこれらの表領域に記録されます。この例では、四半期ごとに表領域をクローニングし、表領域リポジトリに新しいバージョンの表領域を格納します。表領域リポジトリは、inst1.example.comデータベースにも存在します。レポート・データベースでレポートを実行するために表領域セットの特定のバージョンが必要な場合、そのバージョンが表領域リポジトリからコピーされ、レポート・データベースにアタッチされます。
この例では、次のデータベースがレポート・データベースです。
レポート・データベースinst2.example.com: inst1.example.comデータベースとファイル・システムを共有します。また、inst2.example.comで実行されるレポートによって表領域が変更される場合があります。そのため、表領域はinst2.example.comで読取り/書込み可能になり、レポートの完了時に、新しいバージョンの表領域ファイルが、元のバージョンの表領域ファイルとは別のディレクトリに格納されます。
レポート・システムinst3.example.com: inst1.example.comデータベースとファイル・システムを共有しません。inst3.example.comで実行されるレポートによって表領域が変更されることはありません。そのため、表領域はinst3.example.comで読取り専用のままになり、レポートの完了時に、元のバージョンの表領域ファイルが単一のディレクトリ内に残ります。
次の各項では、表領域リポジトリを作成および移入する方法、および表領域リポジトリを使用して他のデータベースでレポートを実行する方法について説明します。
これらの例は、前述のプロシージャを実行するために必要な権限を持つ管理ユーザーが実行する必要があります。
|
関連項目: これらのプロシージャおよびそれらの実行に必要な権限の詳細は、Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンスを参照 |
この例では、表領域リポジトリを作成し、表領域セットの新しいバージョンを各四半期後にリポジトリに追加します。表領域セットは、企業のsales表領域(sales_tbs1およびsales_tbs2)で構成されています。
図30-1に、この例で作成される表領域リポジトリの概要を示します。
次の表に、この例で作成される表領域セットのバージョン、それらのディレクトリ・オブジェクト、および各ディレクトリ・オブジェクトの対応するファイル・システム・ディレクトリを示します。
| バージョン | ディレクトリ・オブジェクト | 対応するファイル・システム・ディレクトリ |
|---|---|---|
v_q1fy2005 |
q1fy2005 |
/home/sales/q1fy2005 |
v_q2fy2005 |
q2fy2005 |
/home/sales/q2fy2005 |
この例では、次のことを想定しています。
inst1.example.comデータベースが存在しています。
inst1.example.comデータベース内にsales_tbs1およびsales_tbs2表領域が存在しています。
表領域リポジトリを作成および移入するには、次の手順を実行します。
sales表領域が新しい売上データで変更されたデータベースに、管理ユーザーとして接続します。この例では、inst1.example.comデータベースに接続します。
管理ユーザーは、DBMS_STREAMS_TABLESPACE_ADMパッケージのプロシージャの実行およびディレクトリ・オブジェクトの作成に必要な権限を持っている必要があります。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
inst1.example.comで、 2005年度の第1四半期用のディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY q1fy2005 AS '/home/sales/q1fy2005';
ディレクトリ・オブジェクトの作成時に、指定したファイル・システム・ディレクトリが存在している必要があります。
inst1.example.comデータベース内の表領域のデータファイルを含むディレクトリに対応するディレクトリ・オブジェクトを作成します。たとえば、表領域のデータファイルが/orc/inst1/dbsディレクトリに存在する場合は、このディレクトリに対応するディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY dbfiles_inst1 AS '/orc/inst1/dbs';
表領域セットをクローニングし、表領域セットの最初のバージョンを表領域リポジトリに追加します。
DECLARE
tbs_set DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
BEGIN
tbs_set(1) := 'sales_tbs1';
tbs_set(2) := 'sales_tbs2';
DBMS_STREAMS_TABLESPACE_ADM.CLONE_TABLESPACES(
tablespace_names => tbs_set,
tablespace_directory_object => 'q1fy2005',
file_group_name => 'strmadmin.sales',
version_name => 'v_q1fy2005');
END;
/
salesファイル・グループが存在しない場合は、自動的に作成されます。
2005年度の第2四半期の終了時に、2005年度の第2四半期用のディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY q2fy2005 AS '/home/sales/q2fy2005';
ディレクトリ・オブジェクトの作成時に、指定したファイル・システム・ディレクトリが存在している必要があります。
表領域セットをクローニングし、inst1.example.comデータベースで次のバージョンの表領域セットを表領域リポジトリに追加します。
DECLARE
tbs_set DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
BEGIN
tbs_set(1) := 'sales_tbs1';
tbs_set(2) := 'sales_tbs2';
DBMS_STREAMS_TABLESPACE_ADM.CLONE_TABLESPACES(
tablespace_names => tbs_set,
tablespace_directory_object => 'q2fy2005',
file_group_name => 'strmadmin.sales',
version_name => 'v_q2fy2005');
END;
/
各四半期の終了時に手順5と6を繰り返して、四半期ごとに表領域セットのバージョンを格納できます。その際、四半期ごとの表領域ファイルを格納するために新しいディレクトリ・オブジェクトを作成し、その四半期に対して一意のバージョン名を指定します。
この例では、inst2.example.comで、inst1.example.comの表領域リポジトリに格納されたsales表領域の特定のバージョンに対してレポートを実行します。これらの2つのデータベースは1つのファイル・システムを共有するため、inst2.example.comで実行されるレポートによって表領域が変更される場合があります。そのため、表領域はinst2.example.comで読取り/書込み可能になります。レポートの完了時、表領域ファイルの新しいバージョンは、表領域ファイルの元のバージョンとは別のディレクトリに格納されます。
図30-2に、この例で表領域リポジトリ内の表領域を異なるデータベースにアタッチする方法の概要を示します。
図30-3に、この例で表領域リポジトリ内に表領域をデタッチおよび配置する方法の概要を示します。
次の表に、この例の完了時の表領域リポジトリ内の表領域セットのバージョンを示します。この表には、各バージョンのディレクトリ・オブジェクトおよび各ディレクトリ・オブジェクトの対応するファイル・システム・ディレクトリを示します。この例では新しいバージョンが作成されます。この例より前に存在していたバージョンは 「表領域リポジトリの作成および移入」で作成されたものです。
| バージョン | ディレクトリ・オブジェクト | 対応するファイル・システム・ディレクトリ | 新しいか |
|---|---|---|---|
v_q1fy2005 |
q1fy2005 |
/home/sales/q1fy2005 |
いいえ |
v_q1fy2005_r |
q1fy2005_r |
/home/sales/q1fy2005_r |
はい |
v_q2fy2005 |
q2fy2005 |
/home/sales/q2fy2005 |
いいえ |
v_q2fy2005_r |
q2fy2005_r |
/home/sales/q2fy2005_r |
はい |
この例では、次のことを想定しています。
inst1.example.comおよびinst2.example.comデータベースが存在しています。
inst1.example.comおよびinst2.example.comデータベースは共有ファイル・システムにアクセスできます。
これらのデータベースが相互に通信できるように、ネットワークがデータベース間で構成されています。
様々な四半期用のsales表領域(sales_tbs1およびsales_tbs2)のバージョンを含む表領域リポジトリは、inst1.example.comデータベースに存在しています。この表領域リポジトリは、「表領域リポジトリの作成および移入」の例で作成および移入されたものです。
次の手順を実行します。
SQL*Plusで、inst1.example.comに管理ユーザーとして接続します。
管理ユーザーは、ディレクトリ・オブジェクトの作成に必要な権限を持っている必要があります。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
inst2.example.comデータベースで 2005年度の第1四半期のレポートを完了した後、inst1.example.comでこの四半期用の表領域ファイルを格納するディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY q1fy2005_r AS '/home/sales/q1fy2005_r';
ディレクトリ・オブジェクトの作成時に、指定したファイル・システム・ディレクトリが存在している必要があります。
inst2.example.comデータベースに管理ユーザーとして接続します。
管理ユーザーは、DBMS_STREAMS_TABLESPACE_ADMパッケージでのプロシージャの実行、ディレクトリ・オブジェクトの作成およびデータベース・リンクの作成に必要な権限を持っている必要があります。
inst2.example.comで、 2005年度の第1四半期用のディレクトリ・オブジェクトを2つ作成します。これらのディレクトリ・オブジェクトは、inst1.example.comデータベース内の表領域リポジトリによって使用される第1四半期用のディレクトリ・オブジェクトと同じ名前を持ち、共有ファイル・システム上の同じディレクトリに対応する必要があります。
CREATE OR REPLACE DIRECTORY q1fy2005 AS '/home/sales/q1fy2005'; CREATE OR REPLACE DIRECTORY q1fy2005_r AS '/home/sales/q1fy2005_r';
inst2.example.comからinst1.example.comデータベースへのデータベース・リンクを作成します。次に例を示します。
CREATE DATABASE LINK inst1.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'inst1.example.com';
inst1.example.comデータベース内のstrmadmin.salesファイル・グループから、表領域セットをinst2.example.comデータベースにアタッチします。
DECLARE
tbs_set DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
BEGIN
DBMS_STREAMS_TABLESPACE_ADM.ATTACH_TABLESPACES(
file_group_name => 'strmadmin.sales',
version_name => 'v_q1fy2005',
datafiles_directory_object => 'q1fy2005_r',
repository_db_link => 'inst1.example.com',
tablespace_names => tbs_set);
END;
/
datafiles_directory_objectパラメータにq1fy2005_rが指定されていることに注意してください。したがって、表領域のデータファイルおよびエクスポート・ダンプ・ファイルは、プロシージャによって/home/sales/q1fy2005ディレクトリから/home/sales/q1fy2005_rディレクトリにコピーされます。inst2.example.comデータベース内のアタッチされた表領域は、/home/sales/q1fy2005_rディレクトリ内のデータファイルを使用します。データ・ポンプのインポート・ログ・ファイルもこのディレクトリに格納されます。
アタッチされた表領域は、/home/sales/q1fy2005_rディレクトリ内のデータファイルを使用します。ただし、表領域リポジトリ内の表領域のv_q1fy2005バージョンは、元の/home/sales/q1fy2005ディレクトリ内のファイルによって構成されています。
表領域をinst2.example.comで読取り/書込み可能にします。
ALTER TABLESPACE sales_tbs1 READ WRITE; ALTER TABLESPACE sales_tbs2 READ WRITE;
inst2.example.comデータベースで、sales表領域内のデータにレポートを実行します。レポートによって表領域が変更されます。
2005年度の第1四半期用の表領域セットのバージョンを、inst2.example.comデータベースからデタッチします。
DECLARE
tbs_set DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
BEGIN
tbs_set(1) := 'sales_tbs1';
tbs_set(2) := 'sales_tbs2';
DBMS_STREAMS_TABLESPACE_ADM.DETACH_TABLESPACES(
tablespace_names => tbs_set,
export_directory_object => 'q1fy2005_r',
file_group_name => 'strmadmin.sales',
version_name => 'v_q1fy2005_r',
repository_db_link => 'inst1.example.com');
END;
/
一度にデータベースにアタッチできるのは、1つのバージョンの表領域セットのみです。そのため、2005年度の第1四半期用のsales表領域のバージョンをinst2.example.comからデタッチしてから、 2005年度の第2四半期用のこの表領域セットのバージョンをアタッチする必要があります。
また、export_directory_objectにq1fy2005_rが指定され、version_nameがv_q1fy2005_rであることに注意してください。デタッチ操作後、inst1.example.comの表領域リポジトリ内に、 2005年度の第1四半期用の表領域ファイルのバージョンが2つ(1つはレポート前の表領域のバージョン、もう1つはレポート後のバージョン)格納されます。これらの2つのバージョンは異なるバージョン名を持ち、異なるディレクトリ・オブジェクトに格納されます。
inst1.example.comデータベースに管理ユーザーとして接続します。
inst2.example.comデータベースで 2005年度の第2四半期のレポートを完了した後、inst1.example.comでこの四半期用の表領域ファイルを格納するディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY q2fy2005_r AS '/home/sales/q2fy2005_r';
ディレクトリ・オブジェクトの作成時に、指定したファイル・システム・ディレクトリが存在している必要があります。
inst2.example.comデータベースに管理ユーザーとして接続します。
inst2.example.comで、2005年度の第2四半期用のディレクトリ・オブジェクトを2つ作成します。これらのディレクトリ・オブジェクトは、inst1.example.comデータベース内の表領域リポジトリによって使用される第2四半期用のディレクトリ・オブジェクトと同じ名前を持ち、共有ファイル・システム上の同じディレクトリに対応する必要があります。
CREATE OR REPLACE DIRECTORY q2fy2005 AS '/home/sales/q2fy2005'; CREATE OR REPLACE DIRECTORY q2fy2005_r AS '/home/sales/q2fy2005_r';
inst1.example.comデータベース内のsalesファイル・グループから、 2005年度の第2四半期用の表領域セットをinst2.example.comデータベースにアタッチします。
DECLARE
tbs_set DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
BEGIN
DBMS_STREAMS_TABLESPACE_ADM.ATTACH_TABLESPACES(
file_group_name => 'strmadmin.sales',
version_name => 'v_q2fy2005',
datafiles_directory_object => 'q2fy2005_r',
repository_db_link => 'inst1.example.com',
tablespace_names => tbs_set);
END;
/
表領域をinst2.example.comで読取り/書込み可能にします。
ALTER TABLESPACE sales_tbs1 READ WRITE; ALTER TABLESPACE sales_tbs2 READ WRITE;
inst2.example.comデータベースで、sales表領域内のデータにレポートを実行します。レポートによって表領域が変更されます。
2005年度の第2四半期用の表領域セットのバージョンを、inst2.example.comからデタッチします。
DECLARE
tbs_set DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
BEGIN
tbs_set(1) := 'sales_tbs1';
tbs_set(2) := 'sales_tbs2';
DBMS_STREAMS_TABLESPACE_ADM.DETACH_TABLESPACES(
tablespace_names => tbs_set,
export_directory_object => 'q2fy2005_r',
file_group_name => 'strmadmin.sales',
version_name => 'v_q2fy2005_r',
repository_db_link => 'inst1.example.com');
END;
/
この例では、inst3.example.comで、inst1.example.comの表領域リポジトリに格納されたsales表領域の特定のバージョンに対してレポートを実行します。これらの2つのデータベースは1つのファイル・システムを共有しないため、inst3.example.comで実行されるレポートによって表領域は変更されません。そのため、表領域はinst3.example.comで読取り専用のままになり、レポートの完了時に、inst1.example.comの表領域リポジトリに新しいバージョンの表領域ファイルは必要ありません。
図30-4に、この例で表領域リポジトリ内の表領域を異なるデータベースにアタッチする方法の概要を示します。
次の表に、この例で使用されるディレクトリ・オブジェクトを示します。この表には、inst1.example.comデータベースの表領域リポジトリのバージョンに関連付けられた既存のディレクトリ・オブジェクト、およびこの例でinst3.example.comデータベースに作成された新しいディレクトリ・オブジェクトを示します。この例より前に存在していたディレクトリ・オブジェクトは「表領域リポジトリの作成および移入」で作成されたものです。
| ディレクトリ・オブジェクト | データベース | バージョン | 対応するファイル・システム・ディレクトリ | 新しいか |
|---|---|---|---|---|
q1fy2005 |
inst1.example.com |
v_q1fy2005 |
/home/sales/q1fy2005 |
いいえ |
q2fy2005 |
inst1.example.com |
v_q2fy2005 |
/home/sales/q2fy2005 |
いいえ |
q1fy2005 |
inst3.example.com |
表領域リポジトリのバージョンには関連付けられていない | /usr/sales_data/fy2005q1 |
はい |
q2fy2005 |
inst3.example.com |
表領域リポジトリのバージョンには関連付けられていない | /usr/sales_data/fy2005q2 |
はい |
この例では、次のことを想定しています。
inst1.example.comおよびinst3.example.comデータベースが存在しています。
inst1.example.comおよびinst3.example.comデータベースはファイル・システムを共有しません。
データベースが相互に通信できるように、ネットワークがデータベース間で構成されています。
inst1.example.comデータベース内にsales表領域(sales_tbs1およびsales_tbs2)が存在しています。
次の手順を実行します。
SQL*Plusで、inst3.example.comデータベースに管理ユーザーとして接続します。
管理ユーザーは、DBMS_STREAMS_TABLESPACE_ADMパッケージでのプロシージャの実行、ディレクトリ・オブジェクトの作成およびデータベース・リンクの作成に必要な権限を持っている必要があります。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
inst3.example.comからinst1.example.comデータベースへのデータベース・リンクを作成します。次に例を示します。
CREATE DATABASE LINK inst1.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'inst1.example.com';
inst3.example.comで、 2005年度の第1四半期用のディレクトリ・オブジェクトを作成します。inst3.example.comは、inst1.example.comとファイル・システムを共有しないリモート・データベースであるにもかかわらず、ディレクトリ・オブジェクトは、inst1.example.comデータベース内の表領域リポジトリによって使用される第1四半期用のディレクトリ・オブジェクトと同じ名前を持つ必要があります。ただし、inst1.example.comとinst3.example.com上のディレクトリ・オブジェクトのディレクトリ・パスが一致する必要はありません。
CREATE OR REPLACE DIRECTORY q1fy2005 AS '/usr/sales_data/fy2005q1';
ディレクトリ・オブジェクトの作成時に、指定したファイル・システム・ディレクトリが存在している必要があります。
inst1.example.comデータベースに管理ユーザーとして接続します。
管理ユーザーは、DBMS_FILE_TRANSFERパッケージのプロシージャの実行およびデータベース・リンクの作成に必要な権限を持っている必要があります。この例では、DBMS_FILE_TRANSFERパッケージを使用して、表領域ファイルをinst1.example.comからinst3.example.comにコピーします。その他の方法を使用してファイルを転送した場合、DBMS_FILE_TRANSFERパッケージのプロシージャを実行するための権限は必要ありません。
inst1.example.comからinst3.example.comデータベースへのデータベース・リンクを作成します。次に例を示します。
CREATE DATABASE LINK inst3.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'inst3.example.com';
このデータベース・リンクは、手順6でinst3.example.comデータベースへのファイルの転送に使用されます。
第1四半期用の各表領域のデータファイルおよびエクスポート・ダンプ・ファイルをinst3.example.comデータベースにコピーします。
BEGIN
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object => 'q1fy2005',
source_file_name => 'sales_tbs1.dbf',
destination_directory_object => 'q1fy2005',
destination_file_name => 'sales_tbs1.dbf',
destination_database => 'inst3.example.com');
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object => 'q1fy2005',
source_file_name => 'sales_tbs2.dbf',
destination_directory_object => 'q1fy2005',
destination_file_name => 'sales_tbs2.dbf',
destination_database => 'inst3.example.com');
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object => 'q1fy2005',
source_file_name => 'expdat16.dmp',
destination_directory_object => 'q1fy2005',
destination_file_name => 'expdat16.dmp',
destination_database => 'inst3.example.com');
END;
/
エクスポート・ダンプ・ファイルにPUT_FILEプロシージャを実行する前に、DBA_FILE_GROUP_FILESデータ・ディクショナリ・ビューを問い合せて、エクスポート・ダンプ・ファイルの名前およびディレクトリ・オブジェクトを確認できます。たとえば、v_q1fy2005バージョン内のエクスポート・ダンプ・ファイルの情報を表示するには、次の問合せを実行します。
COLUMN FILE_NAME HEADING 'Export Dump|File Name' FORMAT A35
COLUMN FILE_DIRECTORY HEADING 'Directory Object' FORMAT A35
SELECT FILE_NAME, FILE_DIRECTORY FROM DBA_FILE_GROUP_FILES
where FILE_GROUP_NAME = 'SALES' AND
VERSION_NAME = 'V_Q1FY2005';
inst3.example.comデータベースに管理ユーザーとして接続します。
inst1.example.comデータベース内のsalesファイル・グループから、 2005年度の第1四半期用の表領域セットをinst3.example.comデータベースにアタッチします。
DECLARE
tbs_set DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
BEGIN
DBMS_STREAMS_TABLESPACE_ADM.ATTACH_TABLESPACES(
file_group_name => 'strmadmin.sales',
version_name => 'v_q1fy2005',
datafiles_directory_object => 'q1fy2005',
repository_db_link => 'inst1.example.com',
tablespace_names => tbs_set);
END;
/
表領域は、アタッチ時に読取り専用になります。inst3.example.comへのレポートでは表領域が変更されないため、表領域は読取り専用のままになります。
inst3.example.comデータベースで、sales表領域内のデータにレポートを実行します。
表領域およびその内容をinst3.example.comで削除します。
DROP TABLESPACE sales_tbs1 INCLUDING CONTENTS; DROP TABLESPACE sales_tbs2 INCLUDING CONTENTS;
表領域がinst3.example.comデータベースから削除されても、表領域ファイルはディレクトリ・オブジェクトに残ったままです。
inst3.example.comで、 2005年度の第2四半期用のディレクトリ・オブジェクトを作成します。ディレクトリ・オブジェクトは、inst1.example.comデータベース内の表領域リポジトリによって使用されている第2四半期用のディレクトリ・オブジェクトと同じ名前を持つ必要があります。ただし、inst1.example.comとinst3.example.com上のディレクトリ・オブジェクトのディレクトリ・パスが一致する必要はありません。
CREATE OR REPLACE DIRECTORY q2fy2005 AS '/usr/sales_data/fy2005q2';
ディレクトリ・オブジェクトの作成時に、指定したファイル・システム・ディレクトリが存在している必要があります。
inst1.example.comデータベースに管理ユーザーとして接続します。
第2四半期用のデータファイルおよびエクスポート・ダンプ・ファイルをinst3.example.comデータベースにコピーします。
BEGIN
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object => 'q2fy2005',
source_file_name => 'sales_tbs1.dbf',
destination_directory_object => 'q2fy2005',
destination_file_name => 'sales_tbs1.dbf',
destination_database => 'inst3.example.com');
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object => 'q2fy2005',
source_file_name => 'sales_tbs2.dbf',
destination_directory_object => 'q2fy2005',
destination_file_name => 'sales_tbs2.dbf',
destination_database => 'inst3.example.com');
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object => 'q2fy2005',
source_file_name => 'expdat18.dmp',
destination_directory_object => 'q2fy2005',
destination_file_name => 'expdat18.dmp',
destination_database => 'inst3.example.com');
END;
/
エクスポート・ダンプ・ファイルにPUT_FILEプロシージャを実行する前に、DBA_FILE_GROUP_FILESデータ・ディクショナリ・ビューを問い合せて、エクスポート・ダンプ・ファイルの名前およびディレクトリ・オブジェクトを確認できます。たとえば、v_q2fy2005バージョン内のエクスポート・ダンプ・ファイルの情報を表示するには、次の問合せを実行します。
COLUMN FILE_NAME HEADING 'Export Dump|File Name' FORMAT A35
COLUMN FILE_DIRECTORY HEADING 'Directory Object' FORMAT A35
SELECT FILE_NAME, FILE_DIRECTORY FROM DBA_FILE_GROUP_FILES
where FILE_GROUP_NAME = 'SALES' AND
VERSION_NAME = 'V_Q2FY2005';
inst3.example.comデータベースに管理ユーザーとして接続します。
inst1.example.comデータベース内のsalesファイル・グループから、 2005年度の第2四半期用の表領域セットをinst3.example.comデータベースにアタッチします。
DECLARE
tbs_set DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
BEGIN
DBMS_STREAMS_TABLESPACE_ADM.ATTACH_TABLESPACES(
file_group_name => 'strmadmin.sales',
version_name => 'v_q2fy2005',
datafiles_directory_object => 'q2fy2005',
repository_db_link => 'inst1.example.com',
tablespace_names => tbs_set);
END;
/
表領域は、アタッチ時に読取り専用になります。inst3.example.comへのレポートでは表領域が変更されないため、表領域は読取り専用のままになります。
inst3.example.comデータベースで、sales表領域内のデータにレポートを実行します。
表領域およびその内容を削除します。
DROP TABLESPACE sales_tbs1 INCLUDING CONTENTS; DROP TABLESPACE sales_tbs2 INCLUDING CONTENTS;
表領域がinst3.example.comデータベースから削除されても、表領域ファイルはディレクトリ・オブジェクトに残ったままです。
DBMS_FILE_GROUPパッケージを使用すると、ファイル・グループ・リポジトリの作成、リポジトリへのバージョニングされたファイル・グループの追加およびリポジトリからのバージョニングされたファイル・グループのコピーを実行できます。この項では、ファイル・グループ・リポジトリの使用方法とリポジトリにレポートを格納する使用例について説明します。
この例では、ある企業がインターネット経由で書籍および音楽商品を販売します。企業は、inst1.example.comデータベース内の売上データに関する週次レポートを実行し、これらのレポートをコンピュータ・ファイル・システムに2つのHTMLファイルで格納します。book_sales.htmファイルには、書籍の売上レポートが含まれ、music_sales.htmファイルには、音楽商品の売上レポートが含まれます。企業は、これらの週次レポートを、inst2.example.comリモート・データベースのファイル・グループ・リポジトリに格納します。毎週、2つのレポートがinst1.example.comデータベースで生成され、inst2.example.comデータベースが実行されているコンピュータ・システムに転送され、ファイル・グループ・バージョンとしてリポジトリに追加されます。ファイル・グループ・リポジトリには、週ごとのレポートを含むすべてのファイル・グループのバージョンが格納されます。
図30-5に、この例で作成されるファイル・グループ・リポジトリの概要を示します。
ファイル・グループ・リポジトリのメリットは、データ・ディクショナリ内の各ファイル・グループのバージョンに関するメタデータを格納し、ファイル・グループのバージョンを管理するための標準インタフェースを提供することです。たとえば、企業が特定の売上レポートを表示する必要がある場合、inst2.example.comデータベース内のデータ・ディクショナリを問い合せて、コンピュータ・ファイル・システム上のレポートの場所を判別できます。
次の表に、この例で作成されるディレクトリ・オブジェクトを示します。この表には、新しいレポートを格納するためにinst1.example.comデータベースに作成されるディレクトリ・オブジェクト、およびinst2.example.comデータベース上のファイル・グループ・リポジトリのバージョンに関連付けられたディレクトリ・オブジェクトを示します。
| ディレクトリ・オブジェクト | データベース | バージョン | 対応するファイル・システム・ディレクトリ |
|---|---|---|---|
sales_reports |
inst1.example.com |
ファイル・グループ・リポジトリのバージョンには関連付けられていない | /home/sales_reports |
sales_reports1 |
inst2.example.com |
sales_reports_v1 |
/home/sales_reports/fg1 |
sales_reports2 |
inst2.example.com |
sales_reports_v1 |
/home/sales_reports/fg2 |
この例では、次のことを想定しています。
inst1.example.comおよびinst2.example.comデータベースが存在しています。
inst1.example.comおよびinst2.example.comデータベースはファイル・システムを共有しません。
データベースが相互に通信できるように、ネットワークがデータベース間で構成されています。
inst1.example.comデータベースでは、データベース内の書籍および音楽商品の売上データに関するレポートが実行され、コンピュータ・ファイル・システムにHTMLファイルとしてレポートが格納されます。
リモート・データベースでファイル・グループ・リポジトリを構成および移入するには、次の手順を実行します。
ファイル・グループ・リポジトリを含むリモート・データベースに、管理ユーザーとして接続します。この例では、inst2.example.comデータベースに接続します。
管理ユーザーは、ディレクトリ・オブジェクトの作成およびDBMS_FILE_GROUPパッケージのプロシージャの実行に必要な権限を持っている必要があります。
SQL*Plusでデータベースに接続する方法については、Oracle Database管理者ガイドを参照してください。
ファイル・グループの最初のバージョンを保持するためのディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY sales_reports1 AS '/home/sales_reports/fg1';
ディレクトリ・オブジェクトの作成時に、指定したファイル・システム・ディレクトリが存在している必要があります。
レポートを実行するデータベースに、管理ユーザーとして接続します。この例では、inst1.example.comデータベースに接続します。
管理ユーザーは、ディレクトリ・オブジェクトの作成に必要な権限を持っている必要があります。
最新のレポートを保持するためのディレクトリ・オブジェクトを作成します。
CREATE OR REPLACE DIRECTORY sales_reports AS '/home/sales_reports';
ディレクトリ・オブジェクトの作成時に、指定したファイル・システム・ディレクトリが存在している必要があります。
inst2.example.comデータベースへのデータベース・リンクを作成します。
CREATE DATABASE LINK inst2.example.com CONNECT TO strmadmin
IDENTIFIED BY password
USING 'inst2.example.com';
inst1.example.comデータベースにレポートを実行します。レポートを実行すると、book_sales.htmおよびmusic_sales.htmファイルが、手順4で指定したディレクトリに配置されます。
ファイル転送プロトコル(FTP)またはその他の方法を使用して、inst1.example.comデータベースが実行されているコンピュータ・システムからinst2.example.comデータベースが実行されているコンピュータ・システムにレポート・ファイルを転送します。ファイルが、手順2で作成したディレクトリ・オブジェクトに対応するディレクトリにコピーされていることを確認します。
ファイル・グループ・リポジトリを含むリモート・データベースに、管理ユーザーとして接続します。この例では、inst2.example.comデータベースに接続します。
レポートを含むファイル・グループ・リポジトリを作成します。
BEGIN
DBMS_FILE_GROUP.CREATE_FILE_GROUP(
file_group_name => 'strmadmin.reports');
END;
/
reportsファイル・グループ・リポジトリは、次のデフォルト・プロパティを使用して作成されます。
リポジトリ内のバージョンの最小数は2です。ファイル・グループを消去するとバージョンの数が2未満になる場合は、そのファイル・グループを消去できません。
バージョンの最大数は無制限です。ファイル・グループのバージョンは、リポジトリ内のファイル・グループのバージョン数が原因で削除されることはありません。
保持日数は無制限です。ファイル・グループのバージョンは、リポジトリ内で保持された時間が原因で消去されることはありません。
ファイル・グループの最初のバージョンを作成します。
BEGIN
DBMS_FILE_GROUP.CREATE_VERSION(
file_group_name => 'strmadmin.reports',
version_name => 'sales_reports_v1',
comments => 'Sales reports for week of 06-FEB-2005');
END;
/
ファイル・グループのバージョンにレポート・ファイルを追加します。
BEGIN
DBMS_FILE_GROUP.ADD_FILE(
file_group_name => 'strmadmin.reports',
file_name => 'book_sales.htm',
file_type => 'HTML',
file_directory => 'sales_reports1',
version_name => 'sales_reports_v1');
DBMS_FILE_GROUP.ADD_FILE(
file_group_name => 'strmadmin.reports',
file_name => 'music_sales.htm',
file_type => 'HTML',
file_directory => 'sales_reports1',
version_name => 'sales_reports_v1');
END;
/
ファイル・グループの次のバージョンを保持するためのディレクトリ・オブジェクトをinst2.example.comに作成します。
CREATE OR REPLACE DIRECTORY sales_reports2 AS '/home/sales_reports/fg2';
ディレクトリ・オブジェクトの作成時に、指定したファイル・システム・ディレクトリが存在している必要があります。
翌週末にinst1.example.comデータベースにレポートを実行します。レポートを実行すると、新しいbook_sales.htmおよびmusic_sales.htmファイルが、手順4で指定したディレクトリに格納されます。必要に応じて、このディレクトリから古いファイルを削除してからレポートを実行します。
ファイル転送プロトコル(FTP)またはその他の方法を使用して、inst1.example.comデータベースが実行されているコンピュータ・システムからinst2.example.comデータベースが実行されているコンピュータ・システムにレポート・ファイルを転送します。ファイルが、手順12で作成したディレクトリ・オブジェクトに対応するディレクトリにコピーされていることを確認します。
SQL*Plusで、inst2.example.comデータベースに管理ユーザーとして接続します。
ファイル・グループの次のバージョンを作成します。
BEGIN
DBMS_FILE_GROUP.CREATE_VERSION(
file_group_name => 'strmadmin.reports',
version_name => 'sales_reports_v2',
comments => 'Sales reports for week of 13-FEB-2005');
END;
/
ファイル・グループのバージョンにレポート・ファイルを追加します。
BEGIN
DBMS_FILE_GROUP.ADD_FILE(
file_group_name => 'strmadmin.reports',
file_name => 'book_sales.htm',
file_type => 'HTML',
file_directory => 'sales_reports2',
version_name => 'sales_reports_v2');
DBMS_FILE_GROUP.ADD_FILE(
file_group_name => 'strmadmin.reports',
file_name => 'music_sales.htm',
file_type => 'HTML',
file_directory => 'sales_reports2',
version_name => 'sales_reports_v2');
END;
/
この時点で、ファイル・グループ・リポジトリには、売上レポート・ファイルを含むファイル・グループの2つのバージョンが含まれます。ファイル・グループの新しいバージョンをリポジトリに追加するには、手順12から17を繰り返します。