Ich versuche, den Dienstnamen einer Oracle 11.2.0.3-Installation auf einem Windows 2003-Server zu ändern.
Während der Installation wurde der Dienstname mit der Standarddomäne definiert, aber wir möchten das entfernen.
Was ich bisher getan hat (und was vor gearbeitet hat) , um die Service - Namen zu ändern , mydb.foo.bar
um mydb
nur:
alter system set service_names = 'mydb' scope = both;
alter database rename global_name to mydb;
Was scheint funktioniert zu haben:
SQL> Parametername anzeigen NAME TYPE VALUE ------------------------------------ ----------- --- --------------------------- db_name string mydb db_unique_name string mydb global_names boolean FALSE Instanzname Zeichenfolge mydb service_names string mydb SQL>
(Ich habe einige Eigenschaften aus der obigen Ausgabe entfernt, die nicht relevant sind.)
Verwenden Sie dann, um alter system register
sich erneut beim Listener zu registrieren.
Dies zeigte keine Auswirkung, so dass ich die Datenbank und den Listener neu startete, immer noch kein Glück.
Die aktuelle Situation ist wie folgt:
select name from v$active_services
kehrt zurück:
SERVICE_ID | NAME | NETZWERKNAME ----------- + ----------------- + -------------------- 1 | SYS $ HINTERGRUND | 2 | SYS $ USERS | 3 | mydb | mydb 5 | mydbXDB | mydbXDB 6 | mydb.foo.bar | mydb.foo.bar
Aus irgendeinem Grund ist der alte Dienstname immer noch vorhanden und wird ausgeführt.
Beim Versuch, den Dienst mit zu beenden
SQL> exec dbms_service.stop_service ('mydb.foo.bar'); PL / SQL-Prozedur erfolgreich abgeschlossen.
Es wird kein Fehler gemeldet, aber beim Versuch, den Dienst zu löschen, lässt Oracle mich nicht zu:
SQL> exec dbms_service.delete_service ('mydb.foo.bar'); BEGIN dbms_service.delete_service ('mydb.foo.bar'); ENDE; * * FEHLER in Zeile 1: ORA-44305: Dienst mydb.foo.bar wird ausgeführt ORA-06512: bei "SYS.DBMS_SYS_ERROR", Zeile 86 ORA-06512: unter "SYS.DBMS_SERVICE", Zeile 454 ORA-06512: unter "SYS.DBMS_SERVICE", Zeile 343 ORA-06512: in Zeile 1
Ich habe überprüft, dass ich mit diesem Dienst keine offenen Verbindungen habe:
select count(*)
FROM v$session
where service_name = 'mydb.foo.bar';
zurückgegeben 0
(Null)
Ich habe auch den Windows-Dienst mit oradim neu erstellt, aber ohne Erfolg.
Irgendwann rannte ich
alter system set service_names = 'mydb,mydb.foo.bar' scope = both;
Könnte das der Grund sein, warum ich jetzt beides habe?
Aber nachdem service_names nur in einen einzigen Namen geändert wurde, sollte der zweite weg sein, nicht wahr?
Wenn ich den zweiten Dienst nicht ausschalten kann, reicht es aus, die Instanz beim Listener unter Verwendung des kurzen Dienstnamens und nicht des langen zu registrieren.
Ich bin sicher, ich vermisse etwas ziemlich Offensichtliches, aber ich kann nicht herausfinden, was es ist.