7章 データベース記憶域構造
では本章では表領域について学んでいきたいと思います。
アプリケーションで使用するテーブルを格納できるよう表領域を
作成する方法を学んでいきましょう。
事前定義の表領域
まずはじめに事前定義の表領域について確認してきましょう。
Oracleデータベースを作成すると最初に以下の表領域が作成されます。
| SYSTEM表領域 | データベース管理情報を格納。 データディクショナリの情報も格納
 | 
| SYSAUX表領域 | SYSTEM表領域の補助表領域 | 
| UNDO表領域 | UNDOデータを格納する領域 | 
| TEMP表領域 | 一時データを格納する領域 
 | 
SYSTEM,SYSAUX表領域はデータベースの管理情報が格納される領域です。
データディクショナリはSYSTEM表領域に格納されており、
SYSユーザが所有しています。SYSユーザとはデータベースの管理者ユーザです。
UNDO表領域はROLLBACKなどに使用されるUNDOデータを格納します。
TEMP表領域はメモリで処理できない場合の一時データを格納します。
例えば、ORDER BY句でデータソートが行われる場合、
メモリで処理しようとしますが、メモリ内で処理できない場合、
一時表領域を使用します。一時データはその処理が終了するとすぐ解放されます。
次に表領域にはタイプがあります。
| 永続 | 表や索引などのオブジェクトを格納 | 
| UNDO | SYSTEM表領域の補助表領域 | 
| 一時 | 一時データを格納 | 
表領域の作成
では表領域作成の構文を確認していきましょう。
  [構文] 表領域の作成
 CREATE TABLESPACE 表領域名
 [ BIGFILE | SMALLFILE ] 
 DATAFILE データファイル名 SIZE サイズ
 [ AUTOEXTEND OFF | ON ]
 [ NEXT サイズ [ MAXSIZE UNLIMITED | サイズ ]
 [ EXTENT MANAGEMENT LOCAL | DICTIONARY ]
 [ SEGMENT SPACE MANAGEMENT MANUAL | AUTO ];
SMALLFILE表領域
SMALLキーワードは最大32GB(データブロックが8KBの場合)の
データファイルを構成する表領域を作成できます。
SMALLFILEの場合、複数のデータファイルを構成できるのが特徴です。
デフォルトはSMALLFILEです。
BIGFILE表領域
BIGFILEは最大32TB(データブロックが8KBの場合)の
データファイルを構成する表領域を作成できます。
BIGFILEの場合、1つのデータファイルだけ持つことができます。
AUTOEXTEND OFF | ON
データファイルの使用量が指定したサイズまで達した場合、
データファイルを拡張するかどうかの設定です。
ONにした場合は、自動拡張が行われます。
デフォルトはOFFです。
NEXT サイズ | ON
自動拡張が有効な場合の増分値を設定します。
MAXSIZE UNLIMITED | サイズ
自動拡張が有効な場合の最大拡張可能サイズを指定します。
UNLIMITEDの場合、制限なしに拡張します。
EXTENT MANAGEMENT LOCAL | DICTIONARY
表領域の空き領域の管理方法を指定します。
現在の推奨はローカル管理です。
ディクショナリ管理は下位互換性(旧バージョン)のため残されています。
デフォルトはローカル管理です。
 
SEGMENT SPACE MANAGEMENT MANUAL | AUTO
データブロックの空き領域の管理方法を指定します。
現在の推奨は自動セグメント管理です。
手動の場合、空きリストと呼ばれる領域を使用し、空きブロックを管理します。
手動の場合、ビットマップを使用します。
自動セグメント管理の方が効率的な方法で空きブロックを管理できます。
デフォルトは自動セグメント領域管理です。
実行例を見ていきましょう。
  SQL> CREATE TABLESPACE TEST1 DATAFILE
    2  '/u01/app/oracle/oradata/orcl/test.dbf' SIZE 10M;
  Tablespace created.
 
上記はTEST1という表領域を10MBのサイズで作成します。
  SQL> CREATE TABLESPACE TEST2 DATAFILE
    2  '/u01/app/oracle/oradata/orcl/test01.dbf' SIZE 10M,
    3  '/u01/app/oracle/oradata/orcl/test02.dbf' SIZE 10M,
    4  '/u01/app/oracle/oradata/orcl/test03.dbf' SIZE 10M;
  Tablespace created.
 
上記はTEST2という表領域を3つのデータファイルで
合計30MBのサイズで作成します。
  SQL> CREATE TABLESPACE TEST3 DATAFILE 
    2> '/u01/app/oracle/oradata/orcl/test3.dbf'
    3> SIZE 10M AUTOEXTEND ON NEXT 10K MAXSIZE 100M;
  Tablespace created.
  
上記は自動拡張を有効にし、増分値10KB、最大拡張可能なサイズが
100MBのデータファイルをもつTEST3表領域を作成します。
表領域の作成のオプションは上記以外のパラメータもあります。
その他のパラメータも確認したい場合はマニュアルを参照ください。
表領域、データファイルに関するデータディクショナリ
作成された表領域やデータファイルの情報を確認する場合は、
以下のデータディクショナリを使用します。
| DBA_TABLESPACES | 表領域の情報 | 
| DBA_DATA_FILES | データファイルの情報 | 
  SQL> select tablespace_name,file_name,bytes/1024/1024 "MB",
    2  autoextensible from dba_data_files;
  TABLESPAC FILE_NAME                                       MB AUT
  --------- --------------------------------------------- ---- ---
  SYSTEM    /u01/app/oracle/oradata/orcl/system01.dbf      800 YES
  SYSAUX    /u01/app/oracle/oradata/orcl/sysaux01.dbf      720 YES
  UNDOTBS1  /u01/app/oracle/oradata/orcl/undotbs01.dbf     175 YES
  USERS     /u01/app/oracle/oradata/orcl/users01.dbf         5 YES
  TEST1     /u01/app/oracle/oradata/orcl/test.dbf           10 NO
  TEST2     /u01/app/oracle/oradata/orcl/test03.dbf         10 NO
  TEST2     /u01/app/oracle/oradata/orcl/test02.dbf         10 NO
  TEST2     /u01/app/oracle/oradata/orcl/test01.dbf         10 NO
  TEST3     /u01/app/oracle/oradata/orcl/test3.dbf          10 YES
  SQL> select tablespace_name,next_extent,bigfile 
    2  from dba_tablespaces;
  TABLESPAC NEXT_EXTENT BIG
  --------- ----------- ---
  SYSTEM                NO
  SYSAUX                NO
  UNDOTBS1              NO
  TEMP          1048576 NO
  USERS                 NO
  TEST1                 NO
  TEST2                 NO
  TEST3                 NO
  
DBA_TABLESPACES,DBA_DATA_FILESの詳細は、
「Oracle Databaseリファレンス 12cリリース1 (12.1)」
を参照ください。
表領域の削除
表領域を削除する場合は、DROP TABLESPACES文を実施します。
 SQL> drop tablespace test including contents and datafiles;
 Tablespace dropped.
 
including contents and datafilesは表領域の削除時に
OS上に作成されていたデータファイルも併せて削除します。
省略した場合は、表領域は削除されますが、データファイルは削除されません。