Als u vóór Oracle 12c het bestand van een database wilde verplaatsen, moest u ofwel de database afsluiten of het gegevensbestand/de tabelruimte offline halen. Hier is een voorbeeld van de stappen die u zou kunnen nemen:
- WIJZIG TABELRUIMTE my_ts OFFLINE;
- !mv /old_dir/my_ts01.dbf /new_dir/my_ts01.dbf
- WIJZIG DATABASE HERNAME BESTAND '/old_dir/my_ts01.dbf' NAAR '/old_dir/my_ts01.dbf';
- WIJZIG TABELRUIMTE my_ts ONLINE;
In Oracle 12c kunt u dit heel eenvoudig met één opdracht doen en heeft een andere gebruiker tegelijkertijd toegang tot het bestand. Om dit te illustreren, zal ik een tabelruimte maken, en tijdens het verplaatsen een andere sessie toegang geven tot het bestand.
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.
Laten we nu beginnen met het verplaatsen van dit bestand.
SQL> alter database move datafile 2 '/u01/app/oracle/oradata/ora12c/move_me01.dbf' to 3 '/u02/app/oracle/oradata/ora12c/move_me01.dbf';
Laten we tegelijkertijd, in een andere sessie, een rij invoegen in de enige tabel in deze tabelruimte.
SQL> insert into system.test_tab values (20); 1 row created. SQL> commit;
Commit complete.
Zoals je kunt zien, kon de transactie worden voltooid, ook al zijn we bezig met het verplaatsen van het bestand.
Terwijl het bestand bewoog, keek ik naar de inhoud van beide koppelpunten.
[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.dbfZoals u kunt zien, bevindt het bestand zich tijdelijk op beide plaatsen. Na enige tijd is het MOVE-commando voltooid en zien we dat onze tabel alle gegevens bevat.
Database altered. SQL> select * From system.test_tab; ID ---------- 10 20Deze nieuwe functie zal mij veel tijd besparen. Vaak moet ik een bestand om een aantal redenen verplaatsen en ik zal deze nieuwe functie gebruiken.