sql >> Databáze >  >> RDS >> Oracle

12c Přesun datových souborů online

Pokud jste před Oracle 12c chtěli přesunout soubor databáze, museli jste databázi buď vypnout, nebo datový soubor/tabulkový prostor přepnout do režimu offline. Zde je příklad kroků, které můžete podniknout:

  1. ALTER TABLESPACE my_ts OFFLINE;
  2. !mv /old_dir/my_ts01.dbf /new_dir/my_ts01.dbf
  3. ALTER DATABASE RENAME FILE ‘/old_dir/my_ts01.dbf’ TO ‘/old_dir/my_ts01.dbf’;
  4. ALTER TABLESPACE my_ts ONLINE;

Nyní v Oracle 12c to můžete udělat docela jednoduše jedním příkazem a ve stejnou dobu může k souboru přistupovat jiný uživatel. Abych to ilustroval, vytvořím tabulkový prostor a při jeho přesouvání budu mít k souboru přístup jiné relace.

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.

Nyní začněme s přesunem tohoto souboru.

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

Zároveň v další relaci vložíme řádek do jediné tabulky v tomto tabulkovém prostoru.

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

Jak můžete vidět, transakci bylo povoleno dokončit, i když jsme uprostřed přesouvání souboru.

Zatímco se soubor pohyboval, podíval jsem se na obsah obou přípojných bodů.

[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
Jak můžete vidět, soubor je dočasně umístěn na obou místech. Po nějaké době se příkaz MOVE dokončí a my vidíme, že naše tabulka obsahuje všechna data.
Database altered.
SQL> select * From system.test_tab;
        ID
----------
        10
        20
 Tato nová funkce pro mě bude velkou úsporou času. Mnohokrát potřebuji přemístit soubor z mnoha důvodů a budu používat tuto novou funkci. 
  1. Omezení křížových tabulek v PostgreSQL

  2. Dotaz s více hodnotami ve sloupci

  3. TABLOCK vs TABLOCKX

  4. Musím se chránit před vkládáním SQL, pokud jsem použil rozevírací seznam?