Разница между использованием имени 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);