Não é possível alterar o nome do serviço para Oracle

9

Estou tentando alterar o nome do serviço de uma instalação do Oracle 11.2.0.3 em um servidor Windows 2003.

Durante a instalação, o nome do serviço foi definido com o domínio padrão, mas gostaríamos de nos livrar dele.

O que fiz até agora (e o que funcionou antes) para alterar o nome do serviço mydb.foo.barpara mydbapenas:

alter system set service_names = 'mydb' scope = both;
alter database rename global_name to mydb;

O que parece ter funcionado:

SQL> show nome do parâmetro

NOME TIPO VALOR
------------------------------------ ----------- --- ---------------------------
db_name string mydb
db_unique_name string mydb
global_names booleano FALSE
instance_name string mydb
service_names string mydb
SQL>

(Eu removi algumas propriedades da saída acima que não são relevantes)

Em seguida, use alter system registerpara se registrar novamente com o ouvinte.

Isso não mostrou efeito, então reiniciei o banco de dados e o ouvinte, ainda sem sorte.

A situação atual é a seguinte:

select name from v$active_services retorna:

SERVICE_ID | NOME NOME DA REDE       
----------- + ----------------- + --------------------
1 | FUNDO SYS $ |                    
2 US $ SYS |                    
3 mydb mydb           
5 mydbXDB mydbXDB        
6 mydb.foo.bar | mydb.foo.bar

Portanto, por algum motivo, o nome do serviço antigo ainda está lá e em execução.

Ao tentar parar o serviço usando

SQL> exec dbms_service.stop_service ('mydb.foo.bar');
Procedimento PL / SQL concluído com sucesso.

nenhum erro é relatado, mas ao tentar excluir o serviço, o Oracle não me permite:

SQL> exec dbms_service.delete_service ('mydb.foo.bar');
BEGIN dbms_service.delete_service ('mydb.foo.bar'); FIM;

*
ERRO na linha 1:
ORA-44305: o serviço mydb.foo.bar está em execução
ORA-06512: no "SYS.DBMS_SYS_ERROR", linha 86
ORA-06512: no "SYS.DBMS_SERVICE", linha 454
ORA-06512: no "SYS.DBMS_SERVICE", linha 343
ORA-06512: na linha 1

Eu verifiquei que não tenho conexões abertas usando esse serviço:

select count(*)
FROM v$session
where service_name = 'mydb.foo.bar';

retornado 0(zero)

Também recriei o serviço Windows usando oradim, mas sem sucesso.

Em um ponto eu corri

alter system set service_names = 'mydb,mydb.foo.bar' scope = both;

poderia ser essa a razão de eu ter os dois agora?

Mas depois de alterar service_names para apenas um nome, o segundo deveria ter desaparecido, não deveria?

Se eu não conseguir que o segundo serviço desapareça, seria suficiente fazer a instância se registrar com o ouvinte usando o nome abreviado do serviço, em vez do longo.

Tenho certeza de que estou perdendo algo bastante óbvio, mas não consigo descobrir o que é.

um cavalo sem nome
fonte

Respostas:

5

Tenho certeza de que estou perdendo algo bastante óbvio, mas não consigo descobrir o que é.

Sim, era algo muito óbvio ...

O parâmetro DB_DOMAINainda continha foo.bare, portanto, a instância se registrou usando mydb.foo.bar.

Depois de fazer um

alter system set db_domain='' scope=spfile; 

e, devolvendo o banco de dados, tudo está funcionando como esperado agora.

um cavalo sem nome
fonte