日本語PDF

14 データファイルおよび一時ファイルの管理

データファイルおよび一時ファイルの管理では、ファイルの作成、変更および削除などのタスクを行います。

ノート:

一時ファイルは、一時表領域にのみ関連付けられたデータファイルの特殊なクラスです。この章で説明する内容は、相違点が示されている場合を除き、データファイルと一時ファイルの両方に適用されます。一時ファイルの詳細は、「ローカル管理の一時表領域の作成」を参照してください

関連項目:

14.1 データファイルを管理するためのガイドライン

ガイドラインに従ってデータファイルを管理できます。

14.1.1 データファイルについて

データファイルは、データベース内に存在するすべての論理構造のデータを格納する、オペレーティング・システムの物理ファイルです。データファイルは、表領域ごとに明示的に作成する必要があります。

Oracle Databaseでは、データファイルを一意に識別するために使用される絶対ファイル番号と相対ファイル番号という2つの関連するファイル番号を各データファイルに割り当てます。この番号について、次の表で説明します。

ファイル番号のタイプ 説明

絶対

データベース内のデータファイルを一意に識別します。このファイル番号は、ファイル名を使用するかわりにデータファイルを参照する多くのSQL文で使用できます。絶対ファイル番号は、V$DATAFILEビューまたはV$TEMPFILEビューのFILE#列、またはDBA_DATA_FILESビューまたはDBA_TEMP_FILESビューのFILE_ID列で確認できます。

相対

表領域内のデータファイルを一意に識別します。小規模および中規模サイズのデータベースでは、多くの場合、相対ファイル番号と絶対ファイル番号は同じです。ただし、データベース内のデータファイル数が一定のしきい値(通常は1023)を超えている場合は、相対ファイル番号と絶対ファイル番号が異なります。bigfile表領域では、相対ファイル番号は常に1024(OS/390プラットフォームでは4096)です。

14.1.2 データファイル数の決定

データベースのためのデータファイルの数を決定する必要があります。

14.1.2.1 データファイル数の決定について

データベースのSYSTEM表領域およびSYSAUX表領域には、少なくとも1つのデータファイルが必要です。データベースにはこれ以外に、複数の表領域とそれに関連するデータファイルまたは一時ファイルが含まれている必要があります。データベースで作成するデータファイルの数に応じて、初期化パラメータの設定値およびCREATE DATABASE文の句の指定が決定します。

オペレーティング・システムによっては、Oracle Databaseに格納できるデータファイルの数が制限される場合があります。また、データファイル数およびその割当ての方法と場所によって、データベースのパフォーマンスが影響を受ける可能性があることを考慮してください。

ノート:

データベース内のデータファイルの数を制御してその管理を簡素化する方法の1つが、bigfile表領域の使用です。bigfile表領域は1つの大型データファイルのみで構成され、大規模データベースを使用する場合、および論理ボリューム・マネージャを使用してオペレーティング・システム・ファイルを管理する場合に特に役立ちます。bigfile表領域については、「bigfile表領域」を参照してください。

データベースのデータファイルの数を決める際は、次のガイドラインを考慮してください。

14.1.2.2 DB_FILES初期化パラメータの値の決定

Oracle Databaseインスタンスが起動されると、DB_FILES初期化パラメータによって、データファイル情報のために確保するSGA領域の大きさと、それに伴ってそのインスタンスに作成可能な最大データファイル数が指定されます。

この制限は、そのインスタンスが存続期間にわたって適用されます。DB_FILESの値は(初期化パラメータの設定を変更することによって)変更可能ですが、新しい値はインスタンスが停止されて再起動されるまで有効になりません。

DB_FILESの値を決めるときは、次の点を考慮してください。

  • DB_FILESの値が小さすぎる場合は、最初にデータベースを停止しないと、DB_FILES制限を超えてデータファイルを追加できません。

  • DB_FILESの値が大きすぎると、メモリーが不必要に消費されます。

14.1.2.3 データファイルを表領域に追加するときの制限事項の考慮

表領域にデータファイルを追加するときに考慮すべきいくつかの制限事項があります。

データファイルを従来のsmallfile表領域に追加するときには、次の制限事項があります。

  • ほとんどのオペレーティング・システムでは、1つのプロセスで同時にオープンできるファイルの数に制限があります。オープン・ファイル数がオペレーティング・システム制限に達すると、それ以上データファイルを作成できなくなります。

  • オペレーティング・システムでは、データファイルの数とサイズに制限があります。

  • データベースでは、インスタンスによってオープンされるOracle Databaseのデータファイルの最大数が制限されます。この制限はオペレーティング・システムによって異なります。

  • DB_FILES初期化パラメータで指定したデータファイルの数を超えることはできません。

  • CREATE DATABASE文またはCREATE CONTROLFILE文を発行するときに、MAXDATAFILESパラメータによって制御ファイルのデータファイル部分の初期サイズを指定します。ただし、新しく追加するファイルの番号がMAXDATAFILESより大きくDB_FILES以下であれば、データファイルのセクションにより多数のファイルを格納できるように、制御ファイルが自動的に拡張されます。

14.1.2.4 データファイル数のパフォーマンスへの影響の考慮

表領域、そして最終的にはデータベースに格納されるデータファイルの数は、パフォーマンスに影響を与える可能性があります。

Oracle Databaseでは、オペレーティング・システムで定義されている制限よりも多くの数のデータファイルをデータベース内に作成できます。データベースのDBWnプロセスは、すべてのオンライン・データファイルをオープンできます。Oracle Databaseには、オープン・ファイル記述子をキャッシュとして処理し、オープン・ファイル記述子の数がオペレーティング・システムで定義されている制限に達したときに自動的にファイルをクローズする機能があります。この機能は、パフォーマンスに悪影響を与えるおそれがあります。できれば、オープン・ファイル記述子に関するオペレーティング・システムの制限を調整して、それがデータベース内のオンライン・データファイルの数より大きくなるようにしてください。

関連項目:

  • オペレーティング・システムの制限の詳細は、オペレーティング・システム固有のOracleマニュアルを参照してください。

  • CREATE DATABASE文またはCREATE CONTROLFILE文のMAXDATAFILESパラメータの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

14.1.3 データファイルのサイズ設定

表領域を作成するときは、データベース・オブジェクトの将来的なサイズを見積り、十分な数のデータファイルを作成する必要があります。

必要に応じて、後で表領域に割り当てられたディスク領域のすべての容量(その結果としてデータベースの容量)を大きくするために、データファイルを作成して表領域に追加できます。可能であれば、データがすべてのデバイスに均等に配分されるように、データファイルを複数のデバイスに作成してください。

14.1.4 適切なデータファイルの配置

表領域の位置は、その表領域を構成するデータファイルの物理的な位置によって決まります。コンピュータのハードウェア資源を適切に使用してください。

たとえば、データベースの格納に複数のディスク・ドライブを使用できる場合は、競合する可能性があるデータファイルを個別のディスクに配置することを検討してください。これにより、ユーザーが情報を問い合せたときに、両方のディスク・ドライブが同時に動作し、同時にデータを取得できます。

関連項目:

I/Oおよびデータファイルの配置の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』

14.1.5 REDOログ・ファイルから分離したデータファイルの格納

データファイルは、データベースのREDOログ・ファイルが格納されているディスク・ドライブに格納しないでください。データファイルとREDOログ・ファイルが同じディスク・ドライブに格納されていて、このディスク・ドライブで障害が発生すると、これらのファイルをデータベースのリカバリ手順で使用できなくなります。

REDOログ・ファイルを多重化すると、全REDOログ・ファイルが失われる可能性が低くなるので、データファイルを一部のREDOログ・ファイルと同じドライブに格納できます。

14.2 データファイルの作成および表領域への追加

様々なSQL文を使用して、データファイルを作成して表領域と関連付けることができます。

どの文でも、作成するデータファイルのファイル仕様を指定するか、またはOracle Managed Files機能を使用してデータベース・サーバーが作成し管理するファイルを作成できます。表には、データファイルの作成に使用する文の簡単な説明と、このマニュアル内に記載されている文の詳細説明への参照が示されています。

SQL文 説明 関連情報

CREATE TABLESPACE

表領域とそれを構成するデータファイルを作成します。

「表領域の作成」

CREATE TEMPORARY TABLESPACE

ローカル管理の一時表領域とそれを構成する一時ファイル(一時ファイルは特殊なデータファイルです)を作成します。

「ローカル管理の一時表領域の作成」

ALTER TABLESPACE ... ADD DATAFILE

データファイルを作成して表領域に追加します。

「ローカル管理表領域の変更」

ALTER TABLESPACE ... ADD TEMPFILE

一時ファイルを作成して一時表領域に追加します。

「ローカル管理の一時表領域の変更」

CREATE DATABASE

データベースとそれに関連付けられたデータファイルを作成します。

「CREATE DATABASE文を使用したデータベースの作成の概要」

ALTER DATABASE ... CREATE DATAFILE

古いデータファイルにかわる新しい空のデータファイルを作成します(バックアップがない状態で失われたデータファイルを再作成する場合に役立ちます)。

『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

