No se puede cambiar el nombre del servicio para Oracle

9

Estoy tratando de cambiar el nombre del servicio de una instalación de Oracle 11.2.0.3 en un servidor Windows 2003.

Durante la instalación, el nombre del servicio se definió con el dominio predeterminado, pero nos gustaría deshacernos de eso.

Lo que he hecho hasta ahora (y lo que funcionó antes) para cambiar el nombre del servicio mydb.foo.bara mydbsolo:

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

Lo que parece haber funcionado:

SQL> mostrar nombre del parámetro

NOMBRE TIPO VALOR
------------------------------------ ----------- --- ---------------------------
db_name string mydb
db_unique_name string mydb
global_names boolean FALSE
nombre_instancia string mydb
service_names string mydb
SQL>

(Eliminé algunas propiedades de la salida anterior que no son relevantes)

Luego, use alter system registerpara volver a registrarse con el oyente.

Esto no mostró ningún efecto, así que reinicié la base de datos y el oyente, todavía no tuve suerte.

La situación actual es la siguiente:

select name from v$active_services devoluciones:

ID_Servicio | NOMBRE | NOMBRE DE RED       
----------- + ----------------- + --------------------
1 | SYS $ BACKGROUND |                    
2 | SYS $ USUARIOS |                    
3 | mydb | mydb           
5 | mydbXDB | mydbXDB        
6 | mydb.foo.bar | mydb.foo.bar

Entonces, por alguna razón, el antiguo nombre del servicio todavía está allí y ejecutándose.

Al intentar detener el servicio usando

SQL> exec dbms_service.stop_service ('mydb.foo.bar');
Procedimiento PL / SQL completado con éxito.

no se informa ningún error, pero cuando intento eliminar el servicio, Oracle no me deja:

SQL> exec dbms_service.delete_service ('mydb.foo.bar');
COMIENZA dbms_service.delete_service ('mydb.foo.bar'); FINAL;

* *
ERROR en la línea 1:
ORA-44305: el servicio mydb.foo.bar se está ejecutando
ORA-06512: en "SYS.DBMS_SYS_ERROR", línea 86
ORA-06512: en "SYS.DBMS_SERVICE", línea 454
ORA-06512: en "SYS.DBMS_SERVICE", línea 343
ORA-06512: en la línea 1

Verifiqué que no tengo conexiones abiertas usando ese servicio:

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

devuelto 0(cero)

También volví a recrear el servicio de Windows usando oradim, pero fue en vano.

En un momento corrí

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

¿podría ser esa la razón por la que tengo ambas ahora?

Pero después de cambiar service_names a un solo nombre, el segundo debería haber desaparecido, ¿no?

Si no puedo hacer que el segundo servicio desaparezca, sería suficiente hacer que la instancia se registre con el oyente utilizando el nombre corto del servicio, en lugar del largo.

Estoy seguro de que me falta algo bastante obvio, pero no puedo entender qué es.

un caballo sin nombre
fuente

Respuestas:

5

Estoy seguro de que me falta algo bastante obvio, pero no puedo entender qué es.

Sí, era algo muy obvio ...

El parámetro DB_DOMAINaún contenía foo.bary, por lo tanto, la instancia se registró utilizando mydb.foo.bar.

Después de hacer un

alter system set db_domain='' scope=spfile; 

y rebotando en la base de datos, todo funciona como se espera ahora.

un caballo sin nombre
fuente