Wenn Sie vor Oracle 12c die Datei einer Datenbank verschieben wollten, mussten Sie entweder die Datenbank herunterfahren oder die Datendatei/den Tablespace offline schalten. Hier ist ein Beispiel für mögliche Schritte:
- ALTER TABLESPACE my_ts OFFLINE;
- !mv /old_dir/my_ts01.dbf /new_dir/my_ts01.dbf
- ALTER DATABASE RENAME FILE ‘/old_dir/my_ts01.dbf’ TO ‘/old_dir/my_ts01.dbf’;
- ALTER TABLESPACE my_ts ONLINE;
In Oracle 12c können Sie dies jetzt ganz einfach mit einem Befehl tun, und ein anderer Benutzer kann gleichzeitig auf die Datei zugreifen. Um dies zu veranschaulichen, erstelle ich einen Tablespace und lasse während des Verschiebens eine andere Sitzung auf die Datei zugreifen.
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.
Beginnen wir nun mit dem Verschieben dieser Datei.
SQL> alter database move datafile 2 '/u01/app/oracle/oradata/ora12c/move_me01.dbf' to 3 '/u02/app/oracle/oradata/ora12c/move_me01.dbf';
Lassen Sie uns gleichzeitig in einer anderen Sitzung eine Zeile in die einzige Tabelle in diesem Tablespace einfügen.
SQL> insert into system.test_tab values (20); 1 row created. SQL> commit;
Commit complete.
Wie Sie sehen können, wurde die Transaktion abgeschlossen, obwohl wir gerade dabei sind, die Datei zu verschieben.
Während die Datei verschoben wurde, habe ich mir den Inhalt beider Einhängepunkte angesehen.
[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.dbfWie Sie sehen können, befindet sich die Datei vorübergehend an beiden Stellen. Nach einiger Zeit ist der MOVE-Befehl abgeschlossen und wir sehen, dass unsere Tabelle alle Daten enthält.
Database altered. SQL> select * From system.test_tab; ID ---------- 10 20Diese neue Funktion wird eine große Zeitersparnis für mich sein. Oft muss ich aus verschiedenen Gründen eine Datei verschieben und werde diese neue Funktion verwenden.