Sto cercando di cambiare il nome del servizio di un'installazione Oracle 11.2.0.3 su un server Windows 2003.
Durante l'installazione il nome del servizio è stato definito con il dominio predefinito, ma vorremmo liberarcene.
Cosa ho fatto finora (e cosa ha funzionato prima) per cambiare il nome del servizio mydb.foo.bar
in mydb
solo:
alter system set service_names = 'mydb' scope = both;
alter database rename global_name to mydb;
Che sembra aver funzionato:
SQL> mostra il nome del parametro NOME TIPO VALORE ------------------------------------ ----------- --- --------------------------- nome_db stringa mydb db_unique_name stringa mydb global_names booleano FALSO nome_istanza stringa mydb service_names string mydb SQL>
(Ho rimosso alcune proprietà dall'output sopra che non sono rilevanti)
Quindi utilizzare alter system register
per ri-registrarsi con il listener.
Questo non ha mostrato alcun effetto, quindi ho riavviato il database e l'ascoltatore, ancora senza fortuna.
La situazione attuale è la seguente:
select name from v$active_services
ritorna:
SERVICE_ID | NOME | NOME DELLA RETE ----------- + ----------------- + -------------------- 1 | SYS $ BACKGROUND | 2 | SYS $ USERS | 3 | mydb | mydb 5 | mydbXDB | mydbXDB 6 | mydb.foo.bar | mydb.foo.bar
Quindi, per qualche motivo, il vecchio nome del servizio è ancora presente e funzionante.
Quando si tenta di interrompere l'utilizzo del servizio
SQL> exec dbms_service.stop_service ('mydb.foo.bar'); Procedura PL / SQL completata correttamente.
non viene segnalato alcun errore, ma quando si tenta di eliminare il servizio, Oracle non mi consente:
SQL> exec dbms_service.delete_service ('mydb.foo.bar'); BEGIN dbms_service.delete_service ('mydb.foo.bar'); FINE; * ERRORE alla riga 1: ORA-44305: il servizio mydb.foo.bar è in esecuzione ORA-06512: a "SYS.DBMS_SYS_ERROR", linea 86 ORA-06512: a "SYS.DBMS_SERVICE", linea 454 ORA-06512: a "SYS.DBMS_SERVICE", linea 343 ORA-06512: alla linea 1
Ho verificato di non avere connessioni aperte utilizzando quel servizio:
select count(*)
FROM v$session
where service_name = 'mydb.foo.bar';
restituito 0
(zero)
Ho anche ricreato il servizio Windows usando oradim, ma senza risultati.
A un certo punto ho corso
alter system set service_names = 'mydb,mydb.foo.bar' scope = both;
potrebbe essere questo il motivo per cui ho entrambi adesso?
Ma dopo aver cambiato service_names in un solo nome, il secondo avrebbe dovuto sparire, non è vero?
Se non riesco a far sparire il secondo servizio, basterebbe fare in modo che l'istanza si registri con il listener usando il nome breve del servizio, piuttosto che quello lungo.
Sono sicuro che mi manca qualcosa di abbastanza ovvio, ma non riesco a capire di cosa si tratti.