この章では、情報のプロビジョニングの使用方法について説明します。この章では、表領域リポジトリの作成例、データベース間での表領域の転送例、およびファイル・グループ・リポジトリを使用した異なるバージョンのファイルの格納例を示します。
次の各項では、情報のプロビジョニングの使用について説明します。
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を繰り返します。