TOP表領域とデータファイルの管理 > データファイルの管理

データファイルの管理


データ・ファイルの管理

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

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

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

データ・ファイルの改名および再配置

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

データ・ファイルの情報の表示


データ・ファイルの管理

データ・ファイルとは、表領域を構成する物理的なファイル(*.dbf)である。表領域は1つ以上のデータ・ファイルから構成され、データベースは最低1つ以上の表領域から構成される。
一般に、小さいデータ・ファイルを多数作成するよりも、大きいデータ・ファイルを少数のみ作成し、同時にオープンする必要のあるファイルを少なくすることが望ましい。

すべてのデータ・ファイルには、絶対ファイル番号と相対ファイル番号という2 つのファイル番号が対応付けられている。

絶対ファイル番号
データベース内のデータ・ファイルを固有に識別する。
Oracle の旧リリースでは、絶対ファイル番号を単に「ファイル番号」と読んでいる場合がある。

相対ファイル番号
データ・ファイルを表領域内で固有に識別する。
多くの場合、小規模および中規模のサイズのデータベースでは、相対ファイル番号と絶対ファイル番号は同じだが、、データベース内のデータ・ファイル数が一定の値(通常は1023 )を超えると、相対ファイル番号と絶対ファイル番号が違ってくる。
相対ファイル番号は、多くのデータ・ディクショナリ・ビューで使用される。


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

データファイルの数やサイズは、表領域の作成時に、データベース・オブジェクトの潜在的なサイズを見積もってるのが理想的であるが、必要であればデータ・ファイルを作成して表領域に追加することが出来る。

データ・ファイルを追加するには、ALTER TABLESPACE...ADD DATAFILE 文を使用する。
これにはALTER TABLESPACE システム権限が必要。

例)RB_SEGS 表領域に新しい1Mのデータ・ファイル(/u02/oracle/rbdb1/rb_segs03.dbf)を作成し、追加する。

ALTER TABLESPACE rb_segs
ADD DATAFILE '/u02/oracle/rbdb1/rb_segs03.dbf' SIZE 1M;


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

データ・ファイルの自動拡張機能

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


データ・ファイルの自動拡張機能

自動拡張機能を設定しておくと、データベースの領域がさらに必要になった場合、自動的にサイズを大きくするようにデータ・ファイルを作成したり、既存のデータ・ファイルを変更したりする。
ファイルのサイズは、指定されている最大値に達するまで、指定の増分値で大きくなる。
データ・ファイルが自動的に拡張できるかどうかを知るには、DBA_DATA_FILES ビューに問合せ、AUTOEXTENSIBLE 列を調べる。

メリット
 ・表領域で領域が足りなくなった場合に即時中断をする必要性が減る。
 ・エクステントの割当て失敗が原因でアプリケーションが停止することがなくなる。

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

例)USERS 表領域に追加されたデータ・ファイルの自動拡張機能を有効にする。

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

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

既存のデータ・ファイルの自動ファイル拡張機能を使用可能または使用禁止にしたり、データ・ファイルのサイズを手動で変更するには、SQL 文ALTER DATABASE を使用。

例)データ・ファイルの自動拡張機能を無効にする。

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


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

手動でデータ・ファイルのサイズを増減させるには、ALTER DATABASE 文を使用する。
データベース内のデータ・ファイルが、許容されている最大数に達することが懸念される場合などにこのコマンドが有効となる。
データ・ファイルのサイズを変更できるため、データ・ファイルをさらに追加しなくてもデータベースに領域を追加できる。

また、データ・ファイルのサイズを手動で小さくして、データベース内の未使用の領域の再生もできる。
必要な領域の容量見積りの誤りを訂正する場合などに有効。

例)データ・ファイル/u02/oracle/rbdb1/stuff01.dbf のサイズを100Mに変更する。

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


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

データ・ファイルへの書込みに問題がある場合など、非常にまれな状況において、特定のデータ・ファイルをオンラインにしたり、オフラインにする必要がある。
このような場合、メディア・リカバリの前に、破損したデータ・ファイルを手動でオンライン化したり、オフライン化することがある。

注意:表領域をオフライン化することによって、表領域内のすべてのデータ・ファイル(SYSTEM 表領域内のファイル以外)を一時的に使用不能にすることができる。
表領域をオンラインに戻すために、表領域内のファイルはそのままにしておく必要がある。

