| 注意:一時ファイルは、一時表領域にのみ関連付けられたデータファイルの特殊なクラスです。この章で説明する内容は、相違点が示されている場合を除き、データファイルと一時ファイルの両方に適用されます。一時ファイルの詳細は、「ローカル管理の一時表領域の作成」を参照してください。 | 
| 関連項目: 
 | 
データファイルは、データベース内に存在するすべての論理構造のデータを格納する、オペレーティング・システムの物理ファイルです。データファイルは、表領域ごとに明示的に作成する必要があります。
Oracle Databaseでは、データファイルを一意に識別するために使用される絶対ファイル番号と相対ファイル番号という2つの関連するファイル番号を各データファイルに割り当てます。この番号について、次の表で説明します。
| ファイル番号のタイプ | 説明 | 
|---|---|
| 絶対 | データベース内のデータファイルを一意に識別します。このファイル番号は、ファイル名を使用するかわりにデータファイルを参照する多くのSQL文で使用できます。絶対ファイル番号は、 V$DATAFILEビューまたはV$TEMPFILEビューのFILE#列、あるいはDBA_DATA_FILESビューまたはDBA_TEMP_FILESビューのFILE_ID列で確認できます。 | 
| 相対 | 表領域内のデータファイルを一意に識別します。小規模および中規模サイズのデータベースでは、多くの場合、相対ファイル番号と絶対ファイル番号は同じです。ただし、データベース内のデータファイル数が一定のしきい値(通常は1023)を超えている場合は、相対ファイル番号と絶対ファイル番号が異なります。bigfile表領域では、相対ファイル番号は常に1024(OS/390プラットフォームでは4096)です。 | 
ここでは、データファイルの管理について説明します。この項の内容は、次のとおりです。
データベースのSYSTEM表領域およびSYSAUX表領域には、少なくとも1つのデータファイルが必要です。データベースにはこれ以外に、複数の表領域とそれに関連するデータファイルまたは一時ファイルが含まれている必要があります。データベースで作成するデータファイルの数に応じて、初期化パラメータの設定値およびCREATE DATABASE文の句の指定が決定します。
オペレーティング・システムによっては、Oracle Databaseに格納できるデータファイルの数が制限される場合があります。また、データファイル数およびその割当ての方法と場所によって、データベースのパフォーマンスが影響を受ける可能性があることを考慮してください。
| 注意:データベース内のデータファイルの数を制御してその管理を簡素化する方法の1つが、bigfile表領域の使用です。bigfile表領域は1つの大型データファイルのみで構成され、大規模データベースを使用する場合、および論理ボリューム・マネージャを使用してオペレーティング・システム・ファイルを管理する場合に特に役立ちます。bigfile表領域については、「bigfile表領域」を参照してください。 | 
データベースのデータファイルの数を決める際は、次のガイドラインを考慮してください。
Oracle Databaseインスタンスが起動されると、DB_FILES初期化パラメータによって、データファイル情報のために確保するSGA領域の大きさと、それに伴ってそのインスタンスに作成可能な最大データファイル数が指定されます。この制限は、そのインスタンスが存続期間にわたって適用されます。DB_FILESの値は(初期化パラメータの設定を変更することによって)変更可能ですが、新しい値はインスタンスが停止されて再起動されるまで有効になりません。
DB_FILESの値を決めるときは、次の点を考慮してください。
DB_FILESの値が小さすぎる場合は、最初にデータベースを停止しないと、DB_FILES制限を超えてデータファイルを追加できません。
DB_FILESの値が大きすぎると、メモリーが不必要に消費されます。
データファイルを従来のsmallfile表領域に追加するときには、次の制限事項があります。
ほとんどのオペレーティング・システムでは、1つのプロセスで同時にオープンできるファイルの数に制限があります。オープン・ファイル数がオペレーティング・システム制限に達すると、それ以上データファイルを作成できなくなります。
オペレーティング・システムでは、データファイルの数とサイズに制限があります。
データベースでは、インスタンスによってオープンされるOracle Databaseのデータファイルの最大数が制限されます。この制限はオペレーティング・システムによって異なります。
DB_FILES初期化パラメータで指定したデータファイルの数を超えることはできません。
CREATE DATABASE文またはCREATE CONTROLFILE文を発行するときに、MAXDATAFILESパラメータによって制御ファイルのデータファイル部分の初期サイズを指定します。ただし、新しく追加するファイルの番号がMAXDATAFILESより大きくDB_FILES以下であれば、データファイルのセクションにより多数のファイルを格納できるように、制御ファイルが自動的に拡張されます。
表領域、そして最終的にはデータベースに格納されるデータファイルの数は、パフォーマンスに影響を与える可能性があります。
Oracle Databaseでは、オペレーティング・システムで定義されている制限よりも多くの数のデータファイルをデータベース内に作成できます。データベースのDBWnプロセスは、すべてのオンライン・データファイルをオープンできます。Oracle Databaseには、オープン・ファイル記述子をキャッシュとして処理し、オープン・ファイル記述子の数がオペレーティング・システムで定義されている制限に達したときに自動的にファイルをクローズする機能があります。この機能は、パフォーマンスに悪影響を与えるおそれがあります。できれば、オープン・ファイル記述子に関するオペレーティング・システムの制限を調整して、それがデータベース内のオンライン・データファイルの数より大きくなるようにしてください。
| 関連項目: 
 | 
