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.bar
a mydb
solo:
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 register
para 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.