オフライン・データ・ファイルにはアクセスできない。
読取り専用表領域のデータ・ファイルをオンライン化すると、そのデータ・ファイルは読取り可能になる。
このファイルに対応付けられた表領域が読取り/書込み可能な状態に戻らない限り、このファイルには書き込めない。

読取り専用表領域のファイルを個別にオンライン化またはオフライン化するには、ALTER DATABASE 文のDATAFILE オプションを使用。ALTER DATABASE システム権限が必要。
データベースが排他モードでオープンされている場合に限り、これらの操作を実行できる。

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

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


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

個々のデータ・ファイルをオンライン化するには、DATAFILE 句を指定してALTER DATABASE 文を発行。

例)指定したデータ・ファイルをオンライン化。

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

例)上記のファイルをオフライン化。

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

注意: ONLINE、OFFLINEオプションを使用するには、データベースをARCHIVELOG モードにする。一方、NOARCHIVELOG モードでデータ・ファイルをオフライン化するとファイルが失われる可能性がある。つまり、ARCHIVELOG モードで、データ・ファイルの不慮の損失を防止できる。


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

データベースがNOARCHIVELOG モードのときにデータ・ファイルをオフライン化するには、DATAFILE およびOFFLINE DROP 句を指定してALTER DATABASE 文を使用する。
これによって、ただちにデータ・ファイルをオフライン化し、削除できる。
たとえば、データベースはNOARCHIVELOG モードで運用されていて、データ・ファイルが、一時セグメントからのデータのみを含み、バックアップされていない場合に便利。

例)指定したデータ・ファイルをオフライン化。

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


データ・ファイルの改名および再配置

単一の表領域のデータ・ファイルの改名および再配置

複数の表領域のデータ・ファイルの改名および再配置


単一の表領域のデータ・ファイルの改名および再配置

単一の表領域のデータ・ファイルを改名する手順

  1. データ・ファイルを含むSYSTEM 表領域以外の表領域をオフライン化。
  2. オペレーティング・システムの文を使用してデータ・ファイルを改名。
  3. 指定された絶対パスによる新ファイル名が、古いファイル名と異なることを確認。
  4. ALTER TABLESPACE 文にRENAME DATAFILE オプションを指定して、データベース内のファイル名を変更。

例)データ・ファイル filename1 およびfilename2 を、それぞれfilename3 およびfilename4 にそれぞれ改名する。

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 ビューに表示されるとおり、正確に指定する必要がある。

例)単一の表領域のデータ・ファイルの改名および再配置

<想定する条件>

<再配置する手順>

1.対象のデータ・ファイル名を確認
次のようにデータ・ディクショナリ・ビューDBA_DATA_FILES を問い合せると、USERS 表領域のデータ・ファイル名とそれぞれのサイズ(バイト単位)が記述される。

SELECT file_name, bytes FROM sys.dba_data_files
WHERE tablespace_name = 'USERS';

FILE_NAME                                                            BYTES
------------------------------------------ ----------------
/U02/ORACLE/RBDB1/USERS01.DBF                                 102400000
/U02/ORACLE/RBDB1/USERS02.DBF                                 102400000

2.データベースのバックアップを作成
1 つ以上の表領域のデータ・ファイルを改名、再配置するなど、データベースに対する構造上の変更を実行する前に、なんらかの問題が発生するのに備えて、データベースを完全にバックアップしておくことが非常に重要。

3.データ・ファイルが入っている表領域をオフライン化するか、またはデータベースを停止してから再起動し、マウントしてクローズしたままにする
どちらの場合でも、表領域のデータ・ファイルはクローズされる。

4.オペレーティング・システム・コマンドを使用し、データ・ファイルを新しい位置にコピーして改名

注意:オペレーティング・システムのHOST コマンドを実行すると、ファイルをコピーできる。

5. Oracle 内のデータ・ファイルを改名する
USERS 表領域を構成するファイルに対するデータ・ファイル・ポインタは、対応付けられているデータベースの制御ファイルに記録されているが、これらのポインタをこの時点で旧ファイル名から新ファイル名に変更する必要がある。
表領域がオフラインになっていても、データベースがオープンしている場合は、ALTERTABLESPACE...RENAME DATAFILE 文を使用。
データベースがマウントされているがクローズしている場合は、ALTER DATABASE...RENAME FILE 文を使用。

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';

6.表領域をオンライン化するか、データベースを停止してから、再起動
USERS 表領域がオフラインで、データベースがオープンしている場合、表領域をオンラインに戻す。
データベースがマウントされたがクローズしている場合は、データベースをオープンにする。