表領域を作成するときは、データベース・オブジェクトの将来的なサイズを見積り、十分な数のデータファイルを作成する必要があります。必要に応じて、後で表領域に割り当てられたディスク領域のすべての容量(その結果としてデータベースの容量)を大きくするために、データファイルを作成して表領域に追加できます。可能であれば、データがすべてのデバイスに均等に配分されるように、データファイルを複数のデバイスに作成してください。
表領域の位置は、その表領域を構成するデータファイルの物理的な位置によって決まります。コンピュータのハードウェア資源を適切に使用してください。
たとえば、データベースを格納するためのディスク・ドライブが複数使用可能な場合は、競合の可能性のあるデータファイルを別のディスクに配置することを検討してください。このようにすると、ユーザーが情報を問い合せるときに両方のディスク・ドライブが同時に動作し、同時にデータを取得できます。
| 関連項目:I/Oおよびデータファイルの配置の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。 | 
データファイルを作成して表領域を対応付けるには、次の表にリストされている文のいずれかを使用します。どの文でも、作成するデータファイルのファイル仕様を指定するか、または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バックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。 | 
表領域に新しいデータファイルを追加するときにファイル名を完全に指定しないと、データファイルは、オペレーティング・システムに応じてデフォルトのデータベース・ディレクトリまたはカレント・ディレクトリに作成されます。データファイルには、常に完全修飾名を使用することをお薦めします。既存のファイルを再利用する場合以外は、新しいファイル名が他のファイルと競合しないことを確認してください。すでに削除済の旧ファイルは上書きされます。
データファイルを作成する文が失敗した場合は、作成されたオペレーティング・システム・ファイルがすべて削除されます。ただし、ファイル・システムやストレージ・サブシステムで発生する多数の潜在的なエラーが原因で、オペレーティング・システムのコマンドを使用した手動でのファイル削除が必要になる場合があります。
ここでは、データファイルのサイズを変更する様々な方法について説明します。この項の内容は、次のとおりです。
データファイルを作成するか、既存のデータファイルを変更して、データベースでより多くの領域が必要になった場合に自動的にサイズが増えるようにすることができます。ファイル・サイズは、指定された単位ずつ、指定の最大サイズまで増加します。
データファイルを自動的に拡張するように設定しておくと、次のような利点があります。
表領域で領域が足りなくなった場合に、管理者が即時に介入する必要性が減ります。
エクステントの割当て失敗が原因でアプリケーションが停止または一時停止することがなくなります。
データファイルが自動的に拡張できるかどうかを確認するには、DBA_DATA_FILESビューを問い合せ、AUTOEXTENSIBLE列を調べます。
自動ファイル拡張を指定するには、次のSQL文を使用してデータファイルを作成するときにAUTOEXTEND ON句を指定します。
CREATE DATABASE
ALTER DATABASE
CREATE TABLESPACE
ALTER TABLESPACE
既存のデータファイルの自動ファイル拡張機能を使用可能または使用禁止にしたり、データファイルのサイズを手動で変更するには、ALTER DATABASE文を使用します。bigfile表領域では、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言語リファレンス』を参照してください。 | 
手動でデータファイルのサイズを増減させるには、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;
| 注意:必ずしもファイルのサイズを指定した値まで縮小できるわけではありません。ファイルに格納されているデータ量が指定の縮小サイズよりも大きい場合は、エラーが戻されます。 | 
個々のデータファイルまたは一時ファイルの可用性は、ファイルをオフラインにするか、オンラインにして変更できます。オフラインのデータファイルはデータベースに使用できず、オンライン化されるまでアクセスできません。
データファイルの可用性の変更には、次のような理由があります。
データファイルのオフライン・バックアップを実行するため。
データファイルの名前変更または再配置を行うため。最初にデータファイルをオフライン化するか、あるいは表領域をオフライン化する必要があります。
データベースのデータファイルへの書込みに問題があり、データファイルが自動的にオフライン化された場合。この場合は、後で問題を解決してから、データファイルを手動でオンライン化できます。
データファイルが破損または欠落している場合。データベースをオープンするには、その前にデータファイルをオフライン化する必要があります。
読取り専用表領域のデータファイルはオフライン化またはオンライン化ができますが、ファイルをオンライン化しても表領域の読取り専用状態に影響を与えることはありません。表領域が読取り/書込み可能な状態に戻るまで、このデータファイルには書き込めません。
| 注意:表領域自体をオフライン化することによって、表領域のすべてのデータファイルを一時的に使用禁止にできます。表領域をオンラインに戻すには、表領域のこれらのファイルをそのままにしておく必要がありますが、「データファイルの名前変更と再配置」に示されている手順に類似する次の手順でファイルを再配置したり名前を変更できます。 詳細は、「表領域のオフライン化」を参照してください。 | 
データファイルをオンライン化またはオフライン化するには、ALTER DATABASEシステム権限が必要です。ALTER TABLESPACE文を使用してすべてのデータファイルまたは一時ファイルをオフライン化するには、ALTER TABLESPACEまたはMANAGE TABLESPACEシステム権限が必要です。Oracle Real Application Clusters環境では、データベースを排他モードでオープンする必要があります。
ここでは、データファイルの可用性を変更する様々な方法について説明します。この項の内容は、次のとおりです。
個々のデータファイルをオンライン化するには、DATAFILE句を指定してALTER DATABASE文を発行します。次の文は、指定したデータファイルをオンライン化します。
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' ONLINE;
これと同じファイルをオフライン化するには、次の文を発行します。
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/stuff01.dbf' OFFLINE;
| 注意:この形式の ALTER DATABASE文を使用するには、データベースをARCHIVELOGモードにしてください。NOARCHIVELOGモードのときにデータファイルをオフライン化すると、ファイルが失われるおそれがあるので、この要件により、データファイルが誤って失われないようにします。 | 
データベースがNOARCHIVELOGモードのときにデータファイルをオフライン化するには、DATAFILE句およびOFFLINE FOR DROP句を指定してALTER DATABASE文を使用します。
OFFLINEキーワードを指定すると、破損しているかどうかに関係なくデータファイルにOFFLINEのマークが付くため、データベースをオープンできます。
FOR DROPキーワードによって、データファイルが後で削除されるようにマークが付けられます。このようなデータファイルは、オンラインに戻すことはできません。
| 注意:この操作では、実際にはデータファイルは削除されません。データ・ディクショナリには残っているので、次のいずれかの方法で削除する必要があります。 
 | 
