オンライン状態のデータファイルを移動する方法を紹介します。
「データファイルのサイズが大きくなりすぎたので別の領域に退避したい」や、
「誤って違う領域にデータファイルを作成してしまった」時に大変便利なコマンドになります。」
なおこの機能は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';
データベースが変更されました。
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以前のバージョンでデータファイルを移動するために以下の手順で行います。
- 表領域をオフラインにする(alter tablespace offline文)
- OSのコマンドを使ってデータファイルを移動する(mvコマンドなど)
- 制御ファイル内のデータファイルのパスを変更する(alter tablespace rename datafile文)
- 表領域をオンラインにする(alter tablespace online文)
Oracleの基本 ~データベース入門から設計/運用の初歩までposted with ヨメレバ
渡部 亮太,相川 潔,日比野 峻佑,岡野 平八郎,宮川 大地 技術評論社 2017-09-22