こんにちは!シミダイ(@shimidai2100)です。
オンライン状態のデータファイルを移動する方法を紹介します。
「データファイルのサイズが大きくなりすぎたので別の領域に退避したい」や
「誤って違う領域にデータファイルを作成してしまった」時に大変便利なコマンドになります。」
なおこの機能はOracle Database 12c以降で使用できるコマンドなので注意してください。
オンライン中のデータファイル移動
オンライン中の移動方法は「alter database move datafile」で実施します。
1 |
alter database move datafile <ファイル番号orファイルパス> to <移動先>; |
以下が実施にオンライン中にデータファイルを移動しました実行結果になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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以前のバージョンでデータファイルを移動するために以下の手順で行います。
- 表領域をオフラインにする(alter tablespace offline文)
- OSのコマンドを使ってデータファイルを移動する(mvコマンドなど)
- 制御ファイル内のデータファイルのパスを変更する(alter tablespace rename datafile文)
- 表領域をオンラインにする(alter tablespace online文)