表領域に新しいデータファイルを追加するときにファイル名を完全に指定しないと、データファイルは、オペレーティング・システムに応じてデフォルトのデータベース・ディレクトリまたはカレント・ディレクトリに作成されます。データファイルには、常に完全修飾名を使用することをお薦めします。既存のファイルを再利用する場合以外は、新しいファイル名が他のファイルと競合しないことを確認してください。すでに削除済の旧ファイルは上書きされます。

データファイルを作成する文が失敗した場合は、作成されたオペレーティング・システム・ファイルがすべて削除されます。ただし、ファイル・システムやストレージ・サブシステムで発生する多数の潜在的なエラーが原因で、オペレーティング・システムのコマンドを使用した手動でのファイル削除が必要になる場合があります。

14.3 データファイルのサイズ変更

データファイルのサイズを変更できます。たとえば、データベースにさらに領域が必要になった場合、1つ以上のデータファイルのサイズを大きくできます。

14.3.1 データファイルの自動拡張機能の使用可能および使用禁止

データファイルを作成するか、既存のデータファイルを変更して、データベースでより多くの領域が必要になった場合に自動的にサイズが増えるようにすることができます。ファイル・サイズは、指定された単位ずつ、指定の最大サイズまで増加します。

データファイルを自動的に拡張するように設定しておくと、次のような利点があります。

  • 表領域で領域が足りなくなった場合に、管理者が即時に介入する必要性が減ります。

  • エクステントの割当て失敗が原因でアプリケーションが停止または一時停止することがなくなります。

自動ファイル拡張を指定するには、次のSQL文を使用してデータファイルを作成するときにAUTOEXTEND ON句を指定します。

  • CREATE DATABASE

  • ALTER DATABASE

  • CREATE TABLESPACE

  • ALTER TABLESPACE

データファイルの自動拡張を有効または無効にするには:

  1. データファイルが自動拡張可能であるかどうかを判断するには、DBA_DATA_FILESビューの問合せを実行し、AUTOEXTENSIBLE列を調べます。

  2. AUTOEXTEND句を含むALTER DATABASE文を使用して、既存データファイルの自動ファイル拡張を有効/無効にするか、手動でデータファイルのサイズを変更します。bigfile表領域の場合は、AUTOEXTEND句を含むALTER TABLESPACE文を使用します。

次の例は、users表領域に追加するデータファイルの自動拡張機能を使用可能にします。

ALTER TABLESPACE users
    ADD DATAFILE '/u02/oracle/rbdb1/users03.dbf' SIZE 10M
      AUTOEXTEND ON
      NEXT 512K
      MAXSIZE 250M;

NEXTの値は、データファイルの拡張時にこのファイルに追加される増分値の最小サイズです。MAXSIZEの値は、自動拡張可能なファイルの最大サイズです。

次の例は、データファイルの自動拡張機能を使用禁止にします。

ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/users03.dbf' 
    AUTOEXTEND OFF;

関連項目:

データファイルを作成または変更するためのSQL文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

14.3.2 手動によるデータファイルのサイズ変更

手動でデータファイルのサイズを増減させるには、ALTER DATABASE文を使用します。

そのため、さらにデータファイルを追加しなくてもデータベースに領域を追加できます。この機能は、データベースで許容されているデータファイルの最大数に達することが懸念される場合に有効です。

bigfile表領域では、ALTER TABLESPACE文を使用してデータファイルのサイズを変更できます。bigfile表領域にはデータファイルを追加できません。

また、データファイルのサイズを手動で縮小することで、データベース内の未使用領域を再生できます。これは、領域要件の見積りの誤りを訂正する際に有効です。

次の例では、データファイル/u02/oracle/rbdb1/stuff01.dbfが250MBまで拡張していることを前提としています。ただし、その表領域には現在小さなオブジェクトが格納されているので、データファイルのサイズを縮小できます。

次の文は、データファイル/u02/oracle/rbdb1/stuff01.dbfのサイズを縮小します。

ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf'
   RESIZE 100M;

ノート:

必ずしもファイルのサイズを指定した値まで縮小できるわけではありません。ファイルに格納されているデータ量が指定の縮小サイズよりも大きい場合は、エラーが戻されます。

14.4 データファイルの可用性の変更

データファイルのオフライン・バックアップやオフライン・データファイルの再配置などの特定のタスクを実行するには、データファイルの可用性を変更する必要があります。

14.4.1 データファイルの可用性の変更について

個々のデータファイルまたは一時ファイルの可用性は、ファイルをオフラインにするか、オンラインにして変更できます。オフラインのデータファイルはデータベースに使用できず、オンライン化されるまでアクセスできません。

データファイルの可用性の変更には、次のような理由があります。

  • データファイルのオフライン・バックアップを実行するため。

  • オフラインのデータファイルの名前を変更するか、再配置する。最初に、データファイルをオフライン化または表領域をオフライン化できます。

  • データベースのデータファイルへの書込みに問題があり、データファイルが自動的にオフライン化された場合。この場合は、後で問題を解決してから、データファイルを手動でオンライン化できます。

  • データファイルが破損または欠落している場合。データベースをオープンするには、その前にデータファイルをオフライン化する必要があります。

読取り専用表領域のデータファイルはオフライン化またはオンライン化ができますが、ファイルをオンライン化しても表領域の読取り専用状態に影響を与えることはありません。表領域が読取り/書込み可能な状態に戻るまで、このデータファイルには書き込めません。

ノート:

表領域自体をオフライン化することによって、表領域のすべてのデータファイルを一時的に使用禁止にできます。表領域をオンラインに戻すには、表領域のこれらのファイルをそのままにしておく必要がありますが、「データファイルの名前変更と再配置」に示されているのと同様の手順に従ってファイルを再配置または名前変更できます。

詳細は、「表領域のオフライン化」を参照してください。

データファイルをオンライン化またはオフライン化するには、ALTER DATABASEシステム権限が必要です。ALTER TABLESPACE文を使用してすべてのデータファイルまたは一時ファイルをオフライン化するには、ALTER TABLESPACEまたはMANAGE TABLESPACEシステム権限が必要です。Oracle Real Application Clusters環境では、データベースを排他モードでオープンする必要があります。

14.4.2 ARCHIVELOGモードでデータファイルをオンライン化またはオフライン化する方法

個々のデータファイルをオンラインまたはオフラインにするには、ALTER DATABASE文を発行し、DATAFILE句を含めます。

次の文は、指定したデータファイルをオンライン化します。

ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' ONLINE;

これと同じファイルをオフライン化するには、次の文を発行します。

ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' OFFLINE;

ノート:

この形式のALTER DATABASE文を使用するには、データベースをARCHIVELOGモードにしてください。NOARCHIVELOGモードのときにデータファイルをオフライン化すると、ファイルが失われるおそれがあるので、この要件により、データファイルが誤って失われないようにします。

14.4.3 NOARCHIVELOGモードでデータファイルをオフライン化する方法

データベースがNOARCHIVELOGモードのときにデータファイルをオフライン化するには、DATAFILE句およびOFFLINE FOR DROP句を指定してALTER DATABASE文を使用します。

  • OFFLINEキーワードを指定すると、破損しているかどうかに関係なくデータファイルにOFFLINEのマークが付くため、データベースをオープンできます。

  • FOR DROPキーワードによって、データファイルが後で削除されるようにマークが付けられます。このようなデータファイルは、オンラインに戻すことはできません。

    ノート:

    この操作では、実際にはデータファイルは削除されません。データ・ディクショナリには残っているので、次のいずれかの方法で削除する必要があります。

    • ALTER TABLESPACE ... DROP DATAFILE

      OFFLINE FOR DROPの後、この方法はディクショナリ管理表領域のみに機能します。

    • DROP TABLESPACE ... INCLUDING CONTENTS AND DATAFILES

    • 前述の方法で失敗した場合は、オペレーティング・システム・コマンドを使用してデータファイルを削除します。この方法は、データ・ディクショナリのデータファイルおよび制御ファイルへの参照が残るため、望ましい方法ではありません。

次の文は、指定したデータファイルをオフライン化し、削除対象としてマークを付けます。

ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/users03.dbf' OFFLINE FOR DROP;

14.4.4 表領域内のすべてのデータファイルおよび一時ファイルの可用性の変更

ALTER TABLESPACE文で句を指定することにより、表領域内にあるすべてのデータファイルまたは一時ファイルのオンラインまたはオフラインの状態を変更できます。

具体的には、オンライン/オフラインの状態に影響を与える文として次のものがあります。

  • ALTER TABLESPACE ... DATAFILE {ONLINE|OFFLINE}

  • ALTER TABLESPACE ... TEMPFILE {ONLINE|OFFLINE}

入力が必要なのは表領域名のみであり、個々のデータファイルや一時ファイルを入力する必要はありません。すべてのデータファイルまたは一時ファイルが影響を受けますが、表領域そのもののオンライン/オフラインの状態は変わりません。

ほとんどの場合、データベースがマウントされていれば、オープンしていなくても、前述のALTER TABLESPACE文を発行できます。ただし、表領域がSYSTEM表領域、UNDO表領域、またはデフォルト一時表領域である場合は、データベースをオープンしないでくださいALTER DATABASE DATAFILE文およびALTER DATABASE TEMPFILE文にもONLINE/OFFLINE句がありますが、これらの文では表領域のファイル名をすべて入力する必要があります。

この操作は表領域の可用性を変更するALTER TABLESPACE...ONLINE|OFFLINE文とは操作が異なるため、構文も異なります。ALTER TABLESPACE文は表領域だけでなくデータファイルもオフラインにしますが、一時表領域または一時ファイルの状態を変更するためには使用できません。

