Что такое TNS:listener в Контексте Oracle?

Пограничный вопрос о ServerFault, но изображенный я попробовал бы здесь сначала, так как у меня была удача с вопросами о Oracle в прошлом.

Я пытаюсь соединиться с базой данных оракула от PHP, и я получаю следующую ошибку.

ORA-12505: TNS:listener does not currently know of SID given in connect descriptor

Это - ошибка, о которой PHP сообщает, и ошибка, которая обнаруживается в listener.log Oracle.

Моя непосредственная проблема фиксирует эту ошибку. Больший вопрос, который я хотел бы, ответил, то, как модель связи Oracle работает?

Это находится в среде разработки, это работает на моей местной машине окон и работало вплоть до сих пор. К сожалению, окружающая среда была вручена мне (я не настраивал ее), и люди, которые действительно настраивали ее, недоступны, чтобы помочь мне отладить его.

Если я получал подобную ошибку с MySQL или PostgreSQL (две системы, я более знаком с), я проверил бы, чтобы гарантировать, что процесс базы данных бежал, и затем попытайтесь соединиться вручную с базой данных, используя имя пользователя/пароль/строку подключения. К сожалению, я не знаком с инструментами Oracle на окнах (кроме Разработчика SQL), и я не знаю то, что TNS:listener или SID находятся в контексте Oracle (у меня есть смутные представления, но смутные представления редко помогают, когда Вы отлаживаете что-то вроде этого),

Любые общие рекомендации ценились бы.

Обновления за комментарии:

Есть много записей в моем tnsnames.ora файле, соответствующем входе быть

OBS2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = steel-ae39650)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = OBS2)
    )
  )

Это не отражено в списке случаев, когда я бегу

    LSNRCTL> services

Таким образом, я думаю, что мой следующий вопрос, как я пытаюсь вручную запустить случай OBS2?

12
задан Alan Storm 25 January 2010 в 20:48
поделиться

2 ответа

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

Вы можете затем проверять, чтобы посмотреть, правильно ли прослушиватель TNS увидит службу правильно с помощью инструмента командной строки:

%>lsnrctl services

, который должен выводить что-то вроде следующего:

Service "myservice" has 1 instance(s).
  Instance "myinstance", status READY, has 1 handler(s) for this service...
    Handler(s):
      "D000" established:0 refused:0 current:0 max:1002 state:ready
         DISPATCHER <machine: LOCALHOST, pid: 12345>
         (ADDRESS=(PROTOCOL=tcp)(HOST=LOCALHOST)(PORT=6789))

. Можете ли вы опубликовать соответствующую запись TNS (в TNSNAMES.ORA файл)? Он расположен в Orahome \ Client или DB \ admin \ Network. Если у вас есть клиент и сервер, убедитесь, что обе копии TNSNAMES.ORA файл имеют правильные значения, просто чтобы быть в безопасности.

Вот пример правильного определения имени TNS в TNSNAMES.ORA под названием «MyDB»:

myDbAlias =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 12345)(QUEUESIZE = 100))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = myservice)
    )
  )
8
ответ дан 2 December 2019 в 21:43
поделиться

Ответ Майка Атласа достаточно полон, но обратите внимание, что можно подключаться к 10g (или более поздним) БД, у которых нет опубликованного tnsname, используя [//]host_name[:port][/service_name]

HTH

C.

1
ответ дан 2 December 2019 в 21:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: