powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разные Service_Name в INIT.ora и v$Session ?
25 сообщений из 25, страница 1 из 1
Разные Service_Name в INIT.ora и v$Session ?
    #39302440
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Вопрос меня мучает: давно хотел спросить, но всё стеснялся.
Вопрос наверное к DBA-икам (сам я разработчик, живого DBA в жизни не видел)

Проблема:
С точки зрения разработчика очень привлекательно выглядит EZ CONNECT, но вот беда - он требует некоего service_name
Опытным путём я установил, что если прописывать в коннект строку, которую возвращает запрос
Код: plsql
1.
select * from global_name;

- то всё гарантированно работает. Получается, что global_name как бы работает и как service_name ??! Смущают две вещи:

не произойдёт ли чего плохого, если я переименую GLOBAL_NAME как-то покороче (DB_DOMAIN по неопытности был сначала сделан ооочень длинный). Ну чтобы в строке подключения ссылка на базу выглядела компактно.


в v$Session я тоже вижу какие-то service_name , но они выглядят странно:
Код: plaintext
1.
SYS$USERS
SYS$BACKGROUND
Существует ли какая-то связь между этими разными service_name?
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39302442
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39303580
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну допустим... То есть правильно я понял, что не следует пытаться устанавливать нужные service_name в базе через init-параметр service_names, а вместо этого пакет DBMS_SERVICE - это наше всё?
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39304143
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39304314
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, почитал. Для меня увы это - дебри, слишком далеко не хотелось бы углубляться.
Не уверен, зачем мне вообще эти service_names, но пока я понял, что если я хочу использовать какой-то service_name попроще в EZConnect'е, то не обязательно менять global_name базы, достаточно использовать пакет dbms_service. И бонусом в v$session я увижу свой красивый service_name. Правильно?

Надеюсь, если какой-то сервис прописан в статической регистрации, то это не мешает ему быть в динамической? Правильно?
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39304317
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Также не понимаю, для чего нужен параметр в init.ora SERVICE_NAMES.
Я боюсь его трогать ;-) но иногда заглядываю. Кажется, там всегда написано то же, что и
select * from global_name
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39304341
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как ты думаешь, почему параметр называется service_nameS ? Все таки S - признак множественного числа...
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39304740
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxmixТакже не понимаю, для чего нужен параметр в init.ora
Ну для начала неплохо бы понять для чего нужен сам init.ora - когда, как и для зачем он используется .
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39304816
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tru55,

Замечание справедливое. Но на это я возражу, что
вьюха DBA_SERVICES тоже содержит намёк на множественное число, но почему-то отображает совсем другой список.
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39304818
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

Неплохо бы, да.
С 1995 года мне это не удалось сделать.
Поэтому я решил идти от простого к сложному, и выяснить для начала, как правильно использовать один конкретный параметр.
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39304840
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxmixЗамечание справедливое. Но на это я возражу
Зачем возражать, когда проще прочесть том доки Database Reference.

SERVICE_NAMES specifies one or more names for the database service to which this
instance connects. You can specify multiple service names in order to distinguish
among different uses of the same database.
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39304960
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tru55MaxmixЗамечание справедливое. Но на это я возражу
Зачем возражать, когда проще прочесть том доки Database Reference.

SERVICE_NAMES specifies one or more names for the database service to which this
instance connects. You can specify multiple service names in order to distinguish
among different uses of the same database.

Да, так написано. Я читал это раз 300, наверное.
Но ведь примерно то же самое написано про DBMS_SERVICE.
А поспецифицировав вдоволь через два этих средства, мы видим два разных списка, и они не совпадают. От этого же с ума можно сойти!
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39305113
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxmixС 1995 года мне это не удалось сделать.
В 1995 году init.ora был гораздо нужнее, чем сегодня.
Современным версиям он нужен, скажем так, в исключительных ситуациях, поскольку для обычной работы заменен на spfile.
Управление spfile осуществляется посредством alter system set ... SCOPE = {spfile|both}.
Это я к тому, что параметры, обнаруженные в init.ora, имеют к работающему экземпляру весьма косвенное отношение - за исключением случая, когда экземпляр принудительно стартован с данного конкретного pfile (в общем случае - с какого-то pfile, не обязательно даже расположенного на сервере БД, что может привнести дополнительную путаницу).
Если выбросить из рассмотрения init.ora как неактуальный способ изменения параметров БД в обычной жизни, то добавление/удаление сервиса не потребует перезапуска базы.

Конкретно по сервисам:
- сервисы можно создавать и сносить по потребности, одна база может отзываться на кучу разных сервисов.
- сервис - не только строчка в дескрипторе соединения, но и объект администрирования. Ресурсный профиль, набор обслуживающих нод кластера и т.п. могут быть ассоциированы с сервисом. В конце концов, можно предотвратить соединение с базой конкретных приложений, просто погасив предназначенных для них сервис - к примеру, на время регламентных работ - не закрывая базу и не препятствуя работе других приложений.
- dbms_services - работает.
- dbms_services - позволяет делегировать вопросы управления сервисами СОЧ, не делегируя alter system.

