настройка Oracle и драйвера ODBC

Teteshnik

Ситуация такая.
на WinXP стоял клиент оракл ЕЕ и девелопер сьют.
Для теста project.net нужен был локальный сервер.
поставил. Скачал оракл ХЕ. т.к. жал галочки по-умолчанию, то наверно не заметил как поставил его вместе с клиентом. Короче теперь у меня 2 клиента. Коннект к удаленному серверу восстановили на новом клиенте, но вот конект project.net к своей базе не появился. Знающий человек посмотрел и озвучил версию что не работает ODBC. Так, напимер, не могу подконектиться из Access по ODBC к ораклу. Драйвер скачал, установил, ничего не изменилось.
Прошу у знающих людей проверенных ссылок на мануал по исправлению работы ODBC, и вообще хочу восстановить работу первого клиента т.к. он побольше, а в regedit лезть без мануала страшно. Говорят, удалить оракл можно только с format c:
Устанавливать, конечно, второй клиент было ошибкой, но на ошибках учатся...

mudvaynefan

если ты ничего не удалял, может поможет просто установить переменную среды ORACLE_HOME в нужное место?

Teteshnik

Значит, вот, в переменных средах ORACLE_HOME нет, но путь к серверу XE(тот же что и на картинке) стоит в переменной PATH на первом месте. т.е. система находит там оракл и видимо дальше не идет? И получается надо всего лишь перенести путь к серверу в конец? Но что у ХЕ server - это client?
Ну ладно с ораклом, а с ODBC есть идеи?

mudvaynefan

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

elena-kotenok75

Говорят, удалить оракл можно только с format c:
удаление одной ветки в реестре
удаление папки с установленным ораклом
плюс, при желании - удаление папки в Program Files - что-то там про Inventory..

mudvaynefan

:grin:
Если последовать твоей инструкции имхо останется неработающий odbc драйвер

Teteshnik

Это, конечно, смешно, но перемещение пути к серверу в конец переменной PATH исправило почти все проблемы! ODBC работает, старый клиент работает. Правда, сервер теперь не работает вроде, как собственно не работал и при его клиенте. С сервером я что-то напортачил. Так что спасибо, ты меня озарил! Вообще насчет ошибки коннекта к project.net я все же здесь напишу, может кто встречал.
Error while executing data base script Unable to obtain connection for URL jdbc:oracle:thin:@localhost:1521:XE JDBC provider exception: Unable to obtain connection for URL jdbc:oracle:thin:@localhost:1521:XE Error codes: [null, 0] Driver exception: java.sql.SQLException: Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was: localhost:1521:XE

katrin2201

Пачка сервисов, мусор в PATHе, и еще бог знает что и где.

elena-kotenok75

откуда пачка сервисов в клиенте?

katrin2201

А кто сказал, что речь о клиенте?

Teteshnik

решился на переустановку. В Пасе действительно оставил свой путь. Сервисы все удалил. Но много оставил в реестре. Руками удалил все кроме LEGACY***

mbolik1

Error while executing data base script Unable to obtain connection for URL jdbc:oracle:thin:@localhost:1521:XE JDBC provider exception: Unable to obtain connection for URL jdbc:oracle:thin:@localhost:1521:XE Error codes: [null, 0] Driver exception: java.sql.SQLException: Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was: localhost:1521:XE
Это означает что при подключении клиент не находит базы с переданным именем ("XE").
Вариантов несколько, основные:
1. База называется не так.
2. База не стартовала.
3. База вообще не создана.
Проще всего оценить если ты выложишь скриншот Служб в районе слова oracle

Teteshnik

Вобщем такие дела, я переустановил сервер. теперь есть возможность зайти через браузер.
через SQL консоль тоже коннект проходит.
Теперь интересное. Если конектиться через SQL Navigator, то вылетает
ORA-12154: TNS:невозможно разрешить заданный идентификатор соединения
Make sure connection parameters are correct and try again

tnsnames.ora
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPHOST = 127.0.0.1PORT = 1521
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPCKEY = EXTPROC_FOR_XE
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPCKEY = EXTPROC_FOR_XE
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)

mbolik1

Видимо хватает не тот tnsnames.ora
Пропиши себе в системе переменную TNS_ADMIN

Teteshnik

Прописал, ничего не изменилось.
Вобщем если конектиться из родного серверу клиента, то
connect to XE:
ORA-12541: TNS:no listener (хотя он в папке есть)
connect to ORACLR_CONNECTION_DATA:
ORA-28547: connection to server failed, probable Oracle Net admin error

katrin2201

На порте 1521 вообще кто-нибудь слушает?

Teteshnik