14.5 データファイルの名前変更と再配置

オンラインまたはオフライン・データファイルの名前を変更して、それらの名前や位置を変更できます。

14.5.1 オンライン・データファイルの名前変更と再配置

ALTER DATABASE MOVE DATAFILE SQL文を使用して、オンライン・データファイルを名前変更または再配置できます。この文を使用すると、データベースのオープン時にユーザーがデータファイルにアクセスしている際、データファイルを名前変更したり再配置できます。

オンライン・データファイルを名前変更または再配置すると、データベースの制御ファイルに記録されている、データファイルへのポインタが変更されます。また、ファイルは、オペレーティング・システム・レベルでも物理的に名前変更または再配置されます。

次のいずれかのタスクを実行する場合、ユーザーがデータファイルにアクセスできるようにする必要があるため、オンライン・データファイルを名前変更または再配置することができます。

  • あるタイプの記憶域から別のタイプの記憶域に、データファイルを移動します。

  • 頻繁にアクセスしないデータファイルを、より低コストの記憶域に移動します。

  • 表領域を読取り専用にし、そのデータファイルを1回のみ書込み可能な記憶域に移動します。

  • データベースをOracle Automatic Storage Management(Oracle ASM)に移動します。

ALTER DATABASE MOVE DATAFILE文を実行するときに、同じ名前のファイルが宛先の場所に存在する場合は、REUSEオプションを指定して既存のファイルを上書きできます。REUSEが指定されておらず、同じ名前のファイルが宛先の場所に存在しない場合、既存のファイルは上書きされず、この文はエラーを返します。

デフォルトでは、ALTER DATABASE MOVE DATAFILE文を実行してデータファイルに新しい場所を指定すると、この文によってデータファイルが移動されます。ただし、KEEPオプションを指定すると、データファイルを古い場所に保持し、新しい場所にコピーできます。この場合、文が正常に完了すると、データベースでは新しい場所のデータファイルのみが使用されます。

ALTER DATABASE MOVE DATAFILE文を使用してデータファイルを名前変更または再配置すると、Oracle Databaseでは、操作の実行時にデータファイルのコピーが作成されます。操作中に元のデータファイルとコピー用に適切なディスク領域があることを確認してください。

DBA_DATA_FILESビューを問い合せて、データファイルごとの名前、場所およびオンライン化の状態を表示できます。

ノート:

  • 指定されたデータファイルがオフラインの場合は、ALTER DATABASE MOVE DATAFILE文によってエラーが出力されます。

  • スタンバイ・データベースを使用している場合は、プライマリとスタンバイ(フィジカルまたはロジカル)でオンライン・データファイル移動操作を個別に実行できます。スタンバイはデータファイルがプライマリで移動されても影響を受けず、その逆の場合も同様です。詳細は、『Oracle Data Guard概要および管理』を参照してください。

  • フラッシュバック操作を行っても、移動されたデータファイルは前の場所に再配置されません。オンラインでデータファイルをある場所から別の場所に移動し、後で移動前の時点にデータベースをフラッシュバックする場合、データファイルの場所は新しいままですが、データファイルの内容はフラッシュバックで指定された時点の内容に変更されます。フラッシュバック・データベース操作の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

  • Windowsプラットフォームでデータファイルを再配置する場合、KEEPオプションを省略しても、元のデータファイルは古い場所に保持されます。この場合、文が正常に完了すると、データベースでは新しい場所のデータファイルのみが使用されます。操作が完了した後、必要に応じて古いデータファイルを手動で削除できます。

オンライン・データファイルを名前変更または再配置するには:

  1. SQL*Plusで、ALTER DATABASEシステム権限を持つユーザーとしてデータベースに接続します。

    「SQL*Plusを使用したデータベースの起動」を参照してください。

  2. ALTER DATABASE MOVE DATAFILE文を実行して、データファイルを指定します。

例14-1 オンライン・データファイルの名前変更

この例では、データファイルを同じ場所に保持したまま、データファイルuser1.dbfの名前をuser01.dbfに変更します。

ALTER DATABASE MOVE DATAFILE '/u01/oracle/rbdb1/user1.dbf' 
  TO '/u01/oracle/rbdb1/user01.dbf';

例14-2 オンライン・データファイルの再配置

この例では、データファイルuser1.dbfを/u01/oracle/rbdb1/ディレクトリから/u02/oracle/rbdb1/ディレクトリに移動します。操作後、このファイルは/u01/oracle/rbdb1/ディレクトリにはありません。

ALTER DATABASE MOVE DATAFILE '/u01/oracle/rbdb1/user1.dbf' 
  TO '/u02/oracle/rbdb1/user1.dbf';

例14-3 オンライン・データファイルのコピー

この例では、データファイルuser1.dbfを/u01/oracle/rbdb1/ディレクトリから/u02/oracle/rbdb1/ディレクトリにコピーします。操作後、古いファイルは/u01/oracle/rbdb1/ディレクトリに保持されます。

ALTER DATABASE MOVE DATAFILE '/u01/oracle/rbdb1/user1.dbf' 
  TO '/u02/oracle/rbdb1/user1.dbf' KEEP;

例14-4 オンライン・データファイルの再配置および既存のファイルの上書き

この例では、データファイルuser1.dbfを/u01/oracle/rbdb1/ディレクトリから/u02/oracle/rbdb1/ディレクトリに移動します。同じ名前のファイルが/u02/oracle/rbdb1/ディレクトリに存在する場合、この文によりファイルが上書きされます。

ALTER DATABASE MOVE DATAFILE '/u01/oracle/rbdb1/user1.dbf' 
  TO '/u02/oracle/rbdb1/user1.dbf' REUSE;

例14-5 オンライン・データファイルのOracle ASMへの再配置

この例では、データファイルuser1.dbfを/u01/oracle/rbdb1/ディレクトリからOracle ASMの場所に移動します。

ALTER DATABASE MOVE DATAFILE '/u01/oracle/rbdb1/user1.dbf' 
  TO '+dgroup_01/data/orcl/datafile/user1.dbf';

例14-6 あるASMの場所から別のASMの場所へのファイルの移動

この例では、データファイルをあるOracle ASMの場所から別のOracle ASMの場所に移動します。

ALTER DATABASE MOVE DATAFILE '+dgroup_01/data/orcl/datafile/user1.dbf' 
  TO '+dgroup_02/data/orcl/datafile/user1.dbf';

データファイルをミラー化してから元のファイルの場所をミラーから削除することにより、Oracle ASMを使用してオンライン・データファイルを移動することもできます。オンライン・データファイルの移動操作は、ALTER DATABASE MOVE DATAFILE文のかわりにOracle ASMを使用した方が高速です。

関連項目:

14.5.2 オフライン・データファイルの名前変更と再配置

オフライン・データファイルを名前変更および再配置できます。

オフライン・データファイルを名前変更および再配置すると、データベース制御ファイルに記録されている、データファイルへのポインタのみが変更されます。ファイルは物理的に名前が変更されず、オペレーティング・システム・レベルでコピーされません。

14.5.2.1 単一の表領域のオフライン・データファイルを名前変更および再配置する手順

単一の表領域のために使用できるオフラインのデータファイルを名前変更および再配置できます。これらの手順を実行するには、ALTER TABLESPACEシステム権限が必要です。

関連項目:

データファイルの名前変更または再配置の準備のための表領域のオフライン化の詳細は、「表領域のオフライン化」を参照してください

14.5.2.1.1 単一の表領域のオフライン・データファイルの名前変更

単一の表領域内のオフライン・データファイルの名前を変更できます。

単一の表領域のオフライン・データファイルの名前を変更するステップは、次のとおりです。

  1. データファイルを含む表領域をオフライン化します。データベースはオープンしている必要があります。

    たとえば:

    ALTER TABLESPACE users OFFLINE NORMAL;
    
  2. オペレーティング・システムを使用してデータファイルの名前を変更します。
  3. ALTER TABLESPACE文にRENAME DATAFILE句を指定して、データベース内のファイル名を変更します。

    たとえば、次の文はデータファイル/u02/oracle/rbdb1/user1.dbfおよび/u02/oracle/rbdb1/user2.dbfをそれぞれ/u02/oracle/rbdb1/users01.dbfおよび/u02/oracle/rbdb1/users02.dbfに名前変更します。

    ALTER TABLESPACE users
        RENAME DATAFILE '/u02/oracle/rbdb1/user1.dbf',
                        '/u02/oracle/rbdb1/user2.dbf'
                     TO '/u02/oracle/rbdb1/users01.dbf', 
                        '/u02/oracle/rbdb1/users02.dbf';
    

    古いデータファイルと新しいデータファイルを正しく識別するために、必ず完全なファイル名(パスを含む)を指定してください。特に、古いデータファイル名は、データ・ディクショナリのDBA_DATA_FILESビューに表示されるとおり、正確に指定してください。

  4. データベースをバックアップします。データベースの構造を変更した後は、即時にデータベースの完全バックアップを実行してください。
  5. ONLINE句を指定したALTER TABLESPACE文を使用して、この表領域をオンラインに戻します。
    ALTER TABLESPACE users ONLINE
14.5.2.1.2 単一の表領域のオフライン・データファイルの再配置

