OracleDB

[Oracle] オンライン中のデータファイル移動の方法”alter database move datafile”を紹介

こんにちは!土門大貴(daikidomon)です。

オンライン状態のデータファイルを移動する方法を紹介します。

データファイルのサイズが大きくなりすぎたので別の領域に退避したい」や

誤って違う領域にデータファイルを作成してしまった」時に大変便利なコマンドになります。」

なおこの機能はOracle Database 12c以降で使用できるコマンドなので注意してください。

オンライン中のデータファイル移動

オンライン中の移動方法は「alter database move datafile」で実施します。
alter database move datafile <ファイル番号orファイルパス> to <移動先>;
以下が実施にオンライン中にデータファイルを移動しました実行結果になります。

15:38:17 SYS@orcl18c > set line 1000
15:38:29 SYS@orcl18c > col file_name for a80
15:38:29 SYS@orcl18c > col status for a20
15:38:29 SYS@orcl18c > select d.file_name,
15:38:29 2 t.status
15:38:29 3 from dba_data_files d
15:38:29 4 left outer join dba_tablespaces t on d.tablespace_name = t.tablespace_name
15:38:29 5 where d.tablespace_name = 'TESTTBS';

FILE_NAME STATUS
-------------------------------------------------------------------------------- --------------------
/u01/app/oracle/oradata/orcl/testtbs001.dbf ONLINE

経過: 00:00:00.00
15:38:29 SYS@orcl18c >
15:38:49 SYS@orcl18c > alter database move datafile '/u01/app/oracle/oradata/orcl/testtbs001.dbf' to
15:38:50 2 '/home/oracle/testtbs001.dbf';
データベースが変更されました。

経過: 00:00:03.39
15:39:46 SYS@orcl18c >
15:42:54 SYS@orcl18c >
15:42:54 SYS@orcl18c > select d.file_name,
15:42:55 2 t.status
15:42:55 3 from dba_data_files d
15:42:55 4 left outer join dba_tablespaces t on d.tablespace_name = t.tablespace_name
15:42:55 5 where d.tablespace_name = 'TESTTBS';

FILE_NAME STATUS
-------------------------------------------------------------------------------- --------------------
/home/oracle/testtbs001.dbf ONLINE

経過: 00:00:00.00

12c以前のデータファイルの移動方法

ちなみにですが、12c以前のバージョンでデータファイルを移動するために以下の手順で行います。

  1. 表領域をオフラインにする(alter tablespace offline文)
  2. OSのコマンドを使ってデータファイルを移動する(mvコマンドなど)
  3. 制御ファイル内のデータファイルのパスを変更する(alter tablespace rename datafile文)
  4. 表領域をオンラインにする(alter tablespace online文)

関連記事

-OracleDB

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.