Oracle 12cより前は、データベースのファイルを移動する場合は、データベースをシャットダウンするか、データファイル/テーブルスペースをオフラインにする必要がありました。実行する可能性のある手順の例を次に示します。
- ALTER TABLESPACE my_ts OFFLINE;
- !mv /old_dir/my_ts01.dbf /new_dir/my_ts01.dbf
- データベースの名前を「/old_dir/my_ts01.dbf」から「/old_dir/my_ts01.dbf」に変更します。
- ALTER TABLESPACE my_ts ONLINE;
Oracle 12cでは、1つのコマンドでこれを非常に簡単に実行でき、別のユーザーが同時にファイルにアクセスできます。これを説明するために、テーブルスペースを作成し、移動中に別のセッションでファイルにアクセスします。
SQL> create tablespace move_me 2 datafile '/u01/app/oracle/oradata/ora12c/move_me01.dbf' size 5g; Tablespace created. SQL> create table system.test_tab (id number) tablespace move_me; Table created. SQL> insert into system.test_tab values (10); 1 row created. SQL> commit; Commit complete.
それでは、このファイルの移動を始めましょう。
SQL> alter database move datafile 2 '/u01/app/oracle/oradata/ora12c/move_me01.dbf' to 3 '/u02/app/oracle/oradata/ora12c/move_me01.dbf';
同時に、別のセッションで、このテーブルスペース内の唯一のテーブルに行を挿入しましょう。
SQL> insert into system.test_tab values (20); 1 row created. SQL> commit;
Commit complete.
ご覧のとおり、ファイルを移動している最中ですが、トランザクションは完了しました。
ファイルの移動中に、両方のマウントポイントの内容を確認しました。
[oracle@msp-test-ora12 ora12c]$ ls -l /u01/app/oracle/oradata/ora12c total 8769660 -rw-r----- 1 oracle oinstall 10043392 Sep 17 10:52 control01.ctl -rw-r----- 1 oracle oinstall 10043392 Sep 17 10:52 control02.ctl -rw-r----- 1 oracle oinstall 5368717312 Sep 17 10:52 move_me01.dbf -rw-r----- 1 oracle oinstall 52429312 Sep 17 10:52 redo01.log -rw-r----- 1 oracle oinstall 52429312 Sep 16 22:00 redo02.log -rw-r----- 1 oracle oinstall 52429312 Sep 17 02:00 redo03.log -rw-r----- 1 oracle oinstall 1090527232 Sep 17 10:52 sysaux01.dbf -rw-r----- 1 oracle oinstall 734011392 Sep 17 10:52 system01.dbf -rw-r----- 1 oracle oinstall 68165632 Sep 17 10:45 temp01.dbf -rw-r----- 1 oracle oinstall 471867392 Sep 17 10:52 undotbs01.dbf -rw-r----- 1 oracle oinstall 1073750016 Sep 17 02:06 users01.dbf [oracle@msp-test-ora12 ora12c]$ ls -l /u02/app/oracle/oradata/ora12c total 684044 -rw-r----- 1 oracle oinstall 5368717312 Sep 17 10:52 move_me01.dbfご覧のとおり、ファイルは一時的に両方の場所にあります。しばらくすると、MOVEコマンドが完了し、テーブルにすべてのデータが含まれていることがわかります。
Database altered. SQL> select * From system.test_tab; ID ---------- 10 20この新機能は、私にとって大きな時間の節約になります。多くの場合、さまざまな理由でファイルを再配置する必要があり、この新機能を使用します。