JDBC возвращает ошибку 01034 из Oracle 12c, но SqlPlus в порядке

используя Java7, с ojdbc7.jar в пути к классам

работает в Windows с 12c db и приложением Java7 на одном сервере

сбой в AIX с базой данных и приложением на разных серверах

(к сожалению, у меня нет доступа к серверу баз данных AIX)

12c tnsping SID выполняется успешно на сервере приложений AIX, отображая те же HOST и PORT, что и JdbcUrl=HOST:PORT:SID, используемые приложением Java7.

12c sqlplus может успешно подключиться к базе данных, но попытка подключения jdbc возвращает следующую ошибку:

ORA-01034: ORACLE недоступен ORA-27101: область общей памяти не существует IBM AIX RISC System/6000 Ошибка: 2: Нет такого файла или каталога Дополнительная информация: 2311 Дополнительная информация: 214767799

(sqlplus может подключиться, поэтому не предлагайте запуск Oracle)

заранее спасибо за любые предложения по устранению неполадок в клиентском приложении Java7 или подключении JDBC к удаленному серверу БД.


person 7579    schedule 19.12.2014    source источник
comment
Определен ли псевдоним 12c TNS (в вашем tnsnames.ora) с SID или именем службы; и действительно ли это соответствует псевдониму? Похоже, что конфиг был скопирован откуда-то еще, псевдоним остался прежним, но данные подключения были изменены, поэтому они больше не совпадают. Конечно, нет никаких требований, чтобы они совпадали, но это может сбить с толку, если они не совпадают. Пожалуйста, добавьте конфигурацию TNS к вопросу.   -  person Alex Poole    schedule 19.12.2014
comment
спасибо за быстрый ответ, Алекс --- JdbcUrl=jdbc:oracle:thin:@cstgdb501:1525:STG57 --- tnsnames.ora:STG57 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = cstgdb501)( ПОРТ = 1525)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = STG57) ))   -  person 7579    schedule 19.12.2014
comment
Соединение TNS использует имя службы, а не SID, поэтому, возможно, они просто разные в этой базе данных; возможно, старое имя службы было сохранено для совместимости. Является ли JDBC более счастливым с URL-адресом, подобным @cstgb501:1525/STG57, то есть с / вместо конечного :?   -  person Alex Poole    schedule 19.12.2014
comment
да, большое спасибо, Алекс, JDBC кажется гораздо более счастливым с символом косой черты после идентификатора ПОРТА - похоже, эта проблема решена   -  person 7579    schedule 20.12.2014


Ответы (1)


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

В URL-адресе JDBC используется конструкция SID, поскольку она заканчивается на :STG57. Если вместо этого вы сделаете его заканчивающимся на /STG57, вместо этого вы будете использовать конструкцию имени службы:

jdbc:oracle:thin:@cstgb501:1525/STG57

Затем вы будете использовать те же данные подключения, что и SQL*Plus через TNS.

Подробнее о синтаксисе URL JDBC можно прочитать в документации.

person Alex Poole    schedule 19.12.2014