Movendo o Banco de dados
Autor: Mario Leonel Martinez Junior | Publicado: 2014-06-14T15:08:00-04:00

&nbsp; Saudações aos DBAs , aqueles que tornam o impossível em possível!Hoje falamos de um assunto muito, mas muito interessante e útil no canivete suíço de um DBA, mover arquivos do nosso banco ou ate mesmo o banco inteiro de um local(disco,LUN) para outro.Por que faríamos isso?Migrações de storage, discos (para discos mais rápidos) , ou no que acontece 100% das vezes, um sistema criado em ambiente de “testes” é promovido para produção sem muita pompa e circunstancia, ai o DBA pula da cadeira, mas gerente, esse ambiente é de testes, não suporta o tranco do dia a dia, precisamos dimensionar a carga, crescimento e tal… Gerente: Nã precisa não , aperta uns botão ai e faz milagre, não da não? DBA: Filha da $#@%&amp;*&nbsp;&nbsp; ….. Afff…. Blza vou ver o que  , da para fazer. Ok, cenário apresentado, vamos as soluções. Podemos fazer um dump via expdp, ou um restore via rman. Então pedimos um disco maior e nosso objetivo é levar todos nossos arquivos do ponto de montagem a para o ponto de montagem b.No meu caso , estava em um ambiente clusterizado sem utilizar asm, assim foi necessário usar o ocfs2 para detalhas sobre oocfs2 veja aqui: ocfs2&nbsp;&nbsp;&nbsp;&nbsp; , apos configurar os discos como ocfs2 resolvi simplesmente fazer a copia dos arquivos sem usar um dump ou RMAN.Vejam abaixo como foi: &nbsp; Fiz cada estrutura de arquivo separadamente eu fui testando para não dar “Problema”, por via das duvidas faça um backup antes(eu não fiz uahauahauhau) Primeira etapa: Vamos mover o spfile, esse teoricamente seria o arquivo mais fácil de se mover de lugar: Antes de mais nada criei os diretórios novos no disco novo nos dois servidores: mkdir -p /u02/oracle/oradata/orcl/datafile/mkdir -p /u02/oracle/oradata/orcl/conf/mkdir -p /u02/oracle/oradata/orcl/arch/ Vamos verificar a localização atual do spfile: No sqlplus :&nbsp; show parameter spfile; spfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /u01/oracle/oradata/orcl/conf/spfiledw.ora Ok vamos mover o spfile para: spfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /u02/oracle/oradata/orclconf/spfiledw.ora Para isso criamos um pfile baseado no spfile: create pfile='/u02/oracle/oradata/orcl/conf/initdw.ora' from spfile ; Agora vamos criar um spfile no diretório novo baseado no pfile criado: create spfile='/u02/oracle/oradata/orcl/conf/spfiledw2.ora' from pfile='/u02/oracle/oradata/orcl/conf/initdw.ora' Como estamos em um ambiente RAC não podemos esquecer de configurar o RAC para buscar o novo spfile: srvctl modify database –d orcl -p /u02/oracle/oradata/orcl/conf/spfiledw2.ora Agora paramos o banco e iniciamos para ver se deu certo. Basta verificar novamente a localização do spfile.No meu caso deu certo vamos para a próxima estrutura de dados a ser movida. Segunda etapa vamos mover os control files ,essa estrutura é muito importante para o banco e sem ela o oracle não consegue achar seus datafiles e para inicialização, entre outras coisas. Vamos checar a localização atual dos controlfiles: select * from v$controlfile /u01/oracle/oradata/bkp1/orcl/datafile/control1.ctl Certo vamos mover o controlfile para : /u02/oracle/oradata/orcl/datafile/control1.ctl Logado no sqlplus como sys vamos alterar no spfile a localização do controlfile: ALTER SYSTEM SET control_files='/u02/oracle/oradata/orcl/datafile/control1.ctl' SCOPE=SPFILE; Certo, agora paramos nosso banco: srvctl stop database –d orcl –o immediate Ainda no sql plus vamos fazer a copia pelo sqlplus, confiram abaixo: HOST mv /u01/oracle/oradata/bkp1/orcl/datafile/control1.ctl /u02/oracle/oradata/orcl/datafile/control1.ctl ; Feito isso basta iniciar o banco srvctl start database –d orcl Pronto , vamos para a próxima etapa, os Redo log files: Terceira etapa, movendo os redo logs: Vamos verificar a localização atual dos redo: select * from v$logfile  /u01/oracle/oradata/bkp1/orcl/datafile/redo01a.dbf/u01/oracle/oradata/bkp1/orcl/datafile/redo02a.dbf Moveremos para : /u02/oracle/oradata/orcl/datafile/redo01a.dbf/u02/oracle/oradata/orcl/datafile/redo02a.dbf Primeiramente paramos nosso banco srvctl stop database –d orcl –o immediate Movemos os redo pelo sqlplus : HOST mv /u01/oracle/oradata/bkp1/orcl/datafile/redo01a.dbf /u02/oracle/oradata/orcl/datafile/redo01a.dbf ;HOST mv /u01/oracle/oradata/bkp1/orcl/datafile/redo02a.dbf /u02/oracle/oradata/orcl/datafile/redo02a.dbf ; Agora iniciamos o banco em modo mount, afinal os redo são utilizados na fase de abertura certo? srvctl start database –d orcl –o mount Agora alteramos no spfile a localização dos redo: ALTER DATABASE RENAME FILE '/u01/oracle/oradata/bkp1/orcl/datafile/redo01a.dbf'&nbsp; TO '/u02/oracle/oradata/orcl/datafile/redo01a.dbf';ALTER DATABASE RENAME FILE '/u01/oracle/oradata/bkp1/orcl/datafile/redo02a.dbf'&nbsp; TO '/u02/oracle/oradata/orcl/datafile/redo02a.dbf'; Agora é só abrir o banco: alter database open; Quarta Fase mover os archives logs No meu caso por ser uma base de testes, estava configurado em noarchivelog assim foi só habilitar o archive mode: Pare o banco e inicie em mount: SQL&gt; startup mountORACLE instance started.Total System Global Area  184549376 bytesFixed Size                  1300928 bytesVariable Size             157820480 bytesDatabase Buffers           25165824 bytesRedo Buffers                 262144 bytesDatabase mounted.SQL&gt; alter database archivelog;Database altered.SQL&gt; alter database open;Database altered.Feito , próxima etapa os datafiles.Fase cinco movendo os datafiles.Nos caso dos datafiles podemos ter sérios problemas caso ocorra um erro em um datafile interno do Oracle como o system.Por isso é claro que antes de qualquer coisa devemos realizar uma backup só por via das duvidas, isso esta escrito no manual do DBA cagão e nunca faz mal seguir, afinal também é uma das regras de ouro lembram? regra de ouro numero 2: nunca se coloque em uma situação sem volta , sempre tenha um backup!Vamos verificar a localização atual dos datafiles:select * from v$datafile/u01/oracle/oradata/bkp1/orcl/datafile/data_i001.001.dbf/u01/oracle/oradata/bkp1/orcl/datafile/data_t001.001.dbf/u01/oracle/oradata/bkp1/orcl/datafile/sysaux_01.dbf/u01/oracle/oradata/bkp1/orcl/datafile/system_01.dbf/u01/oracle/oradata/bkp1/orcl/datafile/undotbs1_01.dbf/u01/oracle/oradata/bkp1/orcl/datafile/undotbs2_01.dbf/u01/oracle/oradata/bkp1/orcl/datafile/users_01.dbfVamos mover para esta localização:/u02/oracle/oradata/orcl/datafile/data_i001.001.dbf/u02/oracle/oradata/orcl/datafile/data_t001.001.dbf/u02/oracle/oradata/orcl/datafile/sysaux_01.dbf/u02/oracle/oradata/orcl/datafile/system_01.dbf/u02/oracle/oradata/orcl/datafile/undotbs1_01.dbf/u02/oracle/oradata/orcl/datafile/undotbs2_01.dbf/u02/oracle/oradata/orcl/datafile/users_01.dbfParamos o bancoE movemos usando o sqlplus HOST mv /u01/oracle/oradata/bkp1/orcl/datafile/data_i001.001.dbf /u02/oracle/oradata/orcl/datafile/data_i001.001.dbf ;HOST mv /u01/oracle/oradata/bkp1/orcl/datafile/data_t001.001.dbf /u02/oracle/oradata/orcl/datafile/data_t001.001.dbf ; HOST mv /u01/oracle/oradata/bkp1/orcl/datafile/sysaux_01.dbf /u02/oracle/oradata/orcl/datafile/sysaux_01.dbf ;HOST mv /u01/oracle/oradata/bkp1/orcl/datafile/system_01.dbf /u02/oracle/oradata/orcl/datafile/system_01.dbf ;HOST mv /u01/oracle/oradata/bkp1/orcl/datafile/undotbs1_01.dbf /u02/oracle/oradata/orcl/datafile/undotbs1_01.dbf ;HOST mv /u01/oracle/oradata/bkp1/orcl/datafile/undotbs2_01.dbf /u02/oracle/oradata/orcl/datafile/undotbs2_01.dbf ;HOST mv /u01/oracle/oradata/bkp1/orcl/datafile/users_01.dbf /u02/oracle/oradata/orcl/datafile/users_01.dbf ;Iniciamos em mount e alteramos a localização dos datafiles:STARTUP MOUNTALTER DATABASE RENAME FILE '/u01/oracle/oradata/bkp1/orcl/datafile/data_i001.001.dbf' to '/u02/oracle/oradata/orcl/datafile/data_i001.001.dbf';ALTER DATABASE RENAME FILE '/u01/oracle/oradata/bkp1/orcl/datafile/data_t001.001.dbf' to '/u02/oracle/oradata/orcl/datafile/data_t001.001.dbf';ALTER DATABASE RENAME FILE '/u01/oracle/oradata/bkp1/orcl/datafile/sysaux_01.dbf' to '/u02/oracle/oradata/orcl/datafile/sysaux_01.dbf';ALTER DATABASE RENAME FILE '/u01/oracle/oradata/bkp1/orcl/datafile/system_01.dbf' to '/u02/oracle/oradata/orcl/datafile/system_01.dbf';ALTER DATABASE RENAME FILE '/u01/oracle/oradata/bkp1/orcl/datafile/undotbs1_01.dbf' to '/u02/oracle/oradata/orcl/datafile/undotbs1_01.dbf';ALTER DATABASE RENAME FILE '/u01/oracle/oradata/bkp1/orcl/datafile/undotbs2_01.dbf' to '/u02/oracle/oradata/orcl/datafile/undotbs2_01.dbf';ALTER DATABASE RENAME FILE '/u01/oracle/oradata/bkp1/orcl/datafile/users_01.dbf' to '/u02/oracle/oradata/orcl/datafile/users_01.dbf';Agora abrimos o banco e vida nova:ALTER DATABASE OPEN;&nbsp;Feito banco totalmente migrado para o novo disco, os temp files podem ser dropados e re-criados, não é necessário copiar afinal são dados temporários ne!Bom era isso, espero que aproveitem e se divirtam tanto quanto eu me diverti nessa! Ate a próxima.