DB/Oracle/コマンド/表領域管理

Top / DB / Oracle / コマンド / 表領域管理

目次

表領域に関する情報。


表領域の作成

表領域を新しく作る。

方法

  1. 表領域を作成する
    -- 基本のコマンド
    create tablespace <tablespace-name>
      datafile '/path/to/datafile.dbf'
      size <size>
    
    -- 以下はオプションで指定可能
      autoextend on next <size> maxsize <size>
      blocksize <size>
      extent management local [ autoallocate | uniform size <size> ]
      segment space management [ manual | auto ]
    ;
    
    • オプションは以下
      オプション説明
      tablespace <tablespace-name>表領域名
      datafile '/path/to/datafile.dbf'表領域で使用するデータファイル
      size <size>表領域のサイズ
      autoextend on
      next <size>
      maxsize <size>
      表領域の自動拡張を有効にする。NEXT で不足時に追加する容量、MAXSIZE で最大サイズを指定
      blocksize <size>ブロックサイズ
      extent management local
      [ autoallocate | uniform size <size> ]
      エクステント管理をローカルに。エクステントのサイズを autoallocate で自動に、uniform size で均一に指定
      segment space management
      [ manual | auto ]
      セグメントの空き領域の管理を自動か手動か。PCTFREE とか FREELIST とかそこらへんの話
  • いまではもう使わないオプションは以下。もはや下位互換のために残っているだけ
    オプション説明
    minimum extentエクステントの最小サイズ
    default storage内部に作られるオブジェクトに対する記憶領域のパラメータ
    permanent永続表領域にする(デフォルト)
    temporary一時オブジェクトの格納用に作成。ディクショナリ管理になる

一時表領域の作成

一時表領域の作成。ソート処理などで使われる。

通常、サーバプロセスの PGA にソート領域があり、ソートはそこで行われるが、領域が足りない場合は一時表領域に一時セグメントを作成、中間データを格納するなどして対応する。

管理者が一時表領域内に明示的に表を作成することはない。サーバプロセスなどが必要に応じて勝手に使うだけ。

方法

  1. 一時表領域の作成
    create temporary tablespace <tablespace-name>
      tempfile '/path/to/tempfile.dbf'
      size <size>;
    
  2. ユーザへの割り当て
    -- create user 文のオプションとして指定する
    create user <user-name> identified by <password>
      ...
      temporary tablespace <tablespace-name>...
      ...;
    

UNDO 表領域の作成

UNDO 表領域をつくる。基本的な構文は表領域の作成と同じ。

方法

  1. UNDO 表領域を作成する
    create undo tablespace <tablespace-name>
      datafile '/path/to/undofile.dbf'
      size <size>
      autoextend on next <size> maximum <size>;
    

補足

  • autoextend on を推奨。UNDO セグメントがいっぱいになると DB に対する更新処理ができなくなる

表領域の削除

表領域を消しちゃう。

方法

  1. 表領域を削除する
    -- 基本の文
    drop tablespace <tablespace-name>
    
    -- 以下はオプションで指定可能
      including contents
      and datafiles
    ;
    
    • オプションは以下
      オプション説明
      including contents表の中にセグメントが存在する場合はこれがないとエラーが出る。中身ごと消すよ、の意味
      and datafiles表領域の実体であるデータファイルごと削除するよ、の意味。指定しなければデータファイルは残る

既存のデータファイルを再利用して表領域を作る

既にあるデータファイルを再利用する。中のデータは消える。消える…… 消えちゃう……。

中身は消えるので表領域の移行には使えない。移行をするなら Data Pump などでエクスポート / インポートする。

方法

  1. データファイルを再利用して表領域を作成する
    create tablespace <tablespace-name>
      datafile '/path/to/datafile.dbf'
      size <size>
      reuse;
    
    • その他のオプションは再指定可能

表領域のサイズを拡張

パタンがいくつかある。

  • 表領域にデータファイルを追加する
  • 表領域に属する既存のデータファイルのサイズを拡張する
    • 自動で拡張する
    • 手動で拡張する

方法

  1. 表領域を拡張する
    -- 新しいデータファイルを既存の表領域に追加する
    alter tablespace <tablespace-name>
      add datafile '/path/to/datafile.dbf'
      size <size>;
    
    -- 既存のデータファイルのサイズを自動で拡張する
    alter database <database-name>
      datafile '/path/to/datafile.dbf'
      autoextend on next <size> maxsize <size>;
    
    -- 既存のデータファイルのサイズを手動で拡張する
    alter database <database-name>
      datafile '/path/to/datafile.dbf'
      resize <size>;
    

