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 disso.
O que fiz até agora (e o que funcionou antes) para alterar o nome do serviço mydb.foo.bar
para mydb
apenas:
alter system set service_names = 'mydb' scope = both;
alter database rename global_name to mydb;
O que parece ter funcionado:
SQL> mostra o nome do parâmetro NOME TIPO VALOR ------------------------------------ ----------- --- --------------------------- db_name string mydb db_unique_name string mydb global_names boolean FALSE instance_name string mydb service_names string mydb SQL>
(Removi algumas propriedades da saída acima que não são relevantes)
Em seguida, use alter system register
para registrar novamente com o ouvinte.
Isso não mostrou nenhum 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 | SYS$BACKGROUND | 2 | SYS$USERS | 3 | mydb | mydb 5 | mydbXDB | mydbXDB 6 | mydb.foo.bar | mydb.foo.bar
Então, por algum motivo, o antigo nome do serviço 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 deixa:
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: em "SYS.DBMS_SYS_ERROR", linha 86 ORA-06512: em "SYS.DBMS_SERVICE", linha 454 ORA-06512: em "SYS.DBMS_SERVICE", linha 343 ORA-06512: na linha 1
Verifiquei que não tenho conexões abertas usando esse serviço:
select count(*)
FROM v$session
where service_name = 'mydb.foo.bar';
devolvido 0
(zero)
Eu também recriei o serviço do Windows usando oradim, mas sem sucesso.
Em um momento 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 único nome, o segundo deveria ter desaparecido, não deveria?
Se eu não conseguir fazer com que o segundo serviço desapareça, bastaria fazer a instância registrar com o listener usando o nome do serviço curto, ao invés do longo.
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_DOMAIN
ainda continhafoo.bar
e, portanto, a instância se registrou usandomydb.foo.bar
.Depois de fazer um
e saltando o banco de dados tudo está funcionando como esperado agora.