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!