補足

  • 新しいデータファイルの追加時も autoextend などオプションは指定可能

表領域のオンラインとオフラインの変更

表領域をオンラインにしたりオフラインにしたりする。

方法

  1. 表領域のオンラインとオフラインを切り替える
    -- オフラインにする
    alter tablespace <tablespace-name> offline;
    
    -- オンラインにする
    alter tablespace <tablespace-name> online;
    

補足

  • オフラインにしたとき、その表領域に属するデータファイルにチェックポイントが発生する。使用済バッファを全てデータファイルに書き出し、ヘッダにチェックポイント情報(その時点で最新の SCN)を書き込んでからファイルをクローズする

表領域の読み書き許可を変更する

表領域を読み取り専用(書き込み禁止)にしたり、読み書き可能にしたりする。

方法

  1. 表領域の読み書き許可を変更する
    -- 表領域を読み取り専用にする
    alter tablespace <tablespace-name> read only;
    
    -- 表領域を書き込み許可にする
    alter tablespace <tablespace-name> read write;
    

補足

  • 読み書き許可を変更するとその表領域に属するデータファイルにチェックポイントが発生する。CKPT はその時点で最新の SCN をデータファイルのヘッダに書き込む

データファイルの移動

通常のデータファイルを別の場所に移動(またはリネーム)する。オフラインにできる表領域限定。オフラインにできない表領域は、一度シャットダウンしてから移動させる方法(オフラインにできない表領域のデータファイルの移動)を取る必要がある。

方法

  1. 表領域をオフラインにする
    alter tablespace <tablespace-name> offline;
    
  2. データファイルを移動する
    mv /path/to/datafile.dbf /new/path/to/newdatafile.dbf
    
  3. データファイルの移動を登録する
    alter tablespace <tablespace-name>
      rename datafile '/path/to/datafile.dbf' to '/new/path/to/newdatafile.dbf';
    
  4. 表領域をオンラインにする
    alter tablespace <tablespace-name> online;
    

補足

  • 表領域をオフラインにすると、それに属するデータファイルもオフラインになる

オフラインにできない表領域のデータファイルの移動

表領域がオフラインにできず、前述の方法では対応できない場合はこちらの方法を取る。例えば SYSTEM 表領域や UNDO 表領域。

方法

  1. データベースをシャットダウンする
    shutdown immediate;
    
  2. データファイルを移動する
    mv /path/to/datafile.dbf /new/path/to/newdatafile.dbf
    
  3. データベースをマウント状態で起動する
    startup mount
    
  4. データファイルの移動を登録する
    alter database <database-name>
      rename file '/path/to/datafile.dbf' to '/new/path/to/newdatafile.dbf';
    
  5. データベースをオープンする
    alter database open;
    

補足

  • 移動の登録のコマンド(ALTER ... RENAME ...)が前述の方法とは若干違うので注意。ALTER TABLESPACE ではなく ALTER DATABASE だし、RENAME DATAFILE ではなく RENAME FILE。ややこしい

UNDO 表領域の切り替え

UNDO 表領域として別の表領域を使うように切り替える。

方法

  1. UNDO 表領域を切り替える
    alter system set undo_tablespace = <tablespace-name>;
    

表領域の情報の確認

通常の表領域の情報の確認

表領域関係の情報は以下のビューから確認できる。

  • dba_tablespaces
  • dba_data_files
  • v$tablespace
  • v$datafile

表領域内の表オブジェクトやセグメント、エクステントの情報は以下から。

  • dba_tables
    • table_name, initial_extent, min_extents, owner, tablespace_name など
    • 表として必要な情報。例えば initial_extent は『必要な初期エクステントサイズ』であって、実際に割り当てられている初期エクステントサイズとは異なる可能性がある
  • dba_segments
    • owner, segment_name, bytes, extents, initial_extents, min_extents など
  • dba_extents
    • owner, segment_name, tablespace_name, file_id, extent_id, bytes など
  • dba_rollback_segs

UNDO 表領域に関する情報の確認

UNDO に関する情報は以下の初期化パラメータで確認できる。

  • undo_management
    • 自動 UNDO 管理の設定
  • undo_retention
    • UNDO 情報の保持時間
    • これに加えて永続表領域に対する retention guarantee によって保存を保証できる
  • undo_tablespace
    • 使用している UNDO 表領域

Last-modified: 2011-11-02 (水) 11:13:49 (2270d)