sql >> Database teknologi >  >> RDS >> Oracle

12c Flyt datafiler online

Før Oracle 12c, hvis du ønskede at flytte en databases fil, var du enten nødt til at lukke databasen ned eller tage datafilen/tablespacet offline. Her er et eksempel på de trin, du kan tage:

  1. ALTER TABLESPACE my_ts OFFLINE;
  2. !mv /old_dir/my_ts01.dbf /new_dir/my_ts01.dbf
  3. ÆNDR DATABASE OMNØV FIL '/old_dir/my_ts01.dbf' TIL '/old_dir/my_ts01.dbf';
  4. ALTER TABLESPACE my_ts ONLINE;

Nu i Oracle 12c kan du gøre dette ganske enkelt med én kommando, og en anden bruger kan få adgang til filen på samme tid. For at illustrere dette, vil jeg oprette et tablespace, og mens jeg flytter det, får en anden session adgang til filen.

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.

Lad os nu begynde flytningen af ​​denne fil.

SQL> alter database move datafile
  2  '/u01/app/oracle/oradata/ora12c/move_me01.dbf' to
  3  '/u02/app/oracle/oradata/ora12c/move_me01.dbf';

På samme tid, i en anden session, lad os indsætte en række i den eneste tabel i dette tablespace.

SQL> insert into system.test_tab values (20);
1 row created.
SQL> commit;
Commit complete.

Som du kan se, fik transaktionen lov til at gennemføre, selvom vi er i gang med at flytte filen.

Mens filen bevægede sig, så jeg på indholdet af begge monteringspunkter.

[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
Som du kan se, er filen midlertidigt placeret begge steder. Efter et stykke tid fuldføres MOVE-kommandoen, og vi ser, at vores tabel har alle data.
Database altered.
SQL> select * From system.test_tab;
        ID
----------
        10
        20
 Denne nye funktion vil være en stor tidsbesparelse for mig. Mange gange har jeg brug for at flytte en fil af en række årsager, og jeg vil bruge denne nye funktion. 
  1. Lær databasedesign med SQL Server Management Studio (SSMS) – Del 2

  2. SQL Server 2008 Spatial:find et punkt i polygon

  3. Dobbelt kolon (::) notation i SQL

  4. Din ultimative guide til SQL Joins:OUTER JOIN – Del 2