alter database move datafile

過去バージョンでは、DB 稼働中にデータファイル移動をする場合、
オフライン/オンライン化や OS コマンドでのコピーが必要だったが、
Oracle12c より、オンライン状態のまま移動が可能となった。



Oracle11g 以前

  • 表領域をオフライン化: alter tablespace 表領域名 offline;
  • os コマンドでデータファイル(dbf)を移動先にコピー
  • データファイル(dbf)のパスを移動先に変更: alter database rename file コマンド
  • 表領域をオンライン化: alter tablespace 表領域名 online;
  • Oracle12c

  • alter database move datafile コマンドのみ
  • オンライン状態のまま 1コマンドで完結出来るとあって、とても便利になった。
    open だけでなく、mount 状態でも可能。ASM でディスクグループ間の移動も出来る。
    データファイルの扱いについてはオプションが用意されている。

    move datafile オプション

  • keep
  • 移動元のデータファイルを保持したまま(つまりコピーされる)

  • reuse
  • 移動先にデータファイルが存在すれば上書きする(移動する)

    デフォルトでは、keep、reuse ともに有効にならないため、
    移動先に同名ファイルがあればエラーになる。

    なにか問題が発生してリトライする場合を除き、予めコピーしておくことは
    しないと思うので、通常はオプション不要という認識。

    SQLコマンド

    alter database move datafile
    ‘移動元パス/hoge.dbf’ to ‘移動先パス/hoge.dbf’ { keep | reuse };

    以下の条件では、move datafile コマンドが実行できずエラーとなるので注意。
    ・オフラインのデータファイルである場合
    ・フラッシュバックデータベースの実行中である場合

    ORA-00439 が発生する場合

    「ORA-00439: 機能は有効ではありません: online move datafile」
    Enterprise Edition 限定の新コマンドのため、エディション確認を。
    Standard Edition で実行した場合は、ORA-00439 が発生する。