単一の表領域内のオフライン・データファイルを再配置できます。

ここでは、オフライン・データファイルを再配置する手順の例を示します。

想定する条件は、次のとおりです。

  • オープンしているデータベースにusersという表領域が存在し、すべて同じディスク上に配置されたデータファイルによって構成されています。

  • users表領域のデータファイルを、別の分離されたディスク・ドライブに再配置します。

  • 現在、オープンしているデータベースに管理者権限で接続しています。

  • データベースの現行のバックアップは取得済です。

ステップは次のとおりです。

  1. 特定のファイルの名前やサイズが不明な場合は、データ・ディクショナリ・ビューDBA_DATA_FILESを問い合せて情報を取得できます。
    SQL> SELECT FILE_NAME, BYTES FROM DBA_DATA_FILES
      2> WHERE TABLESPACE_NAME = 'USERS';
    
    FILE_NAME                                  BYTES
    ------------------------------------------ ----------------
    /u02/oracle/rbdb1/users01.dbf              102400000
    /u02/oracle/rbdb1/users02.dbf              102400000
    
  2. データファイルを含む表領域をオフライン化します。
    ALTER TABLESPACE users OFFLINE NORMAL;
    
  3. オペレーティング・システムを使用し、データファイルを新しい位置にコピーして名前変更します。「データベース・サーバーを使用したファイルのコピー」で説明するDBMS_FILE_TRANSFERパッケージを使用して、ファイルをコピーできます。

    ノート:

    SQL*PlusのHOSTコマンドを使用すると、SQL*Plusを一時的に終了し、オペレーティング・システムのコマンドを実行してファイルをコピーできます。

  4. データベース内のデータファイルの名前を変更します。

    users表領域を構成するファイルのデータファイル・ポインタは、対応付けられているデータベースの制御ファイルに記録されていますが、これらのポインタをこの時点で旧ファイル名から新ファイル名に変更する必要があります。

    ALTER TABLESPACE...RENAME DATAFILE文を使用します。

    ALTER TABLESPACE users
        RENAME DATAFILE '/u02/oracle/rbdb1/users01.dbf',
                        '/u02/oracle/rbdb1/users02.dbf'
                     TO '/u03/oracle/rbdb1/users01.dbf', 
                        '/u04/oracle/rbdb1/users02.dbf';
    
  5. データベースをバックアップします。データベースの構造を変更した後は、即時にデータベースの完全バックアップを実行してください。
  6. ONLINE句を指定したALTER TABLESPACE文を使用して、この表領域をオンラインに戻します。
    ALTER TABLESPACE users ONLINE
14.5.2.2 複数の表領域のオフライン・データファイルの名前変更および再配置

1つ以上の表領域のデータファイルは、ALTER DATABASE RENAME FILE文を使用して、名前変更および再配置できます。

1回の操作で複数の表領域のデータファイルを名前変更または再配置する方法は、これ以外にありません。この手順を実行するには、ALTER DATABASEシステム権限が必要です。

ノート:

SYSTEM表領域、デフォルト一時表領域、またはアクティブなUNDO表領域のデータファイルを名前変更または再配置する場合、これらの表領域はオフライン化できないため、このALTER DATABASE文を使用する必要があります。

複数の表領域のデータファイルの名前を変更するステップは、次のとおりです。

  1. データベースがマウントされ、クローズされていることを確認します。

    ノート:

    データベースは必要な場合クローズする必要はありませんが、データファイル(または一時ファイル)はオフラインにする必要があります。

  2. オペレーティング・システムで新しい位置と名前を指定して、名前変更するデータファイルをコピーします。「データベース・サーバーを使用したファイルのコピー」で説明するDBMS_FILE_TRANSFERパッケージを使用して、ファイルをコピーできます。
  3. ALTER DATABASEを使用して、データベースの制御ファイル内のファイル・ポインタの名前を変更します。

    たとえば、次の文はデータファイル/u02/oracle/rbdb1/sort01.dbfおよび/u02/oracle/rbdb1/user3.dbfをそれぞれ/u02/oracle/rbdb1/temp01.dbfおよび/u02/oracle/rbdb1/users03.dbfに名前変更します。

    ALTER DATABASE
        RENAME FILE '/u02/oracle/rbdb1/sort01.dbf',
                    '/u02/oracle/rbdb1/user3.dbf'
                 TO '/u02/oracle/rbdb1/temp01.dbf',
                    '/u02/oracle/rbdb1/users03.dbf';
    

    古いデータファイルと新しいデータファイルを正しく識別するために、必ず完全なファイル名(パスを含む)を指定してください。特に、古いデータファイル名は、DBA_DATA_FILESビューに表示されるとおり、正確に指定してください。

  4. データベースをバックアップします。データベースの構造を変更した後は、即時にデータベースの完全バックアップを実行してください。

14.6 データファイルの削除

ALTER TABLESPACE文のDROP DATAFILE句およびDROP TEMPFILE句を使用して、1つのデータファイルまたは一時ファイルを削除できます。

データファイルは空である必要があります。(データファイルから割り当てられているエクステントが存在しない場合、そのデータファイルは空であるとみなされます。)データファイルまたは一時ファイルを削除すると、データ・ディクショナリおよび制御ファイルからそのデータファイルまたは一時ファイルへの参照が削除され、ファイル・システムまたはOracle Automatic Storage Management(Oracle ASM)ディスク・グループから物理ファイルが削除されます。

次の例では、Oracle ASMディスク・グループDGROUP1の別名example_df3.fで識別されたデータファイルを削除します。データファイルは表領域exampleに属します。

ALTER TABLESPACE example DROP DATAFILE '+DGROUP1/example_df3.f';

次の例では、表領域lmtempに属する一時ファイルlmtemp02.dbfを削除します。

ALTER TABLESPACE lmtemp DROP TEMPFILE '/u02/oracle/data/lmtemp02.dbf';

これは、次の文と同じです。

ALTER DATABASE TEMPFILE '/u02/oracle/data/lmtemp02.dbf' DROP 
     INCLUDING DATAFILES;

ノート:

一時ファイルを使用しているセッションがある場合にその一時ファイルを削除しようとすると、エラーが返され、一時ファイルは削除されません。この場合、一時ファイルはオフライン化され、一時ファイルがオフラインの間は一時ファイルを使用しようとする問合せは失敗します。

ALTER TABLESPACE構文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

データファイルの削除に関する制限事項

データファイルおよび一時ファイルの削除に関する制限事項は、次のとおりです。

  • データベースは、オープンされている必要があります。

  • データファイルが空でない場合、そのファイルは削除できません。

    空でなく、スキーマ・オブジェクトを削除しても空にできないデータファイルを削除する場合は、そのデータファイルを含む表領域を削除する必要があります。

  • 表領域の最初のデータファイルまたは1つのみのデータファイルは削除できません。

    したがって、bigfile表領域にはDROP DATAFILEは使用できません。

  • ディクショナリ管理からローカル管理に移行した読取り専用表領域のデータファイルは削除できません。他のすべての読取り専用表領域からのデータファイルの削除はサポートされています。

  • SYSTEM表領域のデータファイルは削除できません。

  • ローカル管理表領域のデータファイルがオフラインの場合、そのファイルは削除できません。

関連項目:

表領域の削除

14.7 データファイル内のデータ・ブロックの検証

チェックサムを使用してデータ・ブロックを検証するようにデータベースを構成するには、初期化パラメータDB_BLOCK_CHECKSUMTYPICAL(デフォルト)に設定します。

この設定は、DBWnプロセスおよびダイレクト・ローダーが各ブロックのチェックサムを計算し、ブロックをディスクに書き込むときにこのチェックサムをブロック・ヘッダーに格納します。

ブロックが読み込まれるときにチェックサムが検証されるのは、DB_BLOCK_CHECKSUMTRUEに設定され、前回ブロックが書き込まれたときにチェックサムが格納されている場合のみです。破損が検出されると、メッセージORA-01578が返され、破損に関する情報がアラート・ログに書き込まれます。

DB_BLOCK_CHECKSUMパラメータの値は、ALTER SYSTEM文で動的に変更できます。このパラメータの設定に関係なく、SYSTEM表領域のデータ・ブロックは常にチェックサムを使用して検証されます。

関連項目:

DB_BLOCK_CHECKSUM初期化パラメータの詳細は、『Oracle Databaseリファレンス』

14.8 データベース・サーバーを使用したファイルのコピー

データベース内でのファイルのコピー、またはデータベース間でのファイルの転送には、DBMS_FILE_TRANSFERパッケージを使用できます。

14.8.1 データベース・サーバーを使用したファイルのコピーについて

データベース内のファイルをコピーする場合、またはデータベース間でファイルを転送する場合(トランスポータブル表領域機能を使用して転送する場合など)は、必ずしもオペレーティング・システムを使用する必要はありません。この目的には、DBMS_FILE_TRANSFERパッケージを使用できます。

DBMS_FILE_TRANSFERパッケージでは、ローカル・ファイル・システムまたはOracle Automatic Storage Management(Oracle ASM)ディスク・グループをファイル転送の移動元または移動先として使用できます。Oracle ASMへの転送またはOracle ASMからの転送に含めることができるのは、Oracle Databaseファイル(データファイル、一時ファイル、制御ファイルなど)のみです。

