12c new feature: MOVE DATAFILE ONLINE

O Oracle 12c chegou! e com ele inúmeras melhorias e novas features surgiram. Confira no Oracle® Database New Features Guide 12c Release 1 (12.1).

Uma destas novas features (1.5.5.6 Move a Data File Online) realmente chama a atenção, pois agora nos permite mover os datafiles de forma online totalmente transparente para os usuários, com o banco OPEN e os usuários acessando o datafile, com isso resolver problemas de área livre ou distribuir os datafiles entre dispositivos de armazenamento conforme carga de I/O (para melhorar a performance) se tornou muito prático e rápido.

C:\Users\Anderson Graf>sqlplus sys as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Sex Jul 26 09:36:24 2013

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

Informe a senha:

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

SQL> col file_name for a70
SQL> select file_name from dba_data_files where tablespace_name='USERS';

FILE_NAME
----------------------------------------------------------------------
D:\ORACLE\ORADATA\ORCL\DATAFILE\O1_MF_USERS_8Z4SMH74_.DBF

SQL> alter database move datafile 'D:\ORACLE\ORADATA\ORCL\DATAFILE\O1_MF_USERS_8Z4SMH74_.DBF' to 'C:\USERS01.DBF';

Banco de dados alterado.

SQL> select file_name from dba_data_files where tablespace_name='USERS';

FILE_NAME
----------------------------------------------------------------------
C:\USERS01.DBF

Observe no exemplo acima que fiz um RENAME do datafile juntamente com o MOVE ONLINE!

Alertlog durante o move:

Fri Jul 26 09:38:34 2013
alter database move datafile 'D:\ORACLE\ORADATA\ORCL\DATAFILE\O1_MF_USERS_8Z4SMH74_.DBF' to 'C:\USERS01.DBF'
Fri Jul 26 09:38:34 2013
Moving datafile D:\ORACLE\ORADATA\ORCL\DATAFILE\O1_MF_USERS_8Z4SMH74_.DBF (6) to C:\USERS01.DBF
Move operation committed for file C:\USERS01.DBF
Completed: alter database move datafile 'D:\ORACLE\ORADATA\ORCL\DATAFILE\O1_MF_USERS_8Z4SMH74_.DBF' to 'C:\USERS01.DBF'

Durante o MOVE o banco de dados realiza uma consistência do nome do datafile no destino, verificando se ele existe ou não. Por default se ele existir no destino você receberá um erro: (criei um arquivo USERS.DBF para simulação)

C:\Users\Anderson Graf>cd /

C:\>mkdir teste

C:\>cd teste

C:\teste>dir
 O volume na unidade C não tem nome.
 O Número de Série do Volume é 6654-062C

 Pasta de C:\teste

26/07/2013  10:03    <DIR>          .
26/07/2013  10:03    <DIR>          ..
               0 arquivo(s)              0 bytes
               2 pasta(s)   83.722.387.456 bytes disponíveis

C:\teste>dir > USERS01.DBF

C:\teste>dir
 O volume na unidade C não tem nome.
 O Número de Série do Volume é 6654-062C

 Pasta de C:\teste

26/07/2013  10:04    <DIR>          .
26/07/2013  10:04    <DIR>          ..
26/07/2013  10:04               344 USERS01.DBF
               1 arquivo(s)            344 bytes
               2 pasta(s)   83.722.588.160 bytes disponíveis

Agora:

C:\teste>sqlplus sys as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Sex Jul 26 10:09:05 2013

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

Informe a senha:

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

SQL> alter database move datafile 'C:\USERS01.DBF' to 'C:\TESTE\USERS01.DBF';
alter database move datafile 'C:\USERS01.DBF' to 'C:\TESTE\USERS01.DBF'
*
ERRO na linha 1:
ORA-01119: erro ao criar o arquivo 'C:\TESTE\USERS01.DBF' de banco de dados
ORA-27038: arquivo criado já existe
OSD-04010: opção <criar> especificada, arquivo existente

Caso queira realmente sobrescrever este datafile utilize a opção REUSE (tome cuidado para não sobrescrever um datafile válido…):

SQL> alter database move datafile 'C:\USERS01.DBF' to 'C:\TESTE\USERS01.DBF' REUSE;

Banco de dados alterado.

SQL> select file_name from dba_data_files where tablespace_name='USERS';

FILE_NAME
--------------------------------------------------------------------------------
C:\TESTE\USERS01.DBF

Ainda temos a opção KEEP que mantém o arquivo na origem e faz uma cópia para o destino, sendo que o arquivo no destino só será utilizado quando a operação concluir com sucesso.

Quando realizado um MOVE ou RENAME do DATAFILE ONLINE, o banco de dados cria uma cópia do arquivo de dados enquanto a operação está sendo realizada. Sempre certifique-se de que há espaço suficiente em disco para o arquivo de dados original e da cópia durante a operação.

Veja outros detalhes e restrições na utilização da feature, clique AQUI.

Referências:

http://docs.oracle.com/cd/E16655_01/server.121/e17906/chapter1.htm

http://docs.oracle.com/cd/E16655_01/server.121/e17636/dfiles.htm#ADMIN13837

%name 12c new feature: MOVE DATAFILE ONLINE

Autor: Anderson Graf

Bacharel em Sistemas de Informação e MBA em Gestão de Banco de Dados Oracle. Entusiasta da tecnologia Oracle, ACE Associate ♠, autor em vários blogs e OTN. Consultor Oracle Senior na Exímio Soluções em TI

Envolvido em soluções de:
– Implementação, migração, gerenciamento e suporte a produtos Oracle, multiplataforma
– Monitoramento de ambientes 24×7
– Backup e Recovery
– Performance e Tuning
– Alta disponibilidade (HA) – RAC, Data Guard
– EM database/grid/cloud control
– Particionamento & Advanced Compression
– Oracle Engineered Systems – ODA, Exadata

Blog pessoal: http://www.andersondba.com.br
Articulista na Oracle Technology Network (OTN) – https://goo.gl/99R6yW
ACE Associate – https://goo.gl/MBB51b
Articulista GPO – http://profissionaloracle.com.br