Pular para o conteúdo

Como mover e renomear arquivos de datafile no banco de dados Oracle

Movimentação/Renomeação de datafiles com o banco aberto

Uma das rotinas que DBAs executam em banco de dados, é a de se movimentar arquivos. No caso do banco de dados Oracle, podemos destacar alguns como control files, datafiles, entre outros. No entanto, neste post, estarei abordando a movimentação de datafiles com o banco aberto . Isto é, sem se efetuar um shutdown na instância do banco de dados corrente. A causa para a realização deste tipo de atividade vai desde de padronizar os arquivos existentes na base de dados corrente à um balanceamento de I/O no ambiente. Sendo assim, vamos lá…

— Considerações

  • Versão utilizada no post: 11g (Não deixe de conferir as novas características  do Oracle 12c para a atividade executada neste post).
  • Banco precisa estar em modo de archive. (archivelog mode)
  • Banco precisa estar em READ WRITE. (select open_mode from v$database;)
  • Ação neste post não se aplica para movimentação ou renomeação do datafile da tablespace SYSTEM. Uma vez que para essa tablespace há a necessidade de se parar o banco de dados (efetuar shutdown).
SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ WRITE

-- Verificando os datafiles existentes na minha base de dados:

SQL> select FILE#, NAME FROM V$DATAFILE;

FILE#
----------
NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1
/oracle/oradata/prod/system01.dbf

2
/oracle/oradata/prod/sysaux01.dbf

3
/oracle/oradata/prod/undotbs01.dbf

4
/oracle/oradata/prod/databrunors.dbf

-- Quero movimentar o datafile '/oracle/oradata/prod/databrunors.dbf' para um outro diretório. Sendo assim, primeiramente há a necessidade de se colocar o arquivo offline.

SQL> alter database datafile '/oracle/oradata/prod/databrunors.dbf' offline;

Database altered.

— Saia do utiliário SQLPlus para se efetuar a movimentação a nível de sistema operacional.

SQL> !

[oracle@prod oradata_new]$ cd /oracle/oradata/prod/
[oracle@prod prod]$ pwd
/oracle/oradata/prod
[oracle@prod prod]$ ls -ltr databrunors.dbf
-rw-r----- 1 oracle oinstall 629153792 Oct 19 22:00 databrunors.dbf
[oracle@prod prod]$ mv databrunors.dbf /oracle/oradata_new/
[oracle@prod prod]$ cd /oracle/oradata_new/
[oracle@prod oradata_new]$ ls
databrunors.dbf
[oracle@prod oradata_new]$ pwd
/oracle/oradata_new

— Movimentação do datafile ‘/oracle/oradata/prod/databrunors.dbf’ para o novo caminho ‘/oracle/oradata_new/databrunors.dbf’.

SQL> alter database rename file '/oracle/oradata_new/databrunors.db' to '/oracle/oradata_new/databrunors.db';

Database altered.

— Faça o recover do arquivo em sua nova localização.

SQL> recover datafile '/oracle/oradata/prod/databrunors.dbf';
Media recovery complete.
SQL>
-- Coloque o arquivo online novamente.
SQL> alter database datafile '/oracle/oradata_new/databrunors.dbf' online;

Database altered.

— Verificando o novo datafile em sua nova localização.

SQL> select FILE#,NAME FROM v$datafile;

FILE#
----------
NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1
/oracle/oradata/prod/system01.dbf

2
/oracle/oradata_new/sysaux01.dbf

3
/oracle/oradata/prod/undotbs01.dbf

4
/oracle/oradata_new/databrunors.dbf

Segue agora um exemplo de como mudar o nome do datafile utilizando o exemplo acima.

— Coloque o datafile offline.

SQL> alter database datafile '/oracle/oradata_new/databrunors.dbf' offline;

Database altered.

— Saia do SQLPlus e altere o nome do arquivo em questão.

SQL> !
[oracle@prod oradata_new]$ ls databrunors.dbf
databrunors.dbf
[oracle@prod oradata_new]$ mv databrunors.dbf databrunors_new.dbf
[oracle@prod oradata_new]$ sqlplus "/as sysdba"

SQL*Plus: Release 11.2.0.3.0 Production on Sat Oct 19 22:08:35 2013

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options

— No SQLplus alterando o nome do arquivo (note: diferentemente do exemplo acima, o arquivo está no mesmo caminho. A única mudança é o nome do arquivo.)

SQL> alter database rename file '/oracle/oradata_new/databrunors.dbf' to '/oracle/oradata_new/databrunors_new.dbf';

Database altered.

— Faça recover do novo nome do arquivo.

SQL> recover datafile '/oracle/oradata_new/databrunors_new.dbf';
Media recovery complete.
SQL>

— Coloque o arquivo online novamente.

SQL> alter database datafile '/oracle/oradata_new/databrunors_new.dbf' online;

Database altered.

— Verificando o novo nome do arquivo.

SQL> select NAME, FILE# from v$datafile;

NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FILE#
----------
/oracle/oradata/prod/system01.dbf
1

/oracle/oradata_new/sysaux01_new.dbf
2

/oracle/oradata/prod/undotbs01.dbf
3

/oracle/oradata_new/databrunors_new.dbf
4

Espero ter ajudado,
Abraços!

Bruno Reis

Bruno Reis

DBA ORACLE  na International Business Machines (IBM), fornecendo suporte para grandes clientes. Técnico em Informática pela Escola Técnica Polivalente de Americana e estudante de Ciência Computação . Mantenedor do Weblog sobre Banco de Dados Oracle e Gerenciamento de Serviços de TI: www.brunors.com

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