UNIXシステムの場合、DBMS_FILE_TRANSFERパッケージで作成されたファイルの所有者は、インスタンスを実行するシャドウ・プロセスの所有者になります。通常、この所有者はORACLEです。DBMS_FILE_TRANSFERを使用して作成されたファイルは、常に、データベース内のすべてのプロセスによる書込みと読取りが可能ですが、そのようなファイルを直接読取りまたは書込みを行うのに必要な権限を持っていないユーザーは、システム管理者からのアクセスが必要な場合があります。

注意:

データベースによって変更されているファイルのコピーまたは転送にDBMS_FILE_TRANSFERパッケージを使用しないでください。コピーや転送に使用すると、ファイルの整合性がなくなる可能性があります。

関連項目:

14.8.2 ファイルのローカル・ファイル・システムへのコピー

ローカル・ファイル・システム上のファイルをコピーするには、DBMS_FILE_TRANSFERパッケージのCOPY_FILEプロシージャを使用できます。

次の例では、DBMS_FILE_TRANSFERパッケージのCOPY_FILEプロシージャを使用してローカル・ファイル・システム上のファイルをコピーしています。この例では、/usr/admin/sourceディレクトリ内のdb1.datという名前のバイナリ・ファイルを、ローカル・ファイル・システムの/usr/admin/destinationディレクトリにdb1_copy.datという名前でコピーします。

  1. 権限を付与でき、SQLを使用してディレクトリ・オブジェクトを作成できる管理ユーザーとしてSQL*Plusで接続します。
  2. SQLコマンドCREATE DIRECTORYを使用して、コピー元ファイルが格納されるディレクトリのディレクトリ・オブジェクトを作成します。ディレクトリ・オブジェクトは、ディレクトリの別名に類似しています。たとえば、SOURCE_DIRというディレクトリ・オブジェクトを、使用しているコンピュータ・システムの/usr/admin/sourceディレクトリに対して作成するには、次の文を実行します。
    CREATE DIRECTORY SOURCE_DIR AS '/usr/admin/source';
    
  3. SQLコマンドCREATE DIRECTORYを使用して、バイナリ・ファイルがコピーされるディレクトリのディレクトリ・オブジェクトを作成します。たとえば、DEST_DIRというディレクトリ・オブジェクトを、使用しているコンピュータ・システムの/usr/admin/destinationディレクトリに対して作成するには、次の文を実行します。
    CREATE DIRECTORY DEST_DIR AS '/usr/admin/destination';
    
  4. COPY_FILEプロシージャを実行するユーザーに対して、必要な権限を付与します。この例では、strmadminユーザーがプロシージャを実行します。
    GRANT EXECUTE ON DBMS_FILE_TRANSFER TO strmadmin;
    
    GRANT READ ON DIRECTORY source_dir TO strmadmin;
    
    GRANT WRITE ON DIRECTORY dest_dir TO strmadmin;
    
  5. strmadminユーザーとして接続し、プロンプトが表示されたらユーザー・パスワードを入力します。
    CONNECT strmadmin
    
  6. COPY_FILEプロシージャを実行して、ファイルをコピーします。
    BEGIN
      DBMS_FILE_TRANSFER.COPY_FILE(
            source_directory_object       =>  'SOURCE_DIR',
            source_file_name              =>  'db1.dat',
            destination_directory_object  =>  'DEST_DIR',
            destination_file_name         =>  'db1_copy.dat');
    END;
    /
    このプロシージャを実行する前に、source_directory_objectパラメータによって指定されたディレクトリ内のファイルをsource_file_nameパラメータに指定し、destination_directory_objectパラメータに指定された新しい場所のファイルの新しい名前をdestination_file_nameパラメータに指定する必要があります。source_directory_objectおよびdestination_directory_objectパラメータのディレクトリ・オブジェクトには、相対パスおよびシンボリック・リンクは許可されません。

注意:

データベースによって変更されているファイルのコピーまたは転送にDBMS_FILE_TRANSFERパッケージを使用しないでください。コピーや転送に使用すると、ファイルの整合性がなくなる可能性があります。

14.8.3 サード・パーティ・ファイル転送

DBMS_FILE_TRANSFERパッケージのプロシージャは、通常、ローカル・プロシージャ・コールとして起動しますが、リモート・プロシージャ・コールとして起動することもできます。リモート・プロシージャ・コールとして起動すると、別のデータベースに接続している場合でも、データベース内のファイルをコピーできます。

たとえば、次のリモート・プロシージャ・コールを実行すると、別のデータベースに接続していても、データベースDBでファイルをコピーできます。

DBMS_FILE_TRANSFER.COPY_FILE@DB(...)

また、リモート・プロシージャ・コールを使用すると、いずれのデータベースにも接続していなくても、2つのデータベース間でファイルをコピーできます。たとえば、データベースAに接続し、ファイルをデータベースBからデータベースCに転送できます。この場合、データベースAは、転送するファイルの転送元でも転送先でもないため、サード・パーティになります。

サード・パーティ・ファイル転送では、ファイルのプッシュとプルの両方が可能です。前述の例では、AからBまたはCへのデータベース・リンクがあり、そのデータベースから別のデータベースへのデータベース・リンクがある場合は、サード・パーティ・ファイル転送を実行できます。データベースAからBおよびC両方へのデータベース・リンクは必要ありません。

たとえば、AからBへのデータベース・リンクがあり、BからCへの別のデータベース・リンクがある場合は、データベースAで次のプロシージャを実行してファイルをBからCに転送できます。

DBMS_FILE_TRANSFER.PUT_FILE@B(...) 

この構成では、ファイルをプッシュします。

または、AからCへのデータベース・リンクがあり、CからBへの別のデータベース・リンクがある場合は、データベースAで次のプロシージャを実行してファイルをBからCに転送できます。

DBMS_FILE_TRANSFER.GET_FILE@C(...)

この構成では、ファイルをプルします。

14.8.4 拡張ファイル転送メカニズム

DBMS_FILE_TRANSFERパッケージとDBMS_SCHEDULERパッケージの両方を使用すると、複雑なファイル転送メカニズムを作成できます。

たとえば、転送するファイルのコピーが複数のデータベースに存在する場合は、ソースの可用性、ソースのロード、宛先データベースへの通信帯域幅などの要因を検討して、最初にアクセスするソース・データベース、および障害発生時にアクセスを試みるソース・データベースを決定します。この場合、それらの要因に関する情報を入手する必要があるため、要因を検討するメカニズムを構築する必要があります。

別の例として、ロードよりも完了時間が短いことが重要である場合は、複数のスケジューラ・ジョブを発行してファイル転送をパラレルで実行できます。また、ソース・データベースと転送先データベースのファイル・レイアウトに関する知識があれば、使用するI/Oデバイスが異なる場合のみ同時転送を実行またはスケジュールすることで、ディスクの競合を最小限にできます。

14.8.5 ファイル転送とDBMS_SCHEDULERパッケージ

DBMS_SCHEDULERパッケージを使用して、単一のデータベース内およびデータベース間でファイルを自動的に転送できます。

DBMS_SCHEDULERパッケージではサード・パーティ・ファイル転送もサポートされています。スケジューラによって実行されるファイル転送が長時間実行される場合は、ファイルの読取りまたは書込みを行うデータベースでV$SESSION_LONGOPS動的パフォーマンス・ビューを使用してファイル転送を監視できます。スケジューラ・ジョブで使用するデータベース・リンクは、必ず固定ユーザー・データベース・リンクです。

再開可能なスケジューラ・ジョブを使用すると、特に断続的に障害が発生する場合に、ファイル転送の信頼性を自動的に改善できます。転送先ファイルがクローズする前にファイル転送が失敗した場合は、部分的に書き込まれた転送先ファイルがデータベースによって削除された後、ファイル転送を最初から再開できます。したがって、ジョブの残りの部分が再開可能な場合は、再開可能なスケジューラ・ジョブを使用してファイルを転送することを検討してください。スケジューラ・ジョブの詳細は、「Oracle Schedulerによるジョブのスケジュール」を参照してください。

ノート:

再開可能な1つのジョブで複数のファイルを転送する場合は、すでに転送済のファイルと転送されていないファイルがある状態でジョブを再開する方法を検討する必要があります。

14.9 ファイルと物理デバイスのマッピング

データファイルがファイル・システム・ファイルである環境では、表領域と基礎になるデバイスとの関連付けを調べるのは比較的容易です。Oracle Databaseには、ファイルとデバイスとのマッピングを提供するDBA_TABLESPACESDBA_DATA_FILESV$DATAFILEなどのビューが用意されています。これらのマッピングをデバイス統計と併用して、I/Oパフォーマンスを評価できます。

ただし、ホスト・ベースの論理ボリューム・マネージャ(LVM)と、Redundant Array of Inexpensive Disks(RAID)機能を提供する洗練されたストレージ・サブシステムの導入によって、ファイルからデバイスへのマッピングを判別するのが難しくなっています。最新ファイルがブラック・ボックスに隠れていると、そのファイルを判断するのが難しくなるため、問題が発生します。この項では、この問題を解決するためのOracle Databaseのアプローチについて説明します。

ノート:

