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.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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:

1
2
3
4
5
6
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)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
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…):

1
2
3
4
5
6
7
8
9
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