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 CONTROLFILEPARA:
-- 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!
--
:)