Невозможно изменить имя службы для Oracle

9

Я пытаюсь изменить имя службы установки Oracle 11.2.0.3 на сервере Windows 2003.

Во время установки имя службы было определено с доменом по умолчанию, но мы хотели бы избавиться от этого.

То , что я сделал до сих пор (и то , что работало раньше) , чтобы изменить имя службы , mydb.foo.barчтобы mydbтолько:

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

Который, кажется, сработал:

SQL> показать имя параметра

НАИМЕНОВАНИЕ ТИП ЗНАЧЕНИЕ
------------------------------------ ----------- --- ---------------------------
db_name строка mydb
db_unique_name строка mydb
global_names логическое FALSE
имя_экземпляра строка mydb
service_names string mydb
SQL>

(Я удалил некоторые свойства из вышеприведенного вывода, которые не имеют отношения)

Затем используйте alter system registerдля повторной регистрации слушателя.

Это не показало никакого эффекта, поэтому я перезапустил базу данных и слушателя, но все же не повезло.

Текущая ситуация выглядит следующим образом:

select name from v$active_services возвращает:

SERVICE_ID | ИМЯ | ИМЯ СЕТИ       
----------- + ----------------- + --------------------
1 | SYS $ BACKGROUND |                    
2 | SYS $ USERS |                    
3 | mydb | MYDB           
5 | mydbXDB | mydbXDB        
6 | mydb.foo.bar | mydb.foo.bar

По какой-то причине старое имя службы все еще там и работает.

При попытке остановить службу с помощью

SQL> exec dbms_service.stop_service ('mydb.foo.bar');
Процедура PL / SQL успешно завершена.

об ошибке не сообщается, но при попытке удалить сервис Oracle не разрешит мне:

SQL> exec dbms_service.delete_service ('mydb.foo.bar');
BEGIN dbms_service.delete_service ('mydb.foo.bar'); КОНЕЦ;

*
ОШИБКА в строке 1:
ORA-44305: сервис mydb.foo.bar работает
ORA-06512: в "SYS.DBMS_SYS_ERROR", строка 86
ORA-06512: в "SYS.DBMS_SERVICE", строка 454
ORA-06512: в "SYS.DBMS_SERVICE", строка 343
ORA-06512: в строке 1

Я проверил, что у меня нет открытых соединений, использующих этот сервис:

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

вернулся 0(ноль)

Я также заново воссоздал службу Windows, используя oradim, но безрезультатно.

Однажды я побежал

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

Может ли это быть причиной, почему у меня есть оба сейчас?

Но после смены service_names только на одно имя, второе должно было исчезнуть, не так ли?

Если я не смогу убрать вторую службу, достаточно было бы зарегистрировать экземпляр в слушателе, используя короткое имя службы, а не длинное.

Я уверен, что упускаю что-то довольно очевидное, но я не могу понять, что это такое.

a_horse_with_no_name
источник

Ответы:

5

Я уверен, что упускаю что-то довольно очевидное, но я не могу понять, что это такое.

Да, это было что-то очень очевидное ...

Параметр DB_DOMAINвсе еще содержится, foo.barи, следовательно, экземпляр зарегистрировался, используя mydb.foo.bar.

После выполнения

alter system set db_domain='' scope=spfile; 

и отскок базы данных все работает, как ожидалось.

a_horse_with_no_name
источник