Movendo Datafile - Oracle Database 12c - ONLINE

Olá pessoal,

A partir do Oracle Oracle Database 12c Release 1 (12.1.0.1) podemos movimentar os datafiles do banco de dados de maneira ONLINE, ou seja, sem precisar parar(shutdown) o banco de dados para realizar esta operação.


Use a cláusula MOVE DATAFILE para mover um arquivo de dados de maneira "on-line" para uma nova localização. O banco de dados pode estar aberto e acessar o arquivo de dados quando você executar esta operação. 

Vamos a um exemplo básico, primeiro se conecte ao banco de dados com privilégio adequado para operação:

[oracle@serv01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Sat Feb 17 20:56:27 2018

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

Veja os datafiles disponíveis no banco de dados:

SQL> COLUMN file_name FORMAT A40
SELECT file_id, file_name FROM dba_data_files ORDER BY file_id;
SQL>
FILE_ID FILE_NAME
---------- ----------------------------------------
1 /u01/oradata/orcl/system01.dbf
2 /u01/oradata/orcl/soe01.dbf
3 /u01/oradata/orcl/sysaux01.dbf
4 /u01/oradata/orcl/undotbs01.dbf
5 /u01/oradata/orcl/example01.dbf
6 /u01/oradata/orcl/users01.dbf
7 /u01/oradata/orcl/tbs_01.dbf

7 rows selected.

SQL>

Certo, agora vamos mover um datafile de um local para outro de maneira ONLINE. Vamos movimentar um arquivo de dados crítico do banco de dados, o SYSTEM:

SQL> alter database move datafile '/u01/oradata/orcl/system01.dbf' to '/u01/oradata/system01.dbf';

Database altered.

Veja agora que o datafile foi movimentado de local e não se encontra no local antigo:

SQL> host ls -lart /u01/oradata/orcl/system01.dbf
ls: cannot access /u01/oradata/orcl/system01.dbf: No such file or directory

SQL> host ls -lart /u01/oradata/system01.dbf
-rw-r-----. 1 oracle oinstall 859840512 Feb 17 21:04 /u01/oradata/system01.dbf

SQL>

Consulte o novo local de utilização em que o datafile referente a tablespace system está:
Alteração ok e de maneira ONLINE.

SQL> COLUMN file_name FORMAT A40
SELECT file_id, file_name FROM dba_data_files ORDER BY file_id;

FILE_ID FILE_NAME
---------- ----------------------------------------
1 /u01/oradata/system01.dbf
2 /u01/oradata/orcl/soe01.dbf
3 /u01/oradata/orcl/sysaux01.dbf
4 /u01/oradata/orcl/undotbs01.dbf
5 /u01/oradata/orcl/example01.dbf
6 /u01/oradata/orcl/users01.dbf
7 /u01/oradata/orcl/tbs_01.dbf

7 rows selected.

SQL>

Podemos também manter(keep) o arquivo original como demonstrado abaixo:

SQL> alter database move datafile '/u01/oradata/orcl/tbs_01.dbf' to '/u01/oradata/tbs_01.dbf' keep;

Database altered.

SQL>

Consulte o novo local utilizado para o datafile: tbs_01:

SQL> COLUMN file_name FORMAT A40
SELECT file_id, file_name FROM dba_data_files ORDER BY file_id;SQL>

FILE_ID FILE_NAME
---------- ----------------------------------------
1 /u01/oradata/system01.dbf
2 /u01/oradata/orcl/soe01.dbf
3 /u01/oradata/orcl/sysaux01.dbf
4 /u01/oradata/orcl/undotbs01.dbf
5 /u01/oradata/orcl/example01.dbf
6 /u01/oradata/orcl/users01.dbf
7 /u01/oradata/tbs_01.dbf

7 rows selected.

SQL>

Veja agora que foi mantido o arquivo original também:

SQL> host ls -lart /u01/oradata/orcl/tbs_01.dbf
-rw-r-----. 1 oracle oinstall 209723392 Feb 17 21:11 /u01/oradata/orcl/tbs_01.dbf

SQL> host ls -lart /u01/oradata/tbs_01.dbf
-rw-r-----. 1 oracle oinstall 209723392 Feb 17 21:11 /u01/oradata/tbs_01.dbf

SQL>

No log de alerta do Oracle encontramos o registro da alteração do datafile como abaixo:

alter database move datafile '/u01/oradata/orcl/tbs_01.dbf' to '/u01/oradata/tbs_01.dbf' keep
Sat Feb 17 21:11:03 2018
Moving datafile /u01/oradata/orcl/tbs_01.dbf (7) to /u01/oradata/tbs_01.dbf
Sat Feb 17 21:11:25 2018
Move operation committed for file /u01/oradata/tbs_01.dbf
Completed: alter database move datafile '/u01/oradata/orcl/tbs_01.dbf' to '/u01/oradata/tbs_01.dbf' keep

Abraço pessoal,

Ronaldo.

Nenhum comentário:

Postar um comentário