Почему я не могу подключиться через JDBC с помощью SQLcl

Я могу подключиться к удаленной базе данных с помощью SQLDeveloper.

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

Вот команда, которую я запускаю:

/bin/sql username/pass@delphix-vdb-n-1.va2.b2c.nike.com:1521/vdbsl14 

Я также попробовал:

/bin/sql username/pass@//delphix.......etc.

Вот ошибка, которую я получаю:

SQLcl: Release 4.2.0.16.131.1023 RC on Wed Jun 15 11:36:33 2016

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

  USER          = username
  URL           = jdbc:oracle:thin:@delphix-vdb-n-1.va2.b2c.nike.com:1521/vdbsl14
  Error Message = Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
Username? (RETRYING) ('username/*********@delphix-vdb-n-1.va2.b2c.nike.com:1521/vdbsl14'?) 

Также в SQLDeveloper я просто ввожу следующее в "custom jdbc url", и он подключается без каких-либо проблем, поэтому я надеялся, что смогу подключиться через командную строку, используя тот же URL, но пока он не работает:

jdbc:oracle:thin:@delphix-vdb-n-1.va2.b2c.nike.com:1521:vdbsl4

1 ответ

Решение

Похоже, ваш SID и имя службы не совпадают. В SQL Developer вы, похоже, используете SID - по крайней мере в указанном вами URL-адресе JDBC - как обозначено двоеточием в :vdbsl4,

В URL-адресе SQLcl используется имя службы, обозначенное косой чертой в /vdbsl14, Вместо этого следует использовать SID (т.е. изменить / to:) в этом URL, так как он использует JDBC:

sqlcl username/pass@delphix-vdb-n-1.va2.b2c.nike.com:1521:vdbsl14

В качестве альтернативы (и желательно, на мой взгляд) узнать, как на самом деле называется ваша услуга. Если у вас есть достаточные права на базу данных, вы можете сделать show parameters service_names из SQL Devleoper, или если у вас есть доступ к серверу в качестве администратора базы данных, вы можете сделать lsnrctl services или даже посмотреть на tnsnames.ora в случае, если определен псевдоним TNS, который показывает имя службы. (listener.ora вряд ли поможет, но может дать подсказки или, если вам повезет, показать имя службы по умолчанию).

Вы можете использовать это имя службы в URL JDBC, как /service_name,

Вы также можете использовать псевдоним TNS из SQLcl (или SQL*Plus). У вас уже может быть tnsnames.ora имеется в наличии; в противном случае вы можете скопировать его со своего сервера или создать свой собственный. Это может относиться к SID или имени службы.

Вы даже можете передать полное описание TNS в SQL*Plus (не уверен насчет SQLcl), но это немного неприятно. Если у вас нет / хотите tnsnames.ora Вы можете использовать синтаксис "easy connect", который такой же, как вы используете для SQLcl - но это должно быть имя службы, оно не допускает SID.

Другие вопросы по тегам