Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

12c Mover Arquivos de Dados Online


Antes do Oracle 12c, se você quisesse mover o arquivo de um banco de dados, era necessário encerrar o banco de dados ou colocar o arquivo de dados/tablespace offline. Aqui está um exemplo das etapas que você pode seguir:
  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' PARA '/old_dir/my_ts01.dbf';
  4. ALTER TABLESPACE my_ts ONLINE;

Agora, no Oracle 12c, você pode fazer isso simplesmente com um comando e outro usuário pode acessar o arquivo ao mesmo tempo. Para ilustrar isso, criarei um tablespace e, ao movê-lo, outra sessão acessará o arquivo.
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.

Agora vamos começar a mover este arquivo.
SQL> alter database move datafile
  2  '/u01/app/oracle/oradata/ora12c/move_me01.dbf' to
  3  '/u02/app/oracle/oradata/ora12c/move_me01.dbf';

Ao mesmo tempo, em outra sessão, vamos inserir uma linha na única tabela deste tablespace.
SQL> insert into system.test_tab values (20);
1 row created.
SQL> commit;
Commit complete.

Como você pode ver, a transação foi concluída mesmo estando no meio da movimentação do arquivo.

Enquanto o arquivo estava se movendo, examinei o conteúdo de ambos os pontos de montagem.
[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
Como você pode ver, o arquivo está localizado em ambos os pontos, temporariamente. Depois de algum tempo, o comando MOVE é concluído e vemos que nossa tabela tem todos os dados.
Database altered.
SQL> select * From system.test_tab;
        ID
----------
        10
        20
 Este novo recurso será uma grande economia de tempo para mim. Muitas vezes, preciso realocar um arquivo por vários motivos e usarei esse novo recurso.