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.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> 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 register
para 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 é.
fonte