Разница между использованием имени TNS и имени службы в соединении JDBC

У меня есть сервер на основе java (Tomcat), который подключается к базе данных Oracle с помощью соединения JDBC. Существует несколько способов подключения к базе данных: SID, TNS name, Service name.

Я хотел бы понять, в чем разница между каждым из этих соединений и каким будет рекомендуемое соединение (SID, TNS или service) при подключении к кластеризованной базе данных. Вот имя TNS, которое мы имеем для базы данных:

MY_NICE_TNS_NAME.MY_COMPANY.COM =

(DESCRIPTION =

  (ADDRESS = (PROTOCOL = TCP)(HOST = myhostname)(PORT = 1521))

  (LOAD_BALANCE = YES)

  (CONNECT_DATA =

   (SERVER = DEDICATED)

   (SERVICE_NAME = MY_NICE_SERVICE_NAME.MY_COMPANY.COM)

   (FAILOVER_MODE =

   (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5)

   )

  )

)

спасибо!

2 ответов


Oracle SID-это уникальное имя, которое однозначно идентифицирует ваш экземпляр / базу данных, где as Service name-это псевдоним TNS, который вы даете при удаленном подключении к базе данных, и это имя службы записывается в Tnsnames.файл ora на ваших клиентах, и он может быть таким же, как SID, и вы также можете дать ему любое другое имя.

SERVICE_NAME-это новая функция oracle 8i, в которой база данных может регистрироваться с помощью прослушивателя. Если база данных зарегистрирована на прослушиватель таким образом, вы можете использовать параметр SERVICE_NAME в tnsnames.Ora в противном случае-используйте SID в tnsnames.Ора.

также, если у вас есть OPS (RAC), у вас будет другое имя SERVICE_NAME для каждого экземпляра.

SERVICE_NAMES указывает одно или несколько имен для службы базы данных, к которой подключается данный экземпляр. Можно указать несколько имен служб, чтобы различать различные виды использования одной и той же базы данных. Например:

SERVICE_NAMES = sales.acme.com, widgetsales.acme.com

вы также можете использовать имена служб для идентификации одной службы, доступной из двух разных баз данных с помощью репликации.

в среде параллельного сервера Oracle необходимо задать этот параметр для каждого экземпляра.

TNS-это файл конфигурации sql * net, который определяет адрес баз данных для установления соединения с ними.


SERVICE_NAME - это псевдоним к экземпляру базы данных (или многим экземплярам). Основная цель этого - если вы используете кластер. Используя это, мы можем подключить определенную базу данных в кластере. И другим способом, используя SID (System IDentifier) мы можем подключиться к экземпляру базы данных, который является уникальный имя экземпляра базы данных Oracle.

короче говоря, SID = уникальное имя вашей БД, SERVICE_NAME = используемый псевдоним при подключении.

существует несколько способов предоставления информации о базе данных, таких как непосредственно указанные, tnsnames.ora (т. е. имя TNS), каталог LDAP, сетевые информационные службы.

A TNS (Transparent Network он Substrate) имя-это имя записи в tnsnames.ora файл, который хранится в $ORACLE_HOME/network/admin
Этот файл содержит информацию, которая используется системой для подключения к базе данных Oracle. Используя это, клиент может прозрачно извлеките связанную с сервером информацию. Он содержит следующую информацию

PROTOCOL
HOST IP ADDRESS
PORTNO
SID  or SERVICE_NAME

Е. Г

 mydb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.35.15.1)(PORT = 1521))
    (CONNECT_DATA = (SID = mydb))

драйверы JDBC подключаются к строке подключения с помощью TNS следующим образом

System.setProperty("oracle.net.tns_admin", PATH_TO_TNSNAMES.ORA);
Class.forName ("oracle.jdbc.OracleDriver");
dbUrl = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST="+IPHOST+")(PORT="+PORT+"))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME="+DBNAME+")))"

conn = DriverManager.getConnection(dbUrl, USERNAME, PASSWORD);