次の文は、指定したデータファイルをオフライン化し、削除対象としてマークを付けます。
ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/users03.dbf' OFFLINE FOR DROP;
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文は表領域だけでなくデータファイルもオフラインにしますが、一時表領域または一時ファイルの状態を変更するためには使用できません。
データファイルの名前を変更して、それらの名前や位置を変更できます。次の項では、その手順について説明します。
これらの手順を使用してデータファイルを名前変更および再配置すると、データベースの制御ファイルに記録されている、データファイルへのポインタのみが変更されます。これらの手順では、オペレーティング・システム・ファイルを物理的に名前変更したり、ファイルをオペレーティング・システム・レベルでコピーすることはありません。データファイルの名前変更と再配置には、複数の手順が必要です。手順と例題をよく理解してから実行してください。
ここでは、単一の表領域のデータファイルを名前変更および再配置するための手順をいくつか示します。この手順を実行するには、ALTER TABLESPACEシステム権限が必要です。
単一の表領域のデータファイルの名前を変更する手順は、次のとおりです。
データファイルを含む表領域をオフライン化します。データベースはオープンしている必要があります。
次に例を示します。
ALTER TABLESPACE users OFFLINE NORMAL;
オペレーティング・システムを使用してデータファイルの名前を変更します。
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ビューに表示されるとおり、正確に指定してください。
データベースをバックアップします。データベースの構造を変更した後は、即時にデータベースの完全バックアップを実行してください。
ONLINE句を指定したALTER TABLESPACE文を使用して、この表領域をオンラインに戻します。
ALTER TABLESPACE users ONLINE
ここでは、データファイルを再配置する手順の例を示します。
想定する条件は、次のとおりです。
オープンしているデータベースにusersという表領域が存在し、すべて同じディスク上に配置されたデータファイルによって構成されています。
users表領域のデータファイルを、別の分離されたディスク・ドライブに再配置します。
現在、オープンしているデータベースに管理者権限で接続しています。
データベースの現行のバックアップは取得済です。
次の手順を実行します。
特定のファイルの名前やサイズが不明な場合は、データ・ディクショナリ・ビュー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
データファイルを含む表領域をオフライン化します。
ALTER TABLESPACE users OFFLINE NORMAL;
オペレーティング・システムを使用し、データファイルを新しい位置にコピーして名前変更します。「データベース・サーバーを使用したファイルのコピー」で説明するDBMS_FILE_TRANSFERパッケージを使用して、ファイルをコピーできます。
| 注意:SQL*Plusの HOSTコマンドを使用すると、SQL*Plusを一時的に終了し、オペレーティング・システムのコマンドを実行してファイルをコピーできます。 | 
データベース内のデータファイルの名前を変更します。
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';
データベースをバックアップします。データベースの構造を変更した後は、即時にデータベースの完全バックアップを実行してください。
ONLINE句を指定したALTER TABLESPACE文を使用して、この表領域をオンラインに戻します。
ALTER TABLESPACE users ONLINE
1つ以上の表領域のデータファイルは、ALTER DATABASE RENAME FILE文を使用して、名前変更および再配置できます。1回の操作で複数の表領域のデータファイルを名前変更または再配置する方法は、これ以外にありません。この手順を実行するには、ALTER DATABASEシステム権限が必要です。
| 注意: SYSTEM表領域、デフォルト一時表領域、またはアクティブなUNDO表領域のデータファイルを名前変更または再配置する場合、これらの表領域はオフライン化できないため、このALTERDATABASE文を使用する必要があります。 | 
複数の表領域のデータファイルの名前を変更する手順は、次のとおりです。
データベースがマウントされ、クローズされていることを確認します。
| 注意:データベースは必要な場合クローズする必要はありませんが、データファイル(または一時ファイル)はオフラインにする必要があります。 | 
オペレーティング・システムで新しい位置と名前を指定して、名前変更するデータファイルをコピーします。「データベース・サーバーを使用したファイルのコピー」で説明するDBMS_FILE_TRANSFERパッケージを使用して、ファイルをコピーできます。
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ビューに表示されるとおり、正確に指定してください。
データベースをバックアップします。データベースの構造を変更した後は、即時にデータベースの完全バックアップを実行してください。
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表領域のデータファイルは削除できません。
ローカル管理表領域のデータファイルがオフラインの場合、そのファイルは削除できません。
チェックサムを使用してデータ・ブロックを検証するようにデータベースを構成するには、初期化パラメータDB_BLOCK_CHECKSUMをTYPICAL(デフォルト)に設定します。これによって、DBWnプロセスおよびダイレクト・ローダーが各ブロックのチェックサムを計算し、ブロックをディスクに書き込むときにこのチェックサムをブロック・ヘッダーに格納します。
ブロックが読み込まれるときにチェックサムが検証されるのは、DB_BLOCK_CHECKSUMがTRUEに設定され、前回ブロックが書き込まれたときにチェックサムが格納されている場合のみです。破損が検出されると、メッセージORA-01578が返され、破損に関する情報がアラート・ログに書き込まれます。
DB_BLOCK_CHECKSUMパラメータの値は、ALTER SYSTEM文で動的に変更できます。このパラメータの設定に関係なく、SYSTEM表領域のデータ・ブロックは常にチェックサムを使用して検証されます。
| 関連項目:DB_BLOCK_CHECKSUM初期化パラメータの詳細は、『Oracle Databaseリファレンス』 を参照してください。 | 
データベース内のファイルをコピーする場合、またはデータベース間でファイルを転送する場合(トランスポータブル表領域機能を使用して転送する場合など)は、必ずしもオペレーティング・システムを使用する必要はありません。これらの処理は、DBMS_FILE_TRANSFERパッケージ、またはStreamsの伝播を使用して行うこともできます。このマニュアルではStreamsの使用方法については説明していませんが、DBMS_FILE_TRANSFERパッケージの使用例は「ファイルのローカル・ファイル・システムへのコピー」に示しています。
DBMS_FILE_TRANSFERパッケージでは、ローカル・ファイル・システムまたはOracle Automatic Storage Management(Oracle ASM)ディスク・グループをファイル転送の移動元または移動先として使用できます。Oracle ASMへの転送またはOracle ASMからの転送に含めることができるのは、Oracle Databaseファイル(データファイル、一時ファイル、制御ファイルなど)のみです。
| 注意:データベースによって変更されているファイルのコピーまたは転送に DBMS_FILE_TRANSFERパッケージを使用しないでください。コピーや転送に使用すると、ファイルの整合性がなくなる可能性があります。 | 
UNIXシステムの場合、DBMS_FILE_TRANSFERパッケージで作成されたファイルの所有者は、インスタンスを実行するシャドウ・プロセスの所有者になります。通常、この所有者はORACLEです。DBMS_FILE_TRANSFERを使用して作成されたファイルは、常に、データベース内のすべてのプロセスによる書込みと読取りが可能ですが、そのようなファイルを直接読取りまたは書込みを行うのに必要な権限を持っていないユーザーは、システム管理者からのアクセスが必要な場合があります。
この項の内容は次のとおりです。
| 関連項目: 
 | 