TCP localhost:1521 localhost:0 LISTENING 3844 [tnslsnr.exe]

Teteshnik

Блядь, просто пиздец. Я чо-то сделал и все заработало. Узнаю чо, напишу.

Teteshnik

listener.ora должен выглядеть так
в списке SID_LIST в SID_LIST_LISTENER должно быть
 ...   
(SID_DESC =
(SID_NAME = XE)
(ORACLE_HOME = c:\oraclexe\app\oracle\product\10.2.0\server)
(GLOBAL_DBNAME = 127.0.0.1)
)
...

Teteshnik

тогда такой вопрос.
Listener - это ведь файл который лежит на сервере?
Вроде да, тогда как можно сделать так чтобы листенер грузился сам по себе из папки с сервером, а tnsnames из папки с клиентом?

Teteshnik

Если у кого будет еще геморой, то
1) это что уже про listener.ora написал
2) NLS_LANG в реестре сервера и клиента должен совпадать и быть равным RUSSIAN_RUSSIA.CL8MSWIN1251
3) в sqlnet.ora должна быть только строка
SQLNET.AUTHENTICATION_SERVICES = (NTS)
Хотя после всего этого не работает вебинтерфейс, но он уже нахрен не сдался.

saveliev_a

NLS_LANG в реестре сервера и клиента должен совпадать и быть равным RUSSIAN_RUSSIA.CL8MSWIN1251
Вот это далеко не всегда так. Я использую UTF8.

Teteshnik

RUSSIAN_RUSSIA.CL8UTF8
так?
у меня было 3 варианта.
RUSSIAN_RUSSIA.CL8MSWIN1251
RUSSIAN_CL8.CL8MSWIN1251 - вроде так
AMERIKAN_AMERIKA.CL8MSWIN1251 - вроде так
подошел только один

saveliev_a

RUSSIAN_CIS.AL32UTF8

saveliev_a

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

Teteshnik

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

saveliev_a

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

Teteshnik

12514, еще какая-то. Когда oracle говорит, что мол не могу понять твой NLS, трудно не поверить + не у одного меня такие проблемы, но ответы пишут не все. Самое сложное, что я добился таки работы. но вот при коннекте project.net выдает все ту же ошибку про NLS. И я хз какую именно нужно установить чтобы все заработало. Попробую UTF8 завтра поставить.

mbolik1

Listener - это ведь файл который лежит на сервере?
Нет, Listener — это процесс который слушает порт(1521) и передаёт команды на экземпляр оракла. Listener.ora — это его настроечный файл.
Вроде да, тогда как можно сделать так чтобы листенер грузился сам по себе из папки с сервером, а tnsnames из папки с клиентом?
листенер работает сам по себе, а tnsnames берётся из одного из клиентов на основании кучи правил (большинству приложений хватает TNS_ADMIN, но не всем поэтому проще иметь одинаковые sqlnet.ora и tnsnames.ora в каждом из клиентов.
2) NLS_LANG в реестре сервера и клиента должен совпадать и быть равным RUSSIAN_RUSSIA.CL8MSWIN1251

Нет, не должны. Тем более это не верный nls_lang. (RUSSIAN_CIS.CL8MSWIN1251)
Вообще кодировка не влияет на работу листенера и базы, только на клиента.
3) в sqlnet.ora должна быть только строка

Видимо по этому у тебя и не работает tnsnames, допиши ещё:
NAMES.DIRECTORY_PATH=(tnsnames, hostname)

вот при коннекте project.net выдает все ту же ошибку про NLS. И я хз какую именно нужно установить чтобы все заработало. Попробую UTF8 завтра поставить.

Я не знаю откуда берёт ODBC настройки NLS по умолчанию, поэтому советую проверить везде где ты их менял (например в реестре поэтому что из все варианты которые ты здесь писал не правильные.

Teteshnik

Спасибо. Познавательно.
Выставил, кстати, твой NLS_LANG
Выдает ошибку
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
список моих NLS такой.
RUSSIAN_CIS.CL8MSWIN1251
AMERICAN_AMERICA.CL8MSWIN1251
RUSSIAN_RUSSIA.CL8MSWIN1251
С последним работает, с остальными нет. выставление любого из остальных двух вызывает
ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified

mbolik1

ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Это значит либо oracle не запущен либо не правильно выставлен параметр ORACLE_SID

mbolik1

С последним работает, с остальными нет. выставление любого из остальных двух вызывает
ORA-00604: error occurred at recursive SQL level 1
ORA-12705: Cannot access NLS data files or invalid environment specified
Попробуй выставить ORACLE_HOME
Оставить комментарий
Имя или ник:
Комментарий: