4
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Oracleのデータファイルの追加

Posted at

oracleのデータファイルを追加する

データファイルを追加する前に、事前調査を行います。
現在の設定や空き容量、oracleのブロックサイズなどを確認すると良いです。

###データファイルを追加したい表領域を確認する
テーブルは全て何かの表領域に属しています。
自分で作ったテーブルであれば、それはUSERSの表領域に属しているかもしれません。

データファイルを追加しようとしている表領域を確認してください。
表領域にはSYSTEM, TEMP, USERSなどがあります。

表領域とは?についてはOracleの表領域の管理などを参照すると良いと思います。

###参照するスキーマ

  • データファイルの設定を確認するには、DBA_DATA_FILESを参照します。
select * from DBA_DATA_FILES;
  • データファイルの空き容量の確認は、DBA_FREE_SPACEを参照します。
select * from DBA_FREE_SPACE;
  • oracleのブロックサイズの確認は、DBA_TABLESPACESを参照します。
select * from DBA_TABLESPACES;

###現在の設定を確認する

使用するクエリは、Oracleで表領域のサイズと使用量をSQLで確認する方法や、表領域の使用率をグラフィカルに表示しますを参考にすると良いと思います。

下のような情報のサマリを表示できます。

FILE_NAME FILE_ID TABLE_SPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUTOEXTENSIBLE MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_STATUS
/oradata/users01.dbf 4 USERS 461373440 56320 AVAILABLE 4 YES 34359721984 4194302 1280 461307904 56312 ONLINE

###increment_by列から増分を求める
このうち、increment_by列の情報はブロック数なので、実際のバイト数を知りたい場合は、oracleのブロック数を確認します。

select * from DBA_TABLESPACES;
TABLESPACE_NAME BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT
USERS 8192 65536 (null)

BLOCK_SIZE列がブロックサイズなので、データファイルを追加したい表領域のブロックサイズを確認します。
ここでは8,192です。

increment_byが1,280だった場合は、以下のように計算できます。

1,280 x 8,192 = 10,485,760 = 10M

###データファイルを追加する
oracleにデータファイルを追加する時は、ALTER TABLESPACE ADDを使用します。

USERS表領域に、/oradata/users02.dbf(フルパス指定)ファイルで、初期サイズが128M、自動拡張で増分サイズが64M、最大32Gで追加したい場合は以下のようになります。

ALTER TABLESPACE USERS
 ADD DATAFILE '/oradata/users02.dbf' SIZE 128M
 AUTOEXTEND ON NEXT 64M MAXSIZE 32767M;

データファイルを追加した後は、追加されたことを再度確認しておきましょう。

select * from DBA_DATA_FILES;

###データファイルを削除する
データファイルを間違って作ってしまった場合、データファイルがまだ空であれば削除できます。
削除する場合はALTER TABLESPACE DROPを使用します。

ALTER TABLESPACE USERS
 DROP DATAFILE '/oradata/users02.dbf';

###ALTER TABLESPACE ADDのメガバイト指定の理由

データファイルを作成する際に以下のように、MAXSIZEにメガバイトを使用しました。

ALTER TABLESPACE USERS
 ADD DATAFILE '/oradata/users02.dbf' SIZE 128M
 AUTOEXTEND ON NEXT 64M MAXSIZE 32767M;

32,767Mの指定を、ギガバイト指定(32G)で置き換えることは一応可能ですが、
データファイルをsmallfileで作成している場合は、32Gと指定すると、以下のようなエラーが発生します。

SQLエラー: ORA-03206: AUTOEXTEND句で(4194304)ブロックの最大ファイル・サイズが範囲外です。
03206. 00000 -  "maximum file size of (%s) blocks in AUTOEXTEND clause is out of range"
*Cause:    The maximum file size for an autoextendable file has
           exceeded the maximum number of blocks allowed.
*Action:   Reduce the size and retry.

これはoracleのsmallfileのデータ形式の限界です。
従って、32Gのメガバイト 32768M - 1M = 32767M を最大サイズに指定します。
この方法はHow to fix ORA-03206に掲載されています。

Oracleのデータファイル形式の、smallfile/bigfileについてはOracleリファレンス
を参照してください。

4
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?