3 de fev. de 2008

Alterando o nome do Banco de Dados

Essa dica foi baseada no Metalink Note 15390.1

Após algumas tentativas, concluí que a melhor maneira consiste em dois passos: o primeiro é alterar o nome da instância e o segundo passo é alterar o nome do banco de dados.

Alterando o nome da instância

1. Finalize a instância:
SQL> shutdown immediate;
- Obrigatoriamente deve-se finalizar a instância em modo NORMAL ou IMMEDIATE

2. É recomendável uma cópia de todo o banco (arquivos de controle, redo e dados).

3. Altere a variável ORACLE_SID onde está configurada em seu servidor:
Windows:
Arquivos de registro ou em variáveis de ambiente.
Linux:
/etc/profile ou .bash_profile do usuário oracle.

4. Altere a variável ORACLE_SID atual:
Windows:
set ORACLE_SID=NEWSID

Linux:
export ORACLE_SID=NEWSID

5. Altere o nome do spfile:
$ mv $ORACLE_HOME/dbs/spfileOLDSID.ora $ORACLE_HOME/dbs/spfileNEWSID.ora

6. Crie um novo arquivo de senhas:
$ orapwd file=$ORACLE_HOME/dbs/orapwNEWSID password=PASSWORD entries=5

7. Inicie a instância e verifique se o nome da instância mudou:
SQL> show parameter instance_name;

8. Verifique se o sistema está funcionando normalmente com o novo SID



Alterando o nome do banco de dados

1. Force um checkpoint
SQLP> alter system checkpoint;
SQLP> alter system switch logfile;

- Faça esse segundo passo umas 3 vezes para forçar a gravação de todos os redolog.

2. Grave um controlfile para edição:
SQL> alter database backup controlfile to trace as 'ccf.sql' resetlogs;

- Certifique-se de não existir um arquivo ccf.sql antes deste passo.

3. Crie um pfile para edição:
SQL> create pfile='pfile.ora' from spfile;

4. Finalize a instância:
SQL> shutdown immediate

- Obrigatoriamente deve-se finalizar a instância em modo NORMAL ou IMMEDIATE

5. Edite o pfile salvo e altere as opções:
db_name=NEWDBNAME
db_unique_name=NEWDBNAME

6. Edite o controlfile salvo (ccf.sql) e efetue as seguintes alterações:

DE:
CREATE CONTROLFILE REUSE DATABASE "OLDDBNAME" RESETLOGS
...
PARA:
CREATE CONTROLFILE SET DATABASE "NEWDBNAME" RESETLOGS ...

- Altere a paralavra 'REUSE' para 'SET' e 'OLDDBNAME' para 'NEWDBNAME'.

--
É possível recriar o controlfile utilizando a sintaxe:
CREATE CONTROLFILE REUSE SET DATABASE "NEWDBNAME" RESETLOGS ...

Mas esta sintaxe substituirá o controlfile existente sem mostrar erros.
--

DE:
RECOVER DATABASE USING BACKUP CONTROLFILE
PARA:
-- RECOVER DATABASE USING BACKUP CONTROLFILE
- Comente esta linha

O último comando do arquivo ccf.sql deverá ser:
ALTER DATABASE OPEN RESETLOGS

Na edição do arquivo, lembre-se de retirar todas as linhas sem conteúdo que encontrar.

--
Grave e saia do ccf.sql, ele está pronto para o propósito

7. Altere o nome dos controlfiles atuais para evitar problemas no momento de gerar os novos controlfiles.

8. Conecte no banco e grave o novo arquivo de parametros
$ sqlplus / as sysdba
SQL> create spfile from pfile='pfile.ora';

9. Execute o arquivo ccf.sql:
SQL> @ccf.sql

Este arquivo criará novamente os controlfiles alterando o nome do banco de dados para o novo nome.

Verifique os nomes para verificar se tudo foi mudado realmente:
SQL> show parameter name;

Após este processo, finalize a instância e inicie novamente para verificar se tudo está correto.

--
DATABASE NAME CHANGED!
--

:)