ここでは、Oracle Databaseのファイル・マッピング・インタフェースの概要と、DBMS_STORAGE_MAPパッケージおよび動的パフォーマンス・ビューを使用してファイルと物理デバイスのマッピングを公開する方法について説明します。Oracle Enterprise Manager Cloud Controlを使用すると、この機能にさらに容易にアクセスできます。それによって提供される使いやすいグラフィカル・インタフェースを使用して、ファイルと物理デバイスをマップできます。詳細は、Cloud Controlのオンライン・ヘルプを参照してください。

14.9.1 Oracle Databaseのファイル・マッピング・インタフェースの概要

I/Oパフォーマンスを把握するには、ファイルが格納されている記憶域の階層の詳細を知る必要があります。

Oracle Databaseには、ファイル、論理ビューの中間レイヤーおよび実際の物理デバイスのマッピング全体を表示するメカニズムが用意されています。この表示には、動的パフォーマンス・ビュー(V$ビュー)のセットが使用されます。これらのビューを使用すると、ファイル・ブロックがあるディスクを正確に特定できます。

これらのビューを作成するために、ストレージ・ベンダーは特定のI/Oスタック要素のマッピングを受け持つマッピング・ライブラリを提供する必要があります。データベースは、バックグラウンド・プロセスFMONによって起動される外部の非Oracle Databaseプロセスを介して、これらのライブラリと通信します。FMONは、マッピング情報の管理を受け持ちます。OracleにはPL/SQLパッケージDBMS_STORAGE_MAPが用意されており、このパッケージを使用して、マッピング・ビューを移入するマッピング操作を起動します。

ノート:

Oracle Automatic Storage Managementを使用していない場合、ファイル・マッピング・インタフェースは、Windowsプラットフォームでは使用できません。Oracle Automatic Storage Managementを使用している場合、ファイル・マッピング・インタフェースは、すべてのプラットフォームで使用できます。

関連項目:

Oracle ASMでのファイル・マッピングの使用の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

14.9.2 Oracle Databaseのファイル・マッピング・インタフェースの動作

Oracle Databaseファイル・マッピングには、次のコンポーネントが含まれます: FMONバックグラウンド・プロセス、FMPUTLプロセスおよびマッピング・ライブラリ。

14.9.2.1 ファイル・マッピングの構成要素

ファイル・マッピング・メカニズムには、いくつかの構成要素が含まれます。

次の図は、ファイル・マッピング・メカニズムの構成要素を示しています。

図14-1 ファイル・マッピングの構成要素

図14-1の説明が続きます
「図14-1 ファイル・マッピングの構成要素」の説明

ノート:

Oracle Database 12c以降では、FILE_MAPPING初期化パラメータ、FMPUTLプロセスおよびマッピング・ライブラリは非推奨となっています。

14.9.2.1.1 FMON

FMONは、FILE_MAPPING初期化パラメータがtrueに設定されている場合に、データベースにより起動されるバックグラウンド・プロセスです。FMONはマップ情報を構築し、変更が生じたときにマッピング情報を更新します。

FMONの役割は、次のとおりです。

  • SGAに格納されるマッピング情報を作成します。この情報は、次の構造で構成されます。

    • ファイル

    • ファイル・システムのエクステント

    • 要素

    • サブ要素

    これらの構造については、「マッピング構造」を参照してください。

  • 次の原因で変更が発生した場合にマッピング情報をリフレッシュします。

    • データファイル(サイズ)の変更

    • データファイルの追加または削除

    • 記憶域の構成変更(低頻度)

  • マッピング情報をデータ・ディクショナリに保存して、起動操作と停止操作の間も持続する情報のビューを保持します。

  • インスタンスの起動時にマッピング情報をSGAにリストアします。これにより、インスタンスを起動するたびにマッピング情報全体を再作成するという、高コストの操作が不要になります。

DBMS_STORAGE_MAPパッケージで起動されるプロシージャを使用すると、このマッピングを制御しやすくなります。

14.9.2.1.2 外部プロセス(FMPUTL)

FMONは外部の非Oracle DatabaseプロセスFMPUTLを起動し、このプロセスはベンダーが提供するマッピング・ライブラリと直接通信します。

このプロセスは、I/Oスタックのすべてのレベルにマッピング・ライブラリが存在していれば、すべてのレベルを通じてマッピング情報を取得します。一部のプラットフォームでは、I/Oマッピング・スタックの全レベルを通じてマッピングするにはルート権限が必要であるため、外部プロセスのSETUIDビットをONに設定する必要があります。

この外部プロセスの役割は、マッピング・ライブラリを検出してアドレス空間に動的にロードすることです。

14.9.2.1.3 マッピング・ライブラリ

Oracle Databaseはマッピング・ライブラリを使用して、特定のマッピング・ライブラリが所有する要素のマッピング情報を検出します。

これらのマッピング・ライブラリを通じて、個々のI/Oスタック要素に関する情報が伝達されます。この情報を使用して、ユーザーが問合せできる動的パフォーマンス・ビューが移入されます。

マッピングを完成するには、すべてのスタック・レベルにマッピング・ライブラリが存在する必要があり、各ライブラリがI/Oマッピング・スタックの独自部分を所有できます。たとえば、VERITAS VxVMライブラリはVERITASボリューム・マネージャに関連するスタック要素を所有し、EMCライブラリはI/Oマッピング・スタックのうちすべてのEMCストレージ固有レイヤーを所有します。

マッピング・ライブラリはベンダーから提供されます。ただし、現在、OracleにはEMCストレージ用のマッピング・ライブラリが用意されています。データベース・サーバーに使用可能なマッピング・ライブラリは、特殊ファイルfilemap.ora内で識別されます。

14.9.2.2 マッピング構造

マッピング・ビューの情報を解釈するには、マッピング構造およびこれらの構造のOracle Database表現を理解する必要があります。

マッピング情報を構成する基本構造は、次のとおりです。

  • ファイル

    すべてのマッピング構造は、ファイル・サイズ、ファイルを構成するファイル・システムのエクステント数およびファイル・タイプなど、ファイルの属性セットを提供します。

  • ファイル・システムのエクステント

    ファイル・システムのエクステントのマッピング構造では、1つの要素にあるブロックの連続するチャンクが記述されます。これには、デバイス・オフセット、エクステント・サイズ、ファイル・オフセット、タイプ(データまたはパリティ)およびエクステントが常駐する要素の名前が含まれます。

    ノート:

    ファイル・システムのエクステントは、Oracle Databaseのエクステントとは異なります。ファイル・システムのエクステントは、そのファイル・システムで管理されるデバイスに書き込まれる連続する物理データ・ブロックです。Oracle Databaseのエクステントは、表領域エクステントなど、データベースで管理される論理構造です。

  • 要素

    要素のマッピング構造は、I/Oスタック内の記憶域コンポーネントを記述する抽象マッピング構造です。要素には、ミラー、ストライプ、パーティション、RAID5、連結要素およびディスクがあります。これらの構造は、マッピングのビルディング・ブロックです。

  • サブ要素

    副要素のマッピング構造では、I/Oマッピング・スタック内のある要素と次の要素のリンクが記述されます。この構造には、副要素番号、サイズ、副要素が存在する要素の名前および要素のオフセットが含まれます。

次の例は、これらのマッピング構造すべてを示しています。

14.9.2.3 マッピング構造の例

マッピング構造の例を示します。

XとYの2つのデータファイルで構成されるOracle Databaseを考えてみます。ファイルXとYはいずれも、ボリュームAにマウントされているファイル・システムに存在します。ファイルXは2つのエクステントによって構成され、ファイルYは1つのエクステントのみによって構成されています。

ファイルXの2つのエクステントとファイルYの1つのエクステントは、いずれも要素Aにマップされます。要素Aは、要素BおよびCにストライプ化されています。要素Aは、副要素B0とC1を介してそれぞれ要素BとCにマップされます。

要素Bは、要素D(物理ディスク)のパーティションで、副要素D0を介して要素Dにマップされます。

要素Cは、副要素E0とF1を介してそれぞれ要素EとF(両方とも物理ディスク)にまたがってミラー化されています。

図14-2は、すべてのマッピング構造を示しています。

図14-2 マッピング構造の図

図14-2の説明が続きます
「図14-2 マッピング構造の図」の説明

この図が示すマッピング構造は、Oracle Databaseインスタンスのマッピング情報全体を記述するには十分であり、ファイル内の各論理ブロックをI/Oスタック内の各レベルで1つ(またはミラー化の場合は1つ以上)の(要素名、要素オフセットの)タプルにマップしていることに注意してください。

14.9.2.4 構成ID

構成IDでは、要素またはファイルに関連付けられたバージョン情報を取得します。

ベンダーのライブラリには構成IDが用意されており、変更があるたびに更新されます。構成IDがなければ、データベースではマッピングに変更があったかどうかを指示できません。

構成IDには、次の2種類があります。

  • 永続

    この種の構成IDは、インスタンスが停止されても持続します。

  • 非永続

    この種の構成IDは、インスタンスが停止すると持続しません。データベースでは、インスタンスが稼働している間にのみマッピング情報をリフレッシュできます。

14.9.3 Oracle Databaseのファイル・マッピング・インタフェースの使用方法

Oracle Databaseのファイル・マッピング・インタフェースを使用してファイル・マッピングを有効にし、ビューのセットにファイル・マッピングに関する情報を取得できます。

14.9.3.1 ファイル・マッピングの有効化

ファイル・マッピングを有効にできます。

