14 データファイルおよび一時ファイルの管理
データファイルおよび一時ファイルの管理では、ファイルの作成、変更および削除などのタスクを行います。
ノート:
一時ファイルは、一時表領域にのみ関連付けられたデータファイルの特殊なクラスです。この章で説明する内容は、相違点が示されている場合を除き、データファイルと一時ファイルの両方に適用されます。一時ファイルの詳細は、「ローカル管理の一時表領域の作成」を参照してください
- データファイルを管理するためのガイドライン
ガイドラインに従ってデータファイルを管理できます。 - データファイルの作成および表領域への追加
様々なSQL文を使用して、データファイルを作成し、それらを表領域に関連付けることができます。 - データファイルのサイズ変更
データファイルのサイズを変更できます。たとえば、データベースにさらに領域が必要になった場合、1つ以上のデータファイルのサイズを大きくできます。 - データファイルの可用性の変更
データファイルのオフライン・バックアップやオフライン・データファイルの再配置などの特定のタスクを実行するには、データファイルの可用性を変更する必要があります。 - データファイルの名前変更と再配置
オンラインまたはオフライン・データファイルの名前を変更して、それらの名前や位置を変更できます。 - データファイルの削除
単一のデータファイルまたは一時ファイルを削除するには、ALTER
TABLESPACE
文のDROP
DATAFILE
句およびDROP
TEMPFILE
句を使用できます。 - データファイル内のデータ・ブロックの検証
データ・ブロックの検証のためにチェックサムを使用するようにデータベースを構成するには、初期化パラメータDB_BLOCK_CHECKSUM
をTYPICAL
(デフォルト)に設定します。 - データベース・サーバーを使用したファイルのコピー
データベース内でのファイルのコピー、またはデータベース間でのファイルの転送には、DBMS_FILE_TRANSFER
パッケージを使用できます。 - 物理デバイスへのファイルのマッピング
データファイルがファイル・システム・ファイルである環境では、表領域と基礎となるデバイスとの関連付けを比較的簡単に確認できます。Oracle Databaseには、ファイルとデバイスとのマッピングを提供するDBA_TABLESPACES
、DBA_DATA_FILES
、V$DATAFILE
などのビューが用意されています。これらのマッピングをデバイス統計と併用して、I/Oパフォーマンスを評価できます。 - データファイルのデータ・ディクショナリ・ビュー
データ・ディクショナリ・ビューのセットが、データベースのデータファイルに関する有用な情報を提供します。
関連項目:
-
Oracle Databaseサーバーによって作成および管理されるデータファイルと一時ファイルの作成方法は、「Oracle Managed Filesの使用」を参照してください
親トピック: Oracle Databaseの構造と記憶域
14.1 データファイルを管理するためのガイドライン
ガイドラインに従ってデータファイルを管理できます。
- データファイルについて
データファイルは、データベース内のすべての論理構造のデータを格納する、オペレーティング・システムの物理ファイルです。データファイルは、表領域ごとに明示的に作成する必要があります。 - データファイル数の決定
データベースのためのデータファイルの数を決定する必要があります。 - データファイルのサイズ設定
表領域を作成するときは、予測されるデータベース・オブジェクトのサイズを推定し、十分なデータファイルを作成する必要があります。 - 適切なデータファイルの配置
表領域の位置は、その表領域を構成するデータファイルの物理位置によって決定されます。コンピュータのハードウェア資源を適切に使用してください。 - REDOログ・ファイルから分離したデータファイルの格納
データファイルは、REDOログ・ファイルを格納する同じディスク・ドライブに格納しないでください。データファイルとREDOログ・ファイルが同じディスク・ドライブに格納されていて、このディスク・ドライブで障害が発生すると、これらのファイルをデータベースのリカバリ手順で使用できなくなります。
親トピック: データファイルおよび一時ファイルの管理
14.1.1 データファイルについて
データファイルは、データベース内に存在するすべての論理構造のデータを格納する、オペレーティング・システムの物理ファイルです。データファイルは、表領域ごとに明示的に作成する必要があります。
Oracle Databaseでは、データファイルを一意に識別するために使用される絶対ファイル番号と相対ファイル番号という2つの関連するファイル番号を各データファイルに割り当てます。この番号について、次の表で説明します。
ファイル番号のタイプ | 説明 |
---|---|
絶対 |
データベース内のデータファイルを一意に識別します。このファイル番号は、ファイル名を使用するかわりにデータファイルを参照する多くのSQL文で使用できます。絶対ファイル番号は、 |
相対 |
表領域内のデータファイルを一意に識別します。小規模および中規模サイズのデータベースでは、多くの場合、相対ファイル番号と絶対ファイル番号は同じです。ただし、データベース内のデータファイル数が一定のしきい値(通常は1023)を超えている場合は、相対ファイル番号と絶対ファイル番号が異なります。bigfile表領域では、相対ファイル番号は常に1024(OS/390プラットフォームでは4096)です。 |
親トピック: データファイルを管理するためのガイドライン
14.1.2 データファイル数の決定
データベースのためのデータファイルの数を決定する必要があります。
- データファイル数の決定について
少なくとも1つのデータファイルが、データベースのSYSTEM
およびSYSAUX
表領域のために必要です。データベースにはこれ以外に、複数の表領域とそれに関連するデータファイルまたは一時ファイルが含まれている必要があります。データベースで作成するデータファイルの数に応じて、初期化パラメータの設定値およびCREATE
DATABASE
文の句の指定が決定します。 - DB_FILES初期化パラメータの値の決定
Oracle Databaseインスタンスを起動すると、DB_FILES
初期化パラメータは、データファイル情報のために予約されるSGA領域の量、つまり、インスタンスのために作成可能な最大データファイル数を示します。 - データファイルを表領域に追加するときの制限事項の考慮
表領域にデータファイルを追加するときに考慮する必要があるいくつかの制限事項があります。 - データファイル数のパフォーマンスへの影響の考慮
表領域内、つまりデータベース内に含まれるデータファイルの数は、パフォーマンスに影響を与える可能性があります。
親トピック: データファイルを管理するためのガイドライン
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文 | 説明 | 関連情報 |
---|---|---|
|
表領域とそれを構成するデータファイルを作成します。 |
|
|
ローカル管理の一時表領域とそれを構成する一時ファイル(一時ファイルは特殊なデータファイルです)を作成します。 |
|
|
データファイルを作成して表領域に追加します。 |
|
|
一時ファイルを作成して一時表領域に追加します。 |
|
|
データベースとそれに関連付けられたデータファイルを作成します。 |
|
|
古いデータファイルにかわる新しい空のデータファイルを作成します(バックアップがない状態で失われたデータファイルを再作成する場合に役立ちます)。 |
『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。 |
表領域に新しいデータファイルを追加するときにファイル名を完全に指定しないと、データファイルは、オペレーティング・システムに応じてデフォルトのデータベース・ディレクトリまたはカレント・ディレクトリに作成されます。データファイルには、常に完全修飾名を使用することをお薦めします。既存のファイルを再利用する場合以外は、新しいファイル名が他のファイルと競合しないことを確認してください。すでに削除済の旧ファイルは上書きされます。
データファイルを作成する文が失敗した場合は、作成されたオペレーティング・システム・ファイルがすべて削除されます。ただし、ファイル・システムやストレージ・サブシステムで発生する多数の潜在的なエラーが原因で、オペレーティング・システムのコマンドを使用した手動でのファイル削除が必要になる場合があります。
親トピック: データファイルおよび一時ファイルの管理
14.3 データファイルのサイズ変更
データファイルのサイズを変更できます。たとえば、データベースにさらに領域が必要になった場合、1つ以上のデータファイルのサイズを大きくできます。
- データファイルの自動拡張の有効化と無効化
データベースにより多くの領域が必要になるとデータファイルのサイズが自動的に増加するように、データファイルを作成または既存データファイルを変更できます。ファイル・サイズは、指定された単位ずつ、指定の最大サイズまで増加します。 - 手動によるデータファイルのサイズ変更
ALTER DATABASE
文を使用して、データファイルのサイズを手動で増減できます。
親トピック: データファイルおよび一時ファイルの管理
14.3.1 データファイルの自動拡張機能の使用可能および使用禁止
データファイルを作成するか、既存のデータファイルを変更して、データベースでより多くの領域が必要になった場合に自動的にサイズが増えるようにすることができます。ファイル・サイズは、指定された単位ずつ、指定の最大サイズまで増加します。
データファイルを自動的に拡張するように設定しておくと、次のような利点があります。
-
表領域で領域が足りなくなった場合に、管理者が即時に介入する必要性が減ります。
-
エクステントの割当て失敗が原因でアプリケーションが停止または一時停止することがなくなります。
自動ファイル拡張を指定するには、次のSQL文を使用してデータファイルを作成するときにAUTOEXTEND ON
句を指定します。
-
CREATE
DATABASE
-
ALTER
DATABASE
-
CREATE
TABLESPACE
-
ALTER
TABLESPACE
データファイルの自動拡張を有効または無効にするには:
-
データファイルが自動拡張可能であるかどうかを判断するには、
DBA_DATA_FILES
ビューの問合せを実行し、AUTOEXTENSIBLE
列を調べます。 -
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 データファイルの可用性の変更
データファイルのオフライン・バックアップやオフライン・データファイルの再配置などの特定のタスクを実行するには、データファイルの可用性を変更する必要があります。
- データファイルの可用性の変更について
個々のデータファイルまたは一時ファイルの可用性は、それらをオフラインまたはオンラインにすることにより、変更できます。オフラインのデータファイルはデータベースに使用できず、オンライン化されるまでアクセスできません。 - ARCHIVELOGモードでデータファイルをオンライン化またはオフライン化する方法
個々のデータファイルをオンラインまたはオフラインにするには、ALTER DATABASE
文を発行し、DATAFILE
句を含めます。 - NOARCHIVELOGモードでデータファイルをオフライン化する方法
データベースがNOARCHIVELOG
モードのときにデータファイルをオフラインにするには、DATAFILE
句およびOFFLINE
FOR
DROP
句の両方を含むALTER
DATABASE
文を使用します。 - 表領域内のすべてのデータファイルおよび一時ファイルの可用性の変更
ALTER TABLESPACE
文の句により、表領域内のすべてのデータファイルまたは一時ファイルのオンラインまたはオフライン状態を変更できます。
親トピック: データファイルおよび一時ファイルの管理
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 データファイルの名前変更と再配置
オンラインまたはオフライン・データファイルの名前を変更して、それらの名前や位置を変更できます。
- オンライン・データファイルの名前変更と再配置
オンラインのデータファイルを名前変更または再配置するために、ALTER DATABASE MOVE DATAFILE
SQL文を使用できます。この文を使用すると、データベースのオープン時にユーザーがデータファイルにアクセスしている際、データファイルを名前変更したり再配置できます。 - オフライン・データファイルの名前変更と再配置
オフラインのデータファイルを名前変更および再配置できます。
親トピック: データファイルおよび一時ファイルの管理
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
オプションを省略しても、元のデータファイルは古い場所に保持されます。この場合、文が正常に完了すると、データベースでは新しい場所のデータファイルのみが使用されます。操作が完了した後、必要に応じて古いデータファイルを手動で削除できます。
オンライン・データファイルを名前変更または再配置するには:
-
SQL*Plusで、
ALTER DATABASE
システム権限を持つユーザーとしてデータベースに接続します。「SQL*Plusを使用したデータベースの起動」を参照してください。
-
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を使用した方が高速です。
関連項目:
-
ALTER
DATABASE
文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: データファイルの名前変更と再配置
14.5.2 オフライン・データファイルの名前変更と再配置
オフライン・データファイルを名前変更および再配置できます。
オフライン・データファイルを名前変更および再配置すると、データベース制御ファイルに記録されている、データファイルへのポインタのみが変更されます。ファイルは物理的に名前が変更されず、オペレーティング・システム・レベルでコピーされません。
- 単一の表領域のオフライン・データファイルを名前変更および再配置する手順
単一の表領域のために使用できるオフラインのデータファイルを名前変更および再配置できます。これらの手順を実行するには、ALTER TABLESPACE
システム権限が必要です。 - 複数の表領域のオフライン・データファイルの名前変更と再配置
ALTER DATABASE RENAME FILE
文を使用して、1つ以上の表領域内のデータファイルを名前変更および再配置できます。
親トピック: データファイルの名前変更と再配置
14.5.2.1 単一の表領域のオフライン・データファイルを名前変更および再配置する手順
単一の表領域のために使用できるオフラインのデータファイルを名前変更および再配置できます。これらの手順を実行するには、ALTER TABLESPACE
システム権限が必要です。
- 単一の表領域のオフライン・データファイルの名前変更
単一の表領域内のオフライン・データファイルの名前を変更できます。 - 単一の表領域のオフライン・データファイルの再配置
単一の表領域内のオフライン・データファイルを再配置できます。
関連項目:
データファイルの名前変更または再配置の準備のための表領域のオフライン化の詳細は、「表領域のオフライン化」を参照してください
親トピック: オフライン・データファイルの名前変更と再配置
14.5.2.1.1 単一の表領域のオフライン・データファイルの名前変更
単一の表領域内のオフライン・データファイルの名前を変更できます。
単一の表領域のオフライン・データファイルの名前を変更するステップは、次のとおりです。
14.5.2.1.2 単一の表領域のオフライン・データファイルの再配置
単一の表領域内のオフライン・データファイルを再配置できます。
ここでは、オフライン・データファイルを再配置する手順の例を示します。
想定する条件は、次のとおりです。
-
オープンしているデータベースに
users
という表領域が存在し、すべて同じディスク上に配置されたデータファイルによって構成されています。 -
users
表領域のデータファイルを、別の分離されたディスク・ドライブに再配置します。 -
現在、オープンしているデータベースに管理者権限で接続しています。
-
データベースの現行のバックアップは取得済です。
ステップは次のとおりです。
14.5.2.2 複数の表領域のオフライン・データファイルの名前変更および再配置
1つ以上の表領域のデータファイルは、ALTER DATABASE RENAME FILE
文を使用して、名前変更および再配置できます。
1回の操作で複数の表領域のデータファイルを名前変更または再配置する方法は、これ以外にありません。この手順を実行するには、ALTER DATABASE
システム権限が必要です。
ノート:
SYSTEM
表領域、デフォルト一時表領域、またはアクティブなUNDO表領域のデータファイルを名前変更または再配置する場合、これらの表領域はオフライン化できないため、このALTER
DATABASE
文を使用する必要があります。
複数の表領域のデータファイルの名前を変更するステップは、次のとおりです。
親トピック: オフライン・データファイルの名前変更と再配置
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_CHECKSUM
をTYPICAL
(デフォルト)に設定します。
この設定は、DBWnプロセスおよびダイレクト・ローダーが各ブロックのチェックサムを計算し、ブロックをディスクに書き込むときにこのチェックサムをブロック・ヘッダーに格納します。
ブロックが読み込まれるときにチェックサムが検証されるのは、DB_BLOCK_CHECKSUM
がTRUE
に設定され、前回ブロックが書き込まれたときにチェックサムが格納されている場合のみです。破損が検出されると、メッセージORA-01578
が返され、破損に関する情報がアラート・ログに書き込まれます。
DB_BLOCK_CHECKSUM
パラメータの値は、ALTER SYSTEM
文で動的に変更できます。このパラメータの設定に関係なく、SYSTEM
表領域のデータ・ブロックは常にチェックサムを使用して検証されます。
関連項目:
DB_BLOCK_CHECKSUM
初期化パラメータの詳細は、『Oracle Databaseリファレンス』
親トピック: データファイルおよび一時ファイルの管理
14.8 データベース・サーバーを使用したファイルのコピー
データベース内でのファイルのコピー、またはデータベース間でのファイルの転送には、DBMS_FILE_TRANSFER
パッケージを使用できます。
- データベース・サーバーを使用したファイルのコピーについて
データベース内でのファイルのコピー、またはデータベース間でのファイルの転送では、トランスポータブル表領域機能を使用する場合のように、必ずしもオペレーティング・システムを使用する必要はありません。 - ローカル・ファイル・システム上のファイルのコピー
ローカル・ファイル・システム上のファイルをコピーするには、DBMS_FILE_TRANSFER
パッケージのCOPY_FILE
プロシージャを使用できます。 - サード・パーティのファイル転送
DBMS_FILE_TRANSFER
パッケージのプロシージャは、通常ではローカル・プロシージャ・コールとして起動されますが、リモート・プロシージャ・コールとして呼び出すこともできます。リモート・プロシージャ・コールとして起動すると、別のデータベースに接続している場合でも、データベース内のファイルをコピーできます。 - 拡張ファイル転送メカニズム
DBMS_FILE_TRANSFER
パッケージとDBMS_SCHEDULER
パッケージの両方を使用して、より高度なファイル転送メカニズムを作成できます。 - ファイル転送とDBMS_SCHEDULERパッケージ
単一データベース内およびデータベース間でファイルを自動的に転送するには、DBMS_SCHEDULER
パッケージを使用できます。
親トピック: データファイルおよび一時ファイルの管理
14.8.1 データベース・サーバーを使用したファイルのコピーについて
データベース内のファイルをコピーする場合、またはデータベース間でファイルを転送する場合(トランスポータブル表領域機能を使用して転送する場合など)は、必ずしもオペレーティング・システムを使用する必要はありません。
これらの処理は、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
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
親トピック: データベース・サーバーを使用したファイルのコピー
14.8.2 ファイルのローカル・ファイル・システムへのコピー
ローカル・ファイル・システム上のファイルをコピーするには、DBMS_FILE_TRANSFER
パッケージのCOPY_FILE
プロシージャを使用できます。
次の例では、DBMS_FILE_TRANSFER
パッケージのCOPY_FILE
プロシージャを使用してローカル・ファイル・システム上のファイルをコピーしています。この例では、/usr/admin/source
ディレクトリ内のdb1.dat
という名前のバイナリ・ファイルを、ローカル・ファイル・システムの/usr/admin/destination
ディレクトリにdb1_copy.dat
という名前でコピーします。
注意:
データベースによって変更されているファイルのコピーまたは転送に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_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 Cloud Controlを使用すると、この機能にさらに容易にアクセスできます。それによって提供される使いやすいグラフィカル・インタフェースを使用して、ファイルと物理デバイスをマップできます。詳細は、Cloud Controlのオンライン・ヘルプを参照してください。
- Oracle Databaseのファイル・マッピング・インタフェース
I/Oパフォーマンスを把握するには、ファイルが存在する記憶域の階層の詳細な知識を持っている必要があります。 - Oracle Databaseのファイル・マッピング・インタフェースの動作
Oracle Databaseファイル・マッピングには、次のコンポーネントが含まれます: FMONバックグラウンド・プロセス、FMPUTLプロセスおよびマッピング・ライブラリ。 - Oracle Databaseのファイル・マッピング・インタフェースの使用方法
Oracle Databaseのファイル・マッピング・インタフェースを使用してファイル・マッピングを有効にし、ビューのセットでファイル・マッピングに関する情報を取得できます。 - ファイル・マッピングの例
Oracle Databaseファイル・マッピング機能のいくつかの強力な機能の例を示します。
親トピック: データファイルおよび一時ファイルの管理
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プロセスおよびマッピング・ライブラリ。
- ファイル・マッピングの構成要素
ファイル・マッピング・メカニズムには、いくつかの構成要素が含まれます。 - マッピング構造
マッピング・ビューの情報を解釈するには、マッピング構造およびこれらの構造のOracle Database表現を理解する必要があります。 - マッピング構造の例
マッピング構造の例を示します。 - 構成ID
構成IDは、要素またはファイルに関連付けられたバージョン情報を取得します。
親トピック: ファイルと物理デバイスのマッピング
14.9.2.1 ファイル・マッピングの構成要素
ファイル・マッピング・メカニズムには、いくつかの構成要素が含まれます。
次の図は、ファイル・マッピング・メカニズムの構成要素を示しています。
ノート:
Oracle Database 12c以降では、FILE_MAPPING
初期化パラメータ、FMPUTL
プロセスおよびマッピング・ライブラリは非推奨となっています。
- FMON
FMONは、FILE_MAPPING
初期化パラメータがtrue
に設定されると、データベースによって開始されるバックグラウンド・プロセスです。FMONはマップ情報を構築し、変更が生じたときにマッピング情報を更新します。 - 外部プロセス(FMPUTL)
FMONは、ベンダーが提供するマッピング・ライブラリと直接通信するFMPUTL
と呼ばれる外部の非Oracle Databaseプロセスを生成します。 - マッピング・ライブラリ
Oracle Databaseは、特定のマッピング・ライブラリが所有する要素のマッピング情報を検出するためにマッピング・ライブラリを使用します。
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は、すべてのマッピング構造を示しています。
この図が示すマッピング構造は、Oracle Databaseインスタンスのマッピング情報全体を記述するには十分であり、ファイル内の各論理ブロックをI/Oスタック内の各レベルで1つ(またはミラー化の場合は1つ以上)の(要素名、要素オフセットの)タプルにマップしていることに注意してください。
14.9.3 Oracle Databaseのファイル・マッピング・インタフェースの使用方法
Oracle Databaseのファイル・マッピング・インタフェースを使用してファイル・マッピングを有効にし、ビューのセットにファイル・マッピングに関する情報を取得できます。
- ファイル・マッピングの有効化
ファイル・マッピングを有効にできます。 - DBMS_STORAGE_MAPパッケージの使用
DBMS_STORAGE_MAP
パッケージにより、マッピング操作を制御できます。 - ファイル・マッピング・ビューからの情報の取得
DBMS_STORAGE_MAP
パッケージによって生成されるマッピング情報は、動的パフォーマンス・ビューで取得されます。
親トピック: ファイルと物理デバイスのマッピング
14.9.3.2 DBMS_STORAGE_MAPパッケージの使用
DBMS_STORAGE_MAP
パッケージによってマッピング操作を制御できる。
次の表に、使用可能な各種プロシージャを示します。
プロシージャ | 用途: |
---|---|
|
オブジェクト名、所有者およびタイプで識別されるデータベース・オブジェクトのマッピング情報を作成します。 |
|
指定した要素のマッピング情報を作成します。 |
|
指定したファイル名のマッピング情報を作成します。 |
|
すべてのタイプのデータベース・ファイル(アーカイブ・ログ以外)のマッピング情報全体を作成します。 |
|
指定した要素のマッピング情報を削除します。 |
|
指定したファイル名のファイル・マッピング情報を削除します。 |
|
このインスタンスのSGAからすべてのマッピング情報を削除します。 |
|
マッピング全体の再生成に必要な情報をデータ・ディクショナリに保存します。 |
|
マッピング情報全体をデータ・ディクショナリからインスタンスの共有メモリーにロードします。 |
|
このインスタンスのSGA内でマッピング情報をロックします。 |
|
このインスタンスのSGA内でマッピング情報のロックを解除します。 |
関連項目:
-
DBMS_STORAGE_MAP
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』 -
DBMS_STORAGE_MAP
パッケージの使用例については、「ファイル・マッピングの例」
14.9.3.3 ファイル・マッピング・ビューからの情報の取得
DBMS_STORAGE_MAP
パッケージにより生成されたマッピング情報は、動的パフォーマンス・ビューで取得されます。
次の表に、これらのビューの概要を示します。
ビュー | 説明 |
---|---|
外部プロセスにより動的にロードされたすべてのマッピング・ライブラリのリストが含まれています。 |
|
インスタンスの共有メモリーにあるすべてのファイル・マッピング構造のリストが含まれています。 |
|
インスタンスの共有メモリーにあるすべてのファイル・システム・エクステントのマッピング構造のリストが含まれています。 |
|
インスタンスのSGAにあるすべての要素マッピング構造のリストが含まれています。 |
|
すべての要素マッピングの補足情報が含まれています。 |
|
インスタンスの共有メモリーにあるすべての副要素マッピング構造のリストが含まれています。 |
|
すべての要素マッピング構造の補足情報が含まれています。 |
|
ファイルの記憶域コンテナの階層配列が一連の行として表示されます。各行は1つの階層レベルを表します。 |
ただし、DBMS_STORAGE_MAP.MAP_OBJECT
プロシージャにより生成された情報は、グローバルな一時表MAP_OBJECT
に取得されます。この表には、オブジェクトの記憶域コンテナの階層配置が表示されます。この表の各行は、階層レベルを表します。MAP_OBJECT
表の内容は、次のとおりです。
列 | データ型 | 説明 |
---|---|---|
|
|
オブジェクト名 |
|
|
オブジェクトの所有者 |
|
|
オブジェクト・タイプ |
|
|
ファイルの索引( |
|
|
I/Oスタック内の要素の深さ |
|
|
要素に対応する索引。 |
|
|
要素上に連続して存在する、ファイルの論理ブロックの連続するセット(HKB単位)。 |
|
|
この要素上で連続しているファイル内の連続単位(CU)間のHKB数。RAID5ファイルとストライプ・ファイルに使用される。 |
|
|
この要素上で相互に隣接していて、ファイル内で |
|
|
要素オフセット(HKB単位) |
|
|
ファイルの先頭から連続単位の先頭バイトまでのオフセット(HKB単位) |
|
|
データ型( |
|
|
パリティの位置。RAID5の場合のみ。このフィールドはパリティとデータ部分を区別するために必要である。 |
|
|
パリティ間隔。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()
操作を実行する必要があることに注意してください。
- 例1: デバイス中にわたるすべてのデータベース・ファイルのマッピング
この例は、ホスト・デバイスに関連付けられたすべてのOracle Databaseファイルを返します。 - 例2: 対応するデバイスへのファイルのマッピング
この例は、データ・ファイルのトポロジ・グラフを表示します。 - 例3: データベース・オブジェクトのマッピング
この例は、表のI/Oスタック内の全レベルでのブロックの分散を表示します。
親トピック: ファイルと物理デバイスのマッピング
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 データファイルのデータ・ディクショナリ・ビュー
データ・ディクショナリ・ビューのセットは、データベースのデータファイルに関して役立つ情報を提供します。
ビュー | 説明 |
---|---|
属している表領域やファイルIDなど、各データファイルに関する記述情報が表示されます。ファイルIDを使用すると、他のビューと結合して詳細情報を得ることができます。 |
|
|
|
|
|
制御ファイル内のデータファイル情報が含まれます。 |
|
データファイル・ヘッダーからの情報が含まれます。 |
ここでは、これらのビューの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 (システム変更番号)がリストされます。
親トピック: データファイルおよび一時ファイルの管理