Trocar o caminho da pasta ORADATA no Oracle

Hoje precisei realizar um procedimento em um cliente para mudar a pasta oradata de um disco para outro com o intuito de agilizar o desempenho geral do sistema. Para isso fui pesquisar no Google e encontrei esta dica de um fórum: http://www.dbforums.com/showthread.php?t=790559

Seguindo esta sugestão, com alguns ajustes que vou detalhar abaixo consegui facilmente realizar o procedimento que queria, sem mistérios.

O primeiro passo é fazer um backup do control file para um arquivo de trace
SQL> alter database backup controlfile to trace;

Após isso devemos criar também um arquivo pfile baseado no spfile atual para podermos alterar o caminho do control file.
SQL> create pfile from spfile;


Feito isso podemos dar um shutdown no banco e mover a pasta "oradata" para o seu novo destino
SQL> shutdown immediate;

Obs.: Não é necessário fechar o sqlplus pois vamos precisar utilizá-lo na seqüência.

Movo a pasta oradata para o seu novo destino, de C:\ORACLEXE\ORADATA para E:\ORADATA por exemplo.

Após isso editamos o arquivo de trace gerado pelo comando de backup anterior, que se encontra na pasta "udump" padrão do Oracle.
Pegamos o trecho abaixo e modificamos para o novo caminho:

CREATE CONTROLFILE REUSE DATABASE "XE" NORESETLOGS NOARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 'C:\ORACLEXE\APP\ORACLE\FLASH_RECOVERY_AREA\XE\ONLINELOG\O1_MF_1_3JSMWWG5_.LOG' SIZE 50M, GROUP 2 'C:\ORACLEXE\APP\ORACLE\FLASH_RECOVERY_AREA\XE\ONLINELOG\O1_MF_2_3JSMWYB8_.LOG' SIZE 50M -- STANDBY LOGFILE DATAFILE 'C:\ORACLEXE\ORADATA\XE\SYSTEM.DBF', 'C:\ORACLEXE\ORADATA\XE\UNDO.DBF', 'C:\ORACLEXE\ORADATA\XE\SYSAUX.DBF', 'C:\ORACLEXE\ORADATA\XE\USERS.DBF', 'C:\ORACLEXE\ORADATA\XE\CIGAM_DATA01.ORA', 'C:\ORACLEXE\ORADATA\XE\CIGAM_INDEX01.ORA'
CHARACTER SET WE8MSWIN1252 ;

Modificando para o novo caminho (E:\ORADATA):

CREATE CONTROLFILE REUSE DATABASE "XE" NORESETLOGS NOARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 'C:\ORACLEXE\APP\ORACLE\FLASH_RECOVERY_AREA\XE\ONLINELOG\O1_MF_1_3JSMWWG5_.LOG' SIZE 50M, GROUP 2 'C:\ORACLEXE\APP\ORACLE\FLASH_RECOVERY_AREA\XE\ONLINELOG\O1_MF_2_3JSMWYB8_.LOG' SIZE 50M -- STANDBY LOGFILE DATAFILE 'E:\ORADATA\XE\SYSTEM.DBF', 'E:\ORADATA\XE\UNDO.DBF', 'E:\ORADATA\XE\SYSAUX.DBF', 'E:\ORADATA\XE\USERS.DBF', 'E:\ORADATA\XE\CIGAM_DATA01.ORA', 'E:\ORADATA\XE\CIGAM_INDEX01.ORA'
CHARACTER SET WE8MSWIN1252
;

É necessário também ajustar o caminho do controlfile para que possamos recriá-lo no seu novo caminho. Para isso precisamos editar o pfile criado anteriormente e realizar o ajuste.
No meu caso o pfile foi criado em %ORACLE_HOME%\database\initXE.ora (C:\oraclexe\app\oracle\product\10.2.0\server\database\initXE.ora).
Dentro deste arquivos vamos encontrar o parâmetro control_files='c:\oraclexe\oradata\XE\control.dbf' e vamos alterar para control_files='E:\oradata\XE\control.dbf' que no meu caso é o novo destino do controlfile. Ajuste conforme o seu.


Com estes ajustes feitos precisamos novamente iniciar o Oracle, mas com o parâmetro NOMOUNT e apontando para o arquivo de parâmetros (pfile) onde ajustamos o caminho do controlfile.
Para isso faremos da seguinte maneira:
SQL> startup nomount pfile=C:\oraclexe\app\oracle\product\10.2.0\server\database\initXE.ora

Agora rodamos o script de criação do controlfile que editamos anteriormente.

SQL> CREATE CONTROLFILE REUSE DATABASE "XE" ...

Recriamos o spfile a partir do pfile que utilizamos para fazer o startup:
SQL> create spfile from pfile;

E então reiniciamos o banco:
SQL> shutdown immediate;
SQL> startup;

Desta maneira estamos agora trabalhando com a pasta ORADATA em seu novo destino.

Comentários

Anônimo disse…
ler todo o blog, muito bom

Postagens mais visitadas deste blog

[Openfire] - Ajuste de horário no cliente Spark

Verificar uso de disco em partição ASM do Oracle 11g no Linux

[Pentaho] - Criando uma Simples transformação para apagar tabelas de um esquema no Oracle