ファイル・マッピングを有効にするには:

  1. 32ビット・プラットフォームの場合は/opt/ORCLfmap/prot1_32/etcディレクトリ、64ビット・プラットフォームの場合は/opt/ORCLfmap/prot1_64/etcディレクトリに、有効なfilemap.oraファイルが存在することを確認します。

    ノート:

    filemap.oraファイルの形式と内容についてはこの項で説明しますが、これはあくまでも参考情報です。filemap.oraファイルは、システムのインストール時にデータベースによって作成されます。ベンダーから独自ライブラリが提供されるまで、filemap.oraファイルのエントリは1つのみで、オラクル社が提供するEMCライブラリに関するものです。EMC Symmetrix配列が使用可能な場合のみ、このファイルを手動で変更する必要があり、このエントリのコメントを解除します。

    filemap.oraファイルは、使用可能なすべてのマッピング・ライブラリが記述されている構成ファイルです。FMONを使用するには、filemap.oraファイルが存在し、マッピング・ライブラリへの有効なパスを指している必要があります。それ以外の場合は、正常に起動しません。

    ライブラリごとに、次の行をfilemap.oraに含める必要があります。

    lib=vendor_name:mapping_library_path

    ここで:

    • vendor_nameには、EMC Symmetricライブラリの場合はOracleを指定します。

    • mapping_library_pathには、マッピング・ライブラリのフルパスを指定します。

    このファイル内のライブラリの順序がきわめて重要であることに注意してください。各ライブラリは、構成ファイル内での順序に基づいて問合せされます。

    ファイル・マッピング・サービスは、使用可能なマッピング・ライブラリがなくても起動できます。filemap.oraファイルは、空であっても存在する必要があります。この場合、マッピング・サービスは、新しいマッピング情報を検出できないという制約を伴います。この種の構成で許可されるのは、リストア操作と削除操作のみです。

  2. FILE_MAPPING初期化パラメータをTRUEに設定します。

    このパラメータを設定するためにインスタンスを停止する必要はありません。次のALTER SYSTEM文を使用して設定できます。

    ALTER SYSTEM SET FILE_MAPPING=TRUE;
    
  3. 適切なDBMS_STORAGE_MAPマッピング・プロシージャを起動します。次の2つのオプションがあります。
    • コールド・スタートの使用例では、Oracle Databaseが起動するのみで、まだマッピング操作は起動されていません。DBMS_STORAGE_MAP.MAP_ALLプロシージャを実行して、データベースに関連するI/Oサブシステム全体のマッピング情報を作成します。

    • ウォーム・スタートの使用例では、マッピング情報はすでに作成されており、DBMS_STORAGE_MAP.MAP_SAVEプロシージャを起動してマッピング情報をデータ・ディクショナリに保存するかどうかをオプションで選択できます。(このプロシージャは、デフォルトでDBMS_STORAGE_MAP.MAP_ALL()内で起動します。)これにより、SGA内のすべてのマッピング情報がディスクに強制的にフラッシュされます。

      データベースの再起動後に、DBMS_STORAGE_MAP.RESTORE()を使用してマッピング情報をSGAにリストアします。必要な場合は、DBMS_STORAGE_MAP.MAP_ALL()をコールしてマッピング情報をリフレッシュできます。

14.9.3.2 DBMS_STORAGE_MAPパッケージの使用

DBMS_STORAGE_MAPパッケージによってマッピング操作を制御できる。

次の表に、使用可能な各種プロシージャを示します。

プロシージャ 用途:

MAP_OBJECT

オブジェクト名、所有者およびタイプで識別されるデータベース・オブジェクトのマッピング情報を作成します。

MAP_ELEMENT

指定した要素のマッピング情報を作成します。

MAP_FILE

指定したファイル名のマッピング情報を作成します。

MAP_ALL

すべてのタイプのデータベース・ファイル(アーカイブ・ログ以外)のマッピング情報全体を作成します。

DROP_ELEMENT

指定した要素のマッピング情報を削除します。

DROP_FILE

指定したファイル名のファイル・マッピング情報を削除します。

DROP_ALL

このインスタンスのSGAからすべてのマッピング情報を削除します。

SAVE

マッピング全体の再生成に必要な情報をデータ・ディクショナリに保存します。

RESTORE

マッピング情報全体をデータ・ディクショナリからインスタンスの共有メモリーにロードします。

LOCK_MAP

このインスタンスのSGA内でマッピング情報をロックします。

UNLOCK_MAP

このインスタンスのSGA内でマッピング情報のロックを解除します。

関連項目:

14.9.3.3 ファイル・マッピング・ビューからの情報の取得

DBMS_STORAGE_MAPパッケージにより生成されたマッピング情報は、動的パフォーマンス・ビューで取得されます。

次の表に、これらのビューの概要を示します。

ビュー 説明

V$MAP_LIBRARY

外部プロセスにより動的にロードされたすべてのマッピング・ライブラリのリストが含まれています。

V$MAP_FILE

インスタンスの共有メモリーにあるすべてのファイル・マッピング構造のリストが含まれています。

V$MAP_FILE_EXTENT

インスタンスの共有メモリーにあるすべてのファイル・システム・エクステントのマッピング構造のリストが含まれています。

V$MAP_ELEMENT

インスタンスのSGAにあるすべての要素マッピング構造のリストが含まれています。

V$MAP_EXT_ELEMENT

すべての要素マッピングの補足情報が含まれています。

V$MAP_SUBELEMENT

インスタンスの共有メモリーにあるすべての副要素マッピング構造のリストが含まれています。

V$MAP_COMP_LIST

すべての要素マッピング構造の補足情報が含まれています。

V$MAP_FILE_IO_STACK

ファイルの記憶域コンテナの階層配列が一連の行として表示されます。各行は1つの階層レベルを表します。

ただし、DBMS_STORAGE_MAP.MAP_OBJECTプロシージャにより生成された情報は、グローバルな一時表MAP_OBJECTに取得されます。この表には、オブジェクトの記憶域コンテナの階層配置が表示されます。この表の各行は、階層レベルを表します。MAP_OBJECT表の内容は、次のとおりです。

データ型 説明

OBJECT_NAME

VARCHAR2(2000)

オブジェクト名

OBJECT_OWNER

VARCHAR2(2000)

オブジェクトの所有者

OBJECT_TYPE

VARCHAR2(2000)

オブジェクト・タイプ

FILE_MAP_IDX

NUMBER

ファイルの索引(V$MAP_FILE内のFILE_MAP_IDXに対応)

DEPTH

NUMBER

I/Oスタック内の要素の深さ

ELEM_IDX

NUMBER

要素に対応する索引。

CU_SIZE

NUMBER

要素上に連続して存在する、ファイルの論理ブロックの連続するセット(HKB単位)。

STRIDE

NUMBER

この要素上で連続しているファイル内の連続単位(CU)間のHKB数。RAID5ファイルとストライプ・ファイルに使用される。

NUM_CU

NUMBER

この要素上で相互に隣接していて、ファイル内でSTRIDE HKBで区切られている連続単位の数。RAID5の場合、連続単位数にはパリティ・ストライプも含まれる。

ELEM_OFFSET

NUMBER

要素オフセット(HKB単位)

FILE_OFFSET

NUMBER

ファイルの先頭から連続単位の先頭バイトまでのオフセット(HKB単位)

DATA_TYPE

VARCHAR2(2000)

データ型(DATAPARITYまたはDATA AND PARITY)

PARITY_POS

NUMBER

パリティの位置。RAID5の場合のみ。このフィールドはパリティとデータ部分を区別するために必要である。

PARITY_PERIOD

NUMBER

パリティ間隔。RAID5の場合のみ。

14.9.4 ファイル・マッピングの例

Oracle Databaseファイル・マッピング機能のいくつかの強力な機能の例を示します。

これらの機能には次のものが含まれます。

  • 特定のデバイスにまたがるすべてのデータベース・ファイルをマップする機能

  • 特定のファイルを対応するデバイスにマップする機能

  • I/Oスタックのすべてのレベルでブロックを配分するなど、特定のデータベース・オブジェクトをマップする機能

次の2つのデータファイルで構成されるOracle Databaseインスタンスを考えてみます。

  • t_db1.f

  • t_db2.f

この2つのファイルは、VERITAS VxVMホスト・ベースのストライプ化ボリューム/dev/vx/dsk/ipfdg/ipf-vol1にマウントされたSolaris UFSファイル・システム上で作成されており、このボリュームはEMC Symmetrix配列から外部化された次のホスト・デバイスで構成されているとします。

  • /dev/vx/rdmp/c2t1d0s2

  • /dev/vx/rdmp/c2t1d1s2

次の例では、MAP_ALL()操作を実行する必要があることに注意してください。

14.9.4.1 例1: 1つのデバイスにまたがるすべてのデータベース・ファイルのマッピング

この例は、ホスト・デバイスに関連付けられたすべてのOracle Databaseファイルを返します。

次の問合せでは、/dev/vx/rdmp/c2t1d1s2ホスト・デバイスに関連付けられたすべてのOracle Databaseファイルが戻されます。

