Что такое TNS: слушатель в контексте Oracle?
пограничный вопрос ServerFault, но решил, что сначала попробую здесь, так как мне повезло с вопросами Oracle в прошлом.
Я пытаюсь подключиться к базе данных oracle из PHP, и я получаю следующую ошибку.
ORA-12505: TNS:listener does not currently know of SID given in connect descriptor
это ошибка, которую сообщает PHP, и ошибка, которая появляется в прослушивателе Oracle.бревно.
моя непосредственная проблема-исправление этой ошибки. Больший вопрос, на который я хотел бы ответить, - это как модель подключения Oracle работа?
Это в среде разработки, которая работает на моей локальной машине windows и работает до сих пор. К сожалению, окружающая среда была передана мне (я ее не настраивал) и людям, которые сделал set it up недоступны, чтобы помочь мне отладить его.
Если бы я получал аналогичную ошибку с MySQL или PostgreSQL (две системы, с которыми я более знаком), я бы проверил, чтобы убедиться, что процесс базы данных запущен, а затем попытался подключиться вручную в базу данных, используя строку username/password / connection. К сожалению, я не знаком с инструментами Oracle в windows (кроме разработчика SQL), и я не знаю, что такое TNS:listener или SID в контексте Oracle (у меня есть смутные идеи, но смутные идеи редко помогают, когда вы отлаживаете что-то вроде этого)
любой общий совет был бы признателен.
обновления для комментариев:
есть несколько entires в моем файл tnsnames.файл ora, соответствующая запись
OBS2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = steel-ae39650)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = OBS2)
)
)
Это не отражается в списке экземпляров, когда я запускаю
LSNRCTL> services
поэтому я думаю, что мой следующий вопрос: как я могу попытаться вручную запустить экземпляр OBS2?
3 ответов
имя 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 (в )? Он расположен в 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)
)
)
просто хотел добавить к этому, так как у меня недавно была аналогичная проблема с подключением, которая сводила меня с ума, пока я не понял, что происходит.
во-первых, ключевые слова SID и SERVICE_NAME не совсем одинаковы. Это было мое первое неверное предположение. Во многих средах вы можете обмениваться SID и SERVICE_NAME, но не всегда, это зависит.
тем не менее, ваша ошибка выдает проблему: вы указываете ОМР в строке подключения вместо ИМЯ_СЛУЖБЫ что tnsnames успешно использует.
Итак, если вы указываете строку подключения в своем коде, попробуйте использовать ключевое слово SERVICE_NAME в строке подключения (*или, если вы уже используете SERVICE_NAME и не можете подключиться, попробуйте использовать ключевое слово SID*).
слишком упрощенный ответ я знаю, но легко попробовать и может спасти кого-то от головной боли.
надеюсь, это поможет.
ответ Майка Атласа довольно полный, но обратите внимание, что вы можете подключиться к 10G (или более поздней версии) DBs, у которых нет опубликованного tnsname, используя [//]host_name[:port][/service_name]
HTH
С.