В общем, я - за этот подход :)
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39305580
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

ну spfile я тоже считаю как init.ora, в том смысле что сервисы появляются в v$parameter а не в dba_services.

Немного я продвинулся в понимании, всем спасибо.
Теперь я могу EZ Connect подключаться к одному из сервисов,
перечисленных в dba_services, правда только если не забыть dbms_service.start_service, а иначе:

авторORA-12514: TNS:listener does not currently know of service requested in connect descriptor
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39305583
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
З.Ы. СОЧ - не смог расшифровать
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39305591
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Активные сервисы (поднятые) в V$ACTIVE_SERVICES (или V$SERVICES)
Те сервисы, которые указаны в SERVICE_NAMES сразу поднимаются при старте экземпляра
Можно на лету добавлять и поднимать сервисы просто изменяя SERVICE_NAMES (они автоматом добавятся и в DBA_SERVICES)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
SQL>  select value from v$parameter where name='service_names'; 

VALUE
--------------------------------------------------------------------------------
tst_hercules.xxx.ru -- Назначился по умолчанию

SQL>  select value from v$spparameter where name='service_names'; 

VALUE
--------------------------------------------------------------------------------


SQL>  select name from v$services; 

NAME
----------------------------------------------------------------
tst_hercules.xxx.ru
SYS$BACKGROUND
SYS$USERS

SQL>  select name from dba_services; 

NAME
----------------------------------------------------------------
SYS$BACKGROUND
SYS$USERS
tst.xxx.ru
tst_hermes.xxx.ru
tst_helios.xxx.ru
tst_hercules.xxx.ru

6 rows selected.

SQL>  !lsnrctl services | grep tst 
Service "tst.xxx.ru" has 1 instance(s).
  Instance "tst", status UNKNOWN, has 1 handler(s) for this service...
Service "tst_hercules.xxx.ru" has 1 instance(s).
  Instance "tst", status READY, has 1 handler(s) for this service...

SQL>  alter system set service_names='tst.xxx.ru', 'tst-bla-bla.xxx.su' scope=memory; 

System altered.

SQL>  select value from v$parameter where name='service_names'; 

VALUE
--------------------------------------------------------------------------------
tst.feb.ru, tst-bla-bla.xxx.su

SQL>  select name from v$services; 

NAME
----------------------------------------------------------------
 tst-bla-bla.xxx.su
tst.xxx.ru  -- Поднялись два новых в соответствии с SERVICE_NAMES
 tst_hercules.xxx.ru  -- Но старый не помер
SYS$BACKGROUND
SYS$USERS

SQL>  select name from dba_services; 

NAME
----------------------------------------------------------------
SYS$BACKGROUND
SYS$USERS
tst.xxx.ru
tst_hermes.xxx.ru
tst_helios.xxx.ru
tst_hercules.xxx.ru
 tst-bla-bla.xxx.su  -- И добавился в общий список (в словарь)

7 rows selected.

SQL>  !lsnrctl services | grep tst 
Service " tst-bla-bla.xxx.su " has 1 instance(s).
  Instance "tst", status READY, has 1 handler(s) for this service...
Service "tst.xxx.ru" has 2 instance(s).
  Instance "tst", status UNKNOWN, has 1 handler(s) for this service...
  Instance " tst ", status  READY , has 1 handler(s) for this service...
Service " tst_hercules.xxx.ru " has 1 instance(s).
  Instance "tst", status READY, has 1 handler(s) for this service...

...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39305603
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак, что вкратце удалось нарыть, может пригодится кому-нибудь:

При желании коннектиться через нами же придуманный произвольный SERVICE_NAME, существует минимум 3 способа:

Создание в Listener.ora в секции SID_LIST_LISTENER записи вида
Код: plaintext
1.
2.
3.
4.
    (SID_DESC =
      (ORACLE_HOME = C:\Oracle\product\10.2.0\db_1)
      (SID_NAME = <sid>)
      (GLOBAL_DBNAME=ServiceA)
    )
Подключаться можно прямо по ServiceA после перезапуска листенера, в базе никаких упоминаний о ServiceA не существует, подключение в v$session относится на умолчательный сервис SYS$USERS


Выполняем последовательность
Код: plsql
1.
2.
3.
    DBMS_SERVICE.CREATE_SERVICE('ServiceB','ServiceB');
    DBMS_SERVICE.START_SERVICE('ServiceB');
    alter system register;