SELECT UNIQUE me.ELEM_NAME, mf.FILE_NAME
   FROM V$MAP_FILE_IO_STACK fs, V$MAP_FILE mf, V$MAP_ELEMENT me
   WHERE mf.FILE_MAP_IDX = fs.FILE_MAP_IDX
   AND me.ELEM_IDX = fs.ELEM_IDX
   AND me.ELEM_NAME = '/dev/vx/rdmp/c2t1d1s2';
 

問合せ結果は次のとおりです。

ELEM_NAME                 FILE_NAME
------------------------  --------------------------------
/dev/vx/rdmp/c2t1d1s2     /oracle/dbs/t_db1.f
/dev/vx/rdmp/c2t1d1s2     /oracle/dbs/t_db2.f
14.9.4.2 例2: ファイルから対応するデバイスへのマッピング

この例は、データ・ファイルのトポロジ・グラフを表示します。

次の問合せでは、/oracle/dbs/t_db1.fデータファイルのトポロジ・グラフが表示されます。

WITH fv AS 
  (SELECT FILE_MAP_IDX, FILE_NAME FROM V$MAP_FILE 
   WHERE FILE_NAME = '/oracle/dbs/t_db1.f')
SELECT fv.FILE_NAME, LPAD(' ', 4 * (LEVEL - 1)) || el.ELEM_NAME ELEM_NAME 
   FROM V$MAP_SUBELEMENT sb, V$MAP_ELEMENT el, fv, 
     (SELECT UNIQUE ELEM_IDX FROM V$MAP_FILE_IO_STACK io, fv 
      WHERE io.FILE_MAP_IDX = fv.FILE_MAP_IDX) fs
   WHERE el.ELEM_IDX = sb.CHILD_IDX
   AND fs.ELEM_IDX = el.ELEM_IDX
   START WITH sb.PARENT_IDX IN
     (SELECT DISTINCT ELEM_IDX 
      FROM V$MAP_FILE_EXTENT fe, fv
      WHERE fv.FILE_MAP_IDX = fe.FILE_MAP_IDX)
   CONNECT BY PRIOR sb.CHILD_IDX = sb.PARENT_IDX;

表示されるトポロジ・グラフは次のとおりです。

FILE_NAME                    ELEM_NAME
-----------------------      -------------------------------------------------
/oracle/dbs/t_db1.f          _sym_plex_/dev/vx/rdsk/ipfdg/ipf-vol1_-1_-1
/oracle/dbs/t_db1.f              _sym_subdisk_/dev/vx/rdsk/ipfdg/ipf-vol1_0_0_0
/oracle/dbs/t_db1.f                  /dev/vx/rdmp/c2t1d0s2
/oracle/dbs/t_db1.f                      _sym_symdev_000183600407_00C
/oracle/dbs/t_db1.f                          _sym_hyper_000183600407_00C_0
/oracle/dbs/t_db1.f                          _sym_hyper_000183600407_00C_1
/oracle/dbs/t_db1.f              _sym_subdisk_/dev/vx/rdsk/ipfdg/ipf-vol1_0_1_0
/oracle/dbs/t_db1.f                  /dev/vx/rdmp/c2t1d1s2
/oracle/dbs/t_db1.f                      _sym_symdev_000183600407_00D
/oracle/dbs/t_db1.f                          _sym_hyper_000183600407_00D_0
/oracle/dbs/t_db1.f                          _sym_hyper_000183600407_00D_1
14.9.4.3 例3: データベース・オブジェクトのマッピング

この例は、表のI/Oスタック内の全レベルでのブロックの分散を表示します。

この例では、scott.bonus表についてI/Oスタックの全レベルにおけるブロックの分散を表示します。

次のように、最初にMAP_OBJECT()操作を実行する必要があります。

EXECUTE DBMS_STORAGE_MAP.MAP_OBJECT('BONUS','SCOTT','TABLE');

問合せは次のとおりです。

SELECT io.OBJECT_NAME o_name, io.OBJECT_OWNER o_owner, io.OBJECT_TYPE o_type,
       mf.FILE_NAME, me.ELEM_NAME, io.DEPTH,
      (SUM(io.CU_SIZE * (io.NUM_CU - DECODE(io.PARITY_PERIOD, 0, 0, 
                         TRUNC(io.NUM_CU / io.PARITY_PERIOD)))) / 2) o_size
   FROM MAP_OBJECT io, V$MAP_ELEMENT me, V$MAP_FILE mf
   WHERE io.OBJECT_NAME =  'BONUS'
   AND   io.OBJECT_OWNER = 'SCOTT'
   AND   io.OBJECT_TYPE =  'TABLE'
   AND   me.ELEM_IDX = io.ELEM_IDX
   AND   mf.FILE_MAP_IDX = io.FILE_MAP_IDX
   GROUP BY io.ELEM_IDX, io.FILE_MAP_IDX, me.ELEM_NAME, mf.FILE_NAME, io.DEPTH,
         io.OBJECT_NAME, io.OBJECT_OWNER, io.OBJECT_TYPE
   ORDER BY io.DEPTH;

問合せの結果は次のとおりです。o_size列がKB単位で表されていることに注意してください。

O_NAME O_OWNER O_TYPE  FILE_NAME            ELEM_NAME                      DEPTH   O_SIZE
------ ------- ------  -------------------  -----------------------------  ------  ------
BONUS  SCOTT   TABLE   /oracle/dbs/t_db1.f  /dev/vx/dsk/ipfdg/ipf-vol1          0      20
BONUS  SCOTT   TABLE   /oracle/dbs/t_db1.f  _sym_plex_/dev/vx/rdsk/ipf          1      20
                                            pdg/if-vol1_-1_-1
BONUS  SCOTT   TABLE   /oracle/dbs/t_db1.f  _sym_subdisk_/dev/vx/rdsk/          2      12
                                            ipfdg/ipf-vol1_0_1_0
BONUS  SCOTT   TABLE   /oracle/dbs/t_db1.f  _sym_subdisk_/dev/vx/rdsk/ipf       2       8
                                            dg/ipf-vol1_0_2_0 
BONUS  SCOTT   TABLE   /oracle/dbs/t_db1.f  /dev/vx/rdmp/c2t1d1s2               3      12
BONUS  SCOTT   TABLE   /oracle/dbs/t_db1.f  /dev/vx/rdmp/c2t1d2s2               3       8
BONUS  SCOTT   TABLE   /oracle/dbs/t_db1.f  _sym_symdev_000183600407_00D        4      12
BONUS  SCOTT   TABLE   /oracle/dbs/t_db1.f  _sym_symdev_000183600407_00E        4       8
BONUS  SCOTT   TABLE   /oracle/dbs/t_db1.f  _sym_hyper_000183600407_00D_0       5      12
BONUS  SCOTT   TABLE   /oracle/dbs/t_db1.f  _sym_hyper_000183600407_00D_1       5      12
BONUS  SCOTT   TABLE   /oracle/dbs/t_db1.f  _sym_hyper_000183600407_00E_0       6       8
BONUS  SCOTT   TABLE   /oracle/dbs/t_db1.f  _sym_hyper_000183600407_00E_1       6       8

14.10 データファイルのデータ・ディクショナリ・ビュー

データ・ディクショナリ・ビューのセットは、データベースのデータファイルに関して役立つ情報を提供します。

ビュー 説明

DBA_DATA_FILES

属している表領域やファイルIDなど、各データファイルに関する記述情報が表示されます。ファイルIDを使用すると、他のビューと結合して詳細情報を得ることができます。

DBA_EXTENTS

USER_EXTENTS

DBAビューには、データベース内のすべてのセグメントを構成するエクステントが表示されます。エクステントを含むデータファイルのファイルIDが含まれます。USERビューには、現行ユーザーの所有するオブジェクトに属するセグメントのエクステントが表示されます。

DBA_FREE_SPACE

USER_FREE_SPACE

DBAビューには、すべての表領域の使用可能エクステントが表示されます。エクステントを含むデータファイルのファイルIDが含まれます。USERビューには、現行ユーザーからアクセス可能な表領域の使用可能エクステントが表示されます。

V$DATAFILE

制御ファイル内のデータファイル情報が含まれます。

V$DATAFILE_HEADER

データファイル・ヘッダーからの情報が含まれます。

ここでは、これらのビューの1つであるV$DATAFILEの使用例を示します。

SELECT NAME,
    FILE#,
    STATUS,
    CHECKPOINT_CHANGE# "CHECKPOINT"   
  FROM   V$DATAFILE;

NAME                                      FILE#     STATUS       CHECKPOINT
--------------------------------          -----     -------       ----------
/u01/oracle/rbdb1/system01.dbf                1     SYSTEM              3839
/u02/oracle/rbdb1/temp01.dbf                  2     ONLINE              3782
/u02/oracle/rbdb1/users03.dbf                 3     OFFLINE             3782

FILE#には、各データファイルのファイル番号がリストされ、データベースとともに作成されたSYSTEM表領域の最初のデータファイルが常にファイル1になります。STATUSには、データファイルに関するその他の情報がリストされます。データファイルがSYSTEM表領域の一部である場合、そのステータスはSYSTEMです(リカバリが必要な場合を除く)。SYSTEM表領域以外のデータファイルがオンラインである場合、そのステータスはONLINEです。SYSTEM表領域以外のデータファイルがオフラインである場合、そのステータスはOFFLINEまたはRECOVERです。CHECKPOINTには、データファイルの最新チェックポイントで書き込まれた最後のSCN (システム変更番号)がリストされます。