7.データベースのバックアップを作成
データベースの構造を変更した後は、データベースの即時完全バックアップを実行。


複数の表領域のデータ・ファイルの改名および再配置

1つ以上の表領域のデータ・ファイルは、RENAME FILE オプションを指定したALTER DATABASE 文を使用して、改名、再配置する。1回の操作で、複数の表領域のデータ・ファイルを改名、再配置する場合、またはSYSTEM 表領域のデータ・ファイルを改名、再配置する場合、このオプションを使用する以外に方法はない。
データベースをオープンしておく必要がある場合は、前項で説明した手順を参照。
1回の操作で、複数の表領域のデータ・ファイルを改名する、またはSYSTEM 表領域のデータ・ファイルを改名するには、ALTER DATABASE システム権限が必要。

複数の表領域のデータ・ファイルを改名する手順

  1. データベースがマウントされ、クローズされていることを確認。
  2. オペレーティング・システム・コマンドで新しい位置と名前を指定して、改名するデータ・ファイルをコピー。
  3. 新しくコピーしたデータ・ファイル名が、現在使用しているデータ・ファイルとは異なり、絶対パスによる指定のファイル名になっていることを確認。
  4. ALTER DATABASE を使用して、データベースの制御ファイル内のファイル・ポインタを改名。

例)データ・ファイル filename1 およびfilename2 を、それぞれfilename3 およびfilename4 にそれぞれ改名。

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 ビューに表示されるとおり、正確に指定する必要がある。


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

チェックサムを使用してデータ・ブロックを検証するようにOracle を構成する場合は、初期化パラメータDB_BLOCK_CHECKSUM をTRUE に設定する(デフォルト値はFALSE)。
このパラメータ値は、動的に変更するか、または初期化パラメータ・ファイルに設定する。

警告: DB_BLOCK_CHECKSUM をTRUE に設定すると、パフォーマンスのオーバーヘッドが発生することがある。
このパラメータをTRUEに設定するのは、データ破損の問題を診断するためにオラクル社カスタマ・サポート・センターの指示があった場合のみ。

このパラメータの設定に関係なく、システム表領域のデータ・ブロックは常にチェックサムを使用して検証される。
ブロックのチェックを使用可能にすると、Oracle がディスクに書き込まれる各ブロックのチェックサムを計算する。
チェックサムは一時ブロックを含むすべてのデータ・ブロックについて計算される。

DBWn プロセスは各ブロックのチェックサムを計算して、ブロック・ヘッダーにこのチェックサムを格納する。
チェックサムはダイレクト・ローダによっても計算される。

Oracle は次にデータ・ブロックを読み込むときに、ブロックの破損を検出するためにチェックサムを使用する。
破損が検出されると、メッセージORA-01578 が戻され、破損に関する情報がトレース・ファイルに書き込まれる。


データ・ファイルの情報の表示

DBA_DATA_FILES 属している表領域やファイルID など、データ・ファイルに関する記述情報を表示。
ファイルID を使用すると、他のビューと結合して詳細情報を得ることができる。
USER_EXTENTS 
DBA_EXTENTS
データベース内のすべてのセグメントを構成するエクステントを表示。
エクステントを含むデータ・ファイルのファイルID が含まれる。
USER_FREE_SPACE
DBA_FREE_SPACE
すべての表領域の使用可能エクステントを表示。
エクステントを含むデータ・ファイルのファイルID が含まれる。
V$DATAFILE 制御ファイルからのデータ・ファイル情報が含まれまる。
V$DATAFILE_HEADER データ・ファイル・ヘッダーからの情報が含まれる。

例)データベースのデータ・ファイルに関する状態情報をV$DATAFILE を使用して問い合わせる

想定条件
データベースには、2 つの表領域SYSTEM とUSERS が含まれている。
USERS は2つのファイル、FILE1 (100MB )とFILE2 (200MB )から構成される。
表領域は通常のオフライン状態になっている。

SELECT name,
file#,status,
checkpoint_change# "CHECKPOINT"
FROM v$datafile;

NAME                                                 FILE# STATUS CHECKPOINT
-------------------------------- ----- ------- ----------
filename1                                                   1 SYSTEM             3839
filename2                                                   2 OFFLINE             3782
filename3                                                   3 OFFLINE             3782

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


TOP表領域とデータファイルの管理 > データファイルの管理

2001/07/20 担当:R.S