Коннектиться можно по
Код: plaintext
ServiceB.narod.ru
сразу, но обязательно с указанием db_domain (narod.ru в этом примере).
Лучше быть явным и сразу задавать сложное имя, в этом случае "домен" может быть любым, необязательно == db_domain :
Код: plsql
1.
2.
3.
    DBMS_SERVICE.CREATE_SERVICE('ServiceB.oralovers.ru','ServiceB.oralovers.ru');
    DBMS_SERVICE.START_SERVICE('ServiceB.oralovers.ru');
    alter system register;


В момент старта сервиса он дописывается к текущему значению параметра SERVICE_NAMES .
В сеансе в v$sessions появляется имя сервиса ServiceB.oralovers.ru


Можно добавлять/перезаписывать параметр SERVICE_NAMES :
Код: plsql
1.
 alter system set service_names=ServiceC.oralovers.ru scope=both;


Здесь также коннектиться можно сразу. Несмотря на то, что теперь в параметре service_names содержится только один только что созданный сервис, остальные всё ещё живы, и могут быть просмотрены через
Код: plsql
1.
 select * from dba_services

и к ним можно коннектиться.


К сервису SYS$USERS нельзя подключиться по этому имени (мне не удалось во всяком случае)

Дополнения/замечания приветствуются.

Замечание №1: того, кто такую систему придумал, я бы по головке не погладил!
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39305605
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

Спасибо за уточнение о том, что сервис может быть не поднят, вьюха V$ACTIVE_SERVICES занесена в мемориз!

У вас некий tst.feb.ru прокрался как-то...которого изначально не было и в примере он не создаётся.. ошибка копипастинга?
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39305673
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перестартовал базу, и все сервисы, которые прекрасно работали - исчезли?!!
Что ж за невезуха.
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39305766
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Те, которые прописаны в SERVICE_NAMES должны подняться
А для остальных делают триггер на STARTUP (и DB_ROLE_CHANGE), где их и запускают через DBMS_SERVICE

Ну и в случае RAC (или Oracle Restarter) пользуются SRVCTL
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39306257
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

Это становится совсем интересным.
После серии экспериментов, получается примерно следующее.
После перезагрузки в service_names хранится только моё global_name,
остальные сервисы лежат мёртвым грузом в DBA_SERVICES.

Я выполняю
begin dbms_service.delete_service('A.B'); end;
begin dbms_service.create_service('A.B', 'A.B'); end;
begin dbms_service.start_service('A.B'); end;

и в результате сервис A.B становится временно рабочим.
Заодно автоматически изменяется параметр
service_names=A.B (global_name как бы стёрлось оттуда !)

После перезагрузки всё по новой.

До этого момента у меня сложилось впечатление, что DBMS_SERVICE - это предпочтительный способ создания сервисов. Получается, все кто в теме - триггеры используют? (озадаченно чешу затылок).

Есть ли ещё какие-нибудь части головоломки "как начать использовать подключения по SERVICE_NAME, а не по SID?"

P.S. К счастью, я не знаю что такое RAC! (мне не надо знать)
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39306258
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открой для себя файл параметров (значения параметров сохраняются при перезапуске) и значение параметра в памяти

PS. Нет тут ничего интересного
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39306283
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

Пускай даже DBMS_SERVICE добавляет сервис в список service_names временно, то есть
как бы с опцией scope=memory. На каком основании он заменяет действующее значение параметра?
То есть сразу после запуска базы:
service_names=global_name
После добавления сервиса "в память" должно быть:
service_names=global_name; A.B
По факту имеем:
service_names=A.B


А вот, как я бы реализовал:
Никаких параметров вообще, сервисы просматриваются только через системные вью и управляются только через пакет.
Сервис добавляется так:
DBMS_SERVICE.CREATE_SERVICE (p_new_service varchar2, p_autostart varchar2 := 'YES');
Все счастливы.
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39306288
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxmixВячеслав Любомудров,

Пускай даже DBMS_SERVICE добавляет сервис в список service_names временно, то есть
как бы с опцией scope=memory. На каком основании он заменяет действующее значение параметра?
То есть сразу после запуска базы:
service_names=global_name
После добавления сервиса "в память" должно быть:
service_names=global_name; A.B
По факту имеем:
service_names=A.BТы так нихрена и не понял


MaxmixА вот, как я бы реализовал:
Никаких параметров вообще, сервисы просматриваются только через системные вью и управляются только через пакет.
Сервис добавляется так:
DBMS_SERVICE.CREATE_SERVICE (p_new_service varchar2, p_autostart varchar2 := 'YES');
Все счастливы.Реализуй, че

Все-таки подумай еще например про стендбаи, раки и т.п.
...
Рейтинг: 0 / 0
Разные Service_Name в INIT.ora и v$Session ?
    #39306291
Maxmix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровТы так нихрена и не понял

Увы, нет.
Ладно, буду по старинке подключаться через global_name, пока этот способ работает.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разные Service_Name в INIT.ora и v$Session ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]