Impossibile modificare il nome del servizio per Oracle


9

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.barin mydbsolo:

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 registerper 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.

Risposte:


5

Sono sicuro che mi manca qualcosa di abbastanza ovvio, ma non riesco a capire di cosa si tratti.

Sì, era qualcosa di molto ovvio ...

Il parametro DB_DOMAINconteneva ancora foo.bare quindi l'istanza si è registrata usando mydb.foo.bar.

Dopo aver fatto a

alter system set db_domain='' scope=spfile; 

e facendo rimbalzare il database tutto funziona come previsto ora.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.