Pular para o conteúdo

Como mover ou mudar o nome de um datafile online no Oracle Database sem o RMAN

Oracle 12c: Movendo ou renomeando um datafile online

Uma das novas características do Oracle Database 12c (12.1.0.1), entre outras, é a possibilidade de mover um datafile sem a necessidade de usar o RMAN, baixar o banco ou mesmo deixar uma tablespace em modo offline.

Nesse post vou mostrar como mover ou simplesmente mudar o nome de um datafile online.

Para esse pequeno teste foi usado a tablespace de exemplo do banco.

SQL> select name from v$dbfile where name like '%example%';

NAME
 ------------------------------------------------
 /u01/app/oracle/oradata/orcl/example01.dbf

SQL>

Alterando o nome do datafile:

SQL> alter database move datafile '/u01/app/oracle/oradata/orcl/example01.dbf' -

> to '/u01/app/oracle/oradata/orcl/exemplo.dbf';

Database altered.

SQL>

Simples assim. No alert log, temos o seguinte:

Moving datafile /u01/app/oracle/oradata/orcl/example01.dbf (2) to /u01/app/oracle/oradata/orcl/exemplo.dbf
 Thu Jul 18 10:47:48 2013
 Move operation committed for file /u01/app/oracle/oradata/orcl/exemplo.dbf
 Completed: alter database move datafile '/u01/app/oracle/oradata/orcl/example01.dbf' to '/u01/app/oracle/oradata/orcl/exemplo.dbf'

Agora uma segunda consulta para confirmar o resultado:

SQL> select name from v$dbfile where name like '%example%';

no rows selected

SQL>

** Ops…, errei! **

SQL> select name from v$dbfile where name like '%exemplo%';

NAME
 -------------------------------------------------------
 /u01/app/oracle/oradata/orcl/exemplo.dbf

SQL>

Agora que sabemos que é simples e fácil fazer essa alteração, será que, se mover um datafile para um diretório diferente (inexistente), dará certo?

SQL> !ls -l /u01/app/oracle/oradata/
 total 20
 drwxr-xr-x. 2 oracle oinstall 4096 Jul 18 10:53 orcl

SQL>

SQL> select name from v$dbfile where name like '%example%';

NAME
 -------------------------------------------------------
 /u01/app/oracle/oradata/orcl/example01.dbf

SQL>

SQL> alter database move datafile '/u01/app/oracle/oradata/orcl/example01.dbf' -

> to '/u01/app/oracle/oradata/hp/example01.dbf';

Database altered.

SQL>

SQL> !ls -l /u01/app/oracle/oradata/
 total 20
 drwxr-x---. 2 oracle oinstall 4096 Jul 18 10:53 hp
 drwxr-xr-x. 2 oracle oinstall 4096 Jul 18 10:53 orcl

SQL>

SQL> select name from v$dbfile where name like '%example%';

NAME
 -------------------------------------------------------
 /u01/app/oracle/oradata/hp/example01.dbf

SQL>

Agora sabemos que o diretório é criado sem erros. Mas…, e se as permissões do diretório não me dão direito a gravar arquivos?

SQL> !chmod 0 /u01/app/oracle/oradata/hp

SQL> !ls -l /u01/app/oracle/oradata/
 total 20
 d---------. 2 oracle oinstall 4096 Jul 18 10:53 hp
 drwxr-xr-x. 2 oracle oinstall 4096 Jul 18 10:53 orcl

SQL>

SQL> alter database move datafile '/u01/app/oracle/oradata/orcl/example01.dbf' -

> to '/u01/app/oracle/oradata/hp/example01.dbf';
 alter database move datafile '/u01/app/oracle/oradata/orcl/example01.dbf' to '/u01/app/oracle/oradata/hp/example01.dbf'
 *
 ERROR at line 1:
 ORA-01119: error in creating database file
 '/u01/app/oracle/oradata/hp/example01.dbf'
 ORA-27037: unable to obtain file status
 Linux-x86_64 Error: 13: Permission denied
 Additional information: 1

SQL>

E no alert log:

alter database move datafile '/u01/app/oracle/oradata/orcl/example01.dbf' to '/u01/app/oracle/oradata/hp/example01.dbf'
 Thu Jul 18 10:55:20 2013
 Moving datafile /u01/app/oracle/oradata/orcl/example01.dbf (2) to /u01/app/oracle/oradata/hp/example01.dbf
 Cleaning up online move operation for data file #2 ("/u01/app/oracle/oradata/hp/example01.dbf").
 WARNING: failed to remove the new file /u01/app/oracle/oradata/hp/example01.dbf during datafile move cleanup
 Clean up of move operation for fno 2 completed
 ORA-1119 signalled during: alter database move datafile '/u01/app/oracle/oradata/orcl/example01.dbf' to '/u01/app/oracle/oradata/hp/example01.dbf'...

Agora conclui-se que facilmente é possível mover, alterar, ajustar ou até mesmo criar uma nova estrutura do banco usando comandos simples.

Sucesso!

Marcos Braga

Marcos Braga

Pós-graduação em Computação Forense e Perícia Digital, pós-graduação em Redes de Computadores e com graduação em Tecnologia em Processamento de Dados.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress