Пограничный вопрос о 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?
имя 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)
)
)
Ответ Майка Атласа достаточно полон, но обратите внимание, что можно подключаться к 10g (или более поздним) БД, у которых нет опубликованного tnsname, используя [//]host_name[:port][/service_name]
HTH
C.