この項では、DBMS_FILE_TRANSFERパッケージのCOPY_FILEプロシージャを使用してファイルをローカル・ファイル・システムにコピーする例を示します。次の例では、/usr/admin/sourceディレクトリ内のdb1.datという名前のバイナリ・ファイルを、ローカル・ファイル・システムの/usr/admin/destinationディレクトリにdb1_copy.datという名前でコピーします。
権限を付与でき、SQLを使用してディレクトリ・オブジェクトを作成できる管理ユーザーとしてSQL*Plusで接続します。
SQLコマンドCREATE DIRECTORYを使用して、コピー元ファイルが格納されるディレクトリのディレクトリ・オブジェクトを作成します。ディレクトリ・オブジェクトは、ディレクトリの別名に類似しています。たとえば、SOURCE_DIRというディレクトリ・オブジェクトを、使用しているコンピュータ・システムの/usr/admin/sourceディレクトリに対して作成するには、次の文を実行します。
CREATE DIRECTORY SOURCE_DIR AS '/usr/admin/source';
SQLコマンドCREATE DIRECTORYを使用して、バイナリ・ファイルがコピーされるディレクトリのディレクトリ・オブジェクトを作成します。たとえば、DEST_DIRというディレクトリ・オブジェクトを、使用しているコンピュータ・システムの/usr/admin/destinationディレクトリに対して作成するには、次の文を実行します。
CREATE DIRECTORY DEST_DIR AS '/usr/admin/destination';
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;
strmadminユーザーとして接続し、プロンプトが表示されたらユーザー・パスワードを入力します。
CONNECT strmadmin
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;
/
| 注意:データベースによって変更されているファイルのコピーまたは転送に DBMS_FILE_TRANSFERパッケージを使用しないでください。コピーや転送に使用すると、ファイルの整合性がなくなる可能性があります。 | 
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(...)
この構成では、ファイルをプルします。
DBMS_SCHEDULERパッケージを使用して、単一のデータベース内およびデータベース間でファイルを自動的に転送できます。DBMS_SCHEDULERパッケージではサード・パーティ・ファイル転送もサポートされています。スケジューラによって実行されるファイル転送が長時間実行される場合は、ファイルの読取りまたは書込みを行うデータベースでV$SESSION_LONGOPS動的パフォーマンス・ビューを使用してファイル転送を監視できます。スケジューラ・ジョブで使用するデータベース・リンクは、必ず固定ユーザー・データベース・リンクです。
再開可能なスケジューラ・ジョブを使用すると、特に断続的に障害が発生する場合に、ファイル転送の信頼性を自動的に改善できます。転送先ファイルがクローズする前にファイル転送が失敗した場合は、部分的に書き込まれた転送先ファイルがデータベースによって削除された後、ファイル転送を最初から再開できます。したがって、ジョブの残りの部分が再開可能な場合は、再開可能なスケジューラ・ジョブを使用してファイルを転送することを検討してください。スケジューラ・ジョブの詳細は、第29章「Oracle Schedulerを使用したジョブのスケジューリング」を参照してください。
| 注意:再開可能な1つのジョブで複数のファイルを転送する場合は、すでに転送済のファイルと転送されていないファイルがある状態でジョブを再開する方法を検討する必要があります。 | 
DBMS_FILE_TRANSFERパッケージとDBMS_SCHEDULERパッケージの両方を使用すると、複雑なファイル転送メカニズムを作成できます。たとえば、転送するファイルのコピーが複数のデータベースに存在する場合は、ソースの可用性、ソースのロード、宛先データベースへの通信帯域幅などの要因を検討して、最初にアクセスするソース・データベース、および障害発生時にアクセスを試みるソース・データベースを決定します。この場合、それらの要因に関する情報を入手する必要があるため、要因を検討するメカニズムを構築する必要があります。
別の例として、ロードよりも完了時間が短いことが重要である場合は、複数のスケジューラ・ジョブを発行してファイル転送をパラレルで実行できます。また、ソース・データベースと転送先データベースのファイル・レイアウトに関する知識があれば、使用するI/Oデバイスが異なる場合のみ同時転送を実行またはスケジュールすることで、ディスクの競合を最小限にできます。
データファイルが単なるファイル・システム・ファイルである環境や、RAWデバイス上で直接作成される環境では、表領域と基礎となるデバイスとの関連付けを調べるのは比較的容易です。Oracle Databaseには、ファイルとデバイスとのマッピングを提供するDBA_TABLESPACES、DBA_DATA_FILES、V$DATAFILEなどのビューが用意されています。これらのマッピングをデバイス統計と併用して、I/Oパフォーマンスを評価できます。
ただし、ホスト・ベースの論理ボリューム・マネージャ(LVM)と、Redundant Array of Inexpensive Disks(RAID)機能を提供する洗練されたストレージ・サブシステムの導入によって、ファイルからデバイスへのマッピングを判別するのが難しくなっています。最新ファイルがブラック・ボックスに隠れていると、そのファイルを判断するのが難しくなるため、問題が発生します。この項では、この問題を解決するためのOracle Databaseのアプローチについて説明します。
この項の内容は、次のとおりです。
| 注意:ここでは、Oracle Databaseのファイル・マッピング・インタフェースの概要と、 DBMS_STORAGE_MAPパッケージおよび動的パフォーマンス・ビューを使用してファイルと物理デバイスのマッピングを公開する方法について説明します。Oracle Enterprise Managerを使用して、より簡単にこの機能にアクセスできます。それによって提供される使いやすいグラフィカル・インタフェースを使用して、ファイルと物理デバイスをマップできます。 | 
I/Oパフォーマンスを把握するには、ファイルが格納されている記憶域の階層の詳細を知る必要があります。Oracle Databaseには、ファイル、論理ビューの中間レイヤーおよび実際の物理デバイスのマッピング全体を表示するメカニズムが用意されています。この表示には、動的パフォーマンス・ビュー(V$ビュー)のセットが使用されます。これらのビューを使用すると、ファイル・ブロックがあるディスクを正確に特定できます。
これらのビューを作成するために、ストレージ・ベンダーは特定のI/Oスタック要素のマッピングを受け持つマッピング・ライブラリを提供する必要があります。データベースは、バックグラウンド・プロセスFMONによって起動される外部の非Oracle Databaseプロセスを介して、これらのライブラリと通信します。FMONは、マッピング情報の管理を受け持ちます。OracleにはPL/SQLパッケージDBMS_STORAGE_MAPが用意されており、このパッケージを使用して、マッピング・ビューを移入するマッピング操作を起動します。
| 注意:ファイル・マッピング・インタフェースは、Windowsプラットフォームでは使用できません。 | 
この項では、Oracle Databaseのファイル・マッピング・インタフェースの構成要素と、インタフェースの動作について説明します。内容は次のとおりです。
次の図は、ファイル・マッピング・メカニズムの構成要素を示しています。
ここでは、これらの構成要素と、各構成要素が連動してマッピング・ビューを移入する動作について説明します。
FMONは、FILE_MAPPING初期化パラメータがTRUEに設定されている場合に、データベースにより起動されるバックグラウンド・プロセスです。FMONの役割は、次のとおりです。
SGAに格納されるマッピング情報を作成します。この情報は、次の構造で構成されます。
ファイル
ファイル・システムのエクステント
要素
副要素
これらの構造については、「マッピング構造」を参照してください。
次の原因で変更が発生した場合にマッピング情報をリフレッシュします。
データファイル(サイズ)の変更
データファイルの追加または削除
記憶域の構成変更(低頻度)
マッピング情報をデータ・ディクショナリに保存して、起動操作と停止操作の間も持続する情報のビューを保持します。
インスタンスの起動時にマッピング情報をSGAにリストアします。これにより、インスタンスを起動するたびにマッピング情報全体を再作成するという、高コストの操作が不要になります。
DBMS_STORAGE_MAPパッケージで起動されるプロシージャを使用すると、このマッピングを制御しやすくなります。
FMONは外部の非Oracle DatabaseプロセスFMPUTLを起動し、このプロセスはベンダーが提供するマッピング・ライブラリと直接通信します。このプロセスは、I/Oスタックのすべてのレベルにマッピング・ライブラリが存在していれば、すべてのレベルを通じてマッピング情報を取得します。一部のプラットフォームでは、I/Oマッピング・スタックの全レベルを通じてマッピングするにはルート権限が必要であるため、外部プロセスのSETUIDビットをONに設定する必要があります。
この外部プロセスの役割は、マッピング・ライブラリを検出してアドレス空間に動的にロードすることです。
Oracle Databaseはマッピング・ライブラリを使用して、特定のマッピング・ライブラリが所有する要素のマッピング情報を検出します。これらのマッピング・ライブラリを通じて、個々のI/Oスタック要素に関する情報が伝達されます。この情報を使用して、ユーザーが問合せできる動的パフォーマンス・ビューが移入されます。
マッピングを完成するには、すべてのスタック・レベルにマッピング・ライブラリが存在する必要があり、各ライブラリがI/Oマッピング・スタックの独自部分を所有できます。たとえば、VERITAS VxVMライブラリはVERITASボリューム・マネージャに関連するスタック要素を所有し、EMCライブラリはI/Oマッピング・スタックのうちすべてのEMCストレージ固有レイヤーを所有します。
マッピング・ライブラリはベンダーから提供されます。ただし、現在、OracleにはEMCストレージ用のマッピング・ライブラリが用意されています。データベース・サーバーに使用可能なマッピング・ライブラリは、特殊ファイルfilemap.ora内で識別されます。
この項では、マッピング構造とそのOracle Database表現について説明します。マッピング・ビューに表示される情報を解析するには、この情報を理解する必要があります。
マッピング情報を構成する基本構造は、次のとおりです。
ファイル
すべてのマッピング構造は、ファイル・サイズ、ファイルを構成するファイル・システムのエクステント数およびファイル・タイプなど、ファイルの属性セットを提供します。
ファイル・システムのエクステント
ファイル・システムのエクステントのマッピング構造では、1つの要素にあるブロックの連続するチャンクが記述されます。これには、デバイス・オフセット、エクステント・サイズ、ファイル・オフセット、タイプ(データまたはパリティ)およびエクステントが常駐する要素の名前が含まれます。
| 注意:ファイル・システムのエクステントは、Oracle Databaseのエクステントとは異なります。ファイル・システムのエクステントは、そのファイル・システムで管理されるデバイスに書き込まれる連続する物理データ・ブロックです。Oracle Databaseのエクステントは、表領域エクステントなど、データベースで管理される論理構造です。 | 
要素
要素のマッピング構造は、I/Oスタック内の記憶域コンポーネントを記述する抽象マッピング構造です。要素には、ミラー、ストライプ、パーティション、RAID5、連結要素およびディスクがあります。これらの構造は、マッピングのビルディング・ブロックです。
副要素
副要素のマッピング構造では、I/Oマッピング・スタック内のある要素と次の要素のリンクが記述されます。この構造には、副要素番号、サイズ、副要素が存在する要素の名前および要素のオフセットが含まれます。
次の例は、これらのマッピング構造すべてを示しています。
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(両方とも物理ディスク)にまたがってミラー化されています。
図15-2は、すべてのマッピング構造を示しています。
この図が示すマッピング構造は、Oracle Databaseインスタンスのマッピング情報全体を記述するには十分であり、ファイル内の各論理ブロックをI/Oスタック内の各レベルで1つ(またはミラー化の場合は1つ以上)の(要素名、要素オフセットの)タプルにマップしていることに注意してください。
構成IDでは、要素またはファイルに関連付けられたバージョン情報を取得します。ベンダーのライブラリには構成IDが用意されており、変更があるたびに更新されます。構成IDがなければ、データベースではマッピングに変更があったかどうかを指示できません。
構成IDには、次の2種類があります。
永続
この種の構成IDは、インスタンスが停止されても持続します。
非永続
この種の構成IDは、インスタンスが停止すると持続しません。データベースでは、インスタンスが稼働している間にのみマッピング情報をリフレッシュできます。
ここでは、Oracle Databaseのファイル・マッピング・インタフェースの使用方法について説明します。内容は次のとおりです。
ファイル・マッピング機能を使用可能にする手順は、次のとおりです。
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ファイルは、空であっても存在する必要があります。この場合、マッピング・サービスは、新しいマッピング情報を検出できないという制約を伴います。この種の構成で許可されるのは、リストア操作と削除操作のみです。
FILE_MAPPING初期化パラメータをTRUEに設定します。
このパラメータを設定するためにインスタンスを停止する必要はありません。次のALTER SYSTEM文を使用して設定できます。
ALTER SYSTEM SET FILE_MAPPING=TRUE;
適切な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()をコールしてマッピング情報をリフレッシュできます。
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内でマッピング情報のロックを解除します。 | 
| 関連項目: 
 | 
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つの階層レベルを表します。 | 
| 関連項目:動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。 | 
ただし、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 | この要素上で相互に隣接していて、ファイル内で STRIDEHKBで区切られている連続単位の数。RAID5の場合、連続単位数にはパリティ・ストライプも含まれる。 | 
| ELEM_OFFSET | NUMBER | 要素オフセット(HKB単位) | 
| FILE_OFFSET | NUMBER | ファイルの先頭から連続単位の先頭バイトまでのオフセット(HKB単位) | 
| DATA_TYPE | VARCHAR2(2000) | データ型( DATA、PARITYまたはDATA AND PARITY) | 
| PARITY_POS | NUMBER | パリティの位置。RAID5の場合のみ。このフィールドはパリティとデータ部分を区別するために必要である。 | 
| PARITY_PERIOD | NUMBER | パリティ間隔。RAID5の場合のみ。 | 
次の例では、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()操作を実行する必要があることに注意してください。
次の問合せでは、/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
次の問合せでは、/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
この例では、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
次のデータ・ディクショナリ・ビューは、データベースのデータファイルに関して役立つ情報を提供します。
| ビュー | 説明 | 
|---|---|
| DBA_DATA_FILES | 属している表領域やファイルIDなど、各データファイルに関する記述情報が表示されます。ファイルIDを使用すると、他のビューと結合して詳細情報を得ることができます。 | 
| DBA_EXTENTS
 | DBAビューには、データベース内のすべてのセグメントを構成するエクステントが表示されます。エクステントを含むデータファイルのファイルIDが含まれます。USERビューには、現行ユーザーの所有するオブジェクトに属するセグメントのエクステントが表示されます。 | 
| DBA_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 (システム変更番号)がリストされます。
| 関連項目:これらのビューの完全な説明は、『Oracle Databaseリファレンス』を参照してください。 |