在JDBC连接中使用TNS名称和服务名称之间的区别

时间:2013-04-04 18:55:22

标签: oracle tomcat jdbc

我有一个基于java的服务器(Tomcat),它使用JDBC连接连接到Oracle数据库。有多种方法可以连接数据库:SID,TNS名称,服务名称。

我想了解每个连接之间的区别是什么,如果连接到群集数据库,建议的连接(SID,TNS或服务)是什么。这是我们为数据库提供的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 个答案:

答案 0 :(得分:10)

ghci test.hs 是数据库实例(或许多实例)的别名。这样做的主要目的是运行集群。使用此功能,我们可以连接群集中的特定数据库。换句话说,使用SERVICE_NAME S ystem ID entifier),我们可以连接到数据库实例,这是一个唯一名称对于Oracle数据库实例。

简而言之,SID =您的数据库的唯一名称,SERVICE_NAME =连接时使用的别名。

有几种方法可以提供数据库信息,如Directly Specified,tnsnames.ora(即TNS名称),LDAP目录,网络信息服务。

TNS( T 透明 N \ network> S ubstrate)名称是SID文件中条目的名称,保持在tnsnames.ora
此文件包含系统用于连接到oracle数据库的信息。使用此客户端可以透明地获取服务器关联信息。它包含以下信息

$ORACLE_HOME/network/admin

E.g

PROTOCOL
HOST IP ADDRESS
PORTNO
SID  or SERVICE_NAME

JDBC驱动程序使用TNS连接连接字符串,如下所示

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

答案 1 :(得分:6)

Oracle SID是唯一标识您的实例/数据库的唯一名称,其中服务名称是您远程连接到数据库时提供的TNS别名,此服务名称记录在客户端上的Tnsnames.ora文件中可以与SID相同,你也可以给它任何你想要的其他名称。

SERVICE_NAME是oracle 8i以后的新功能,其中数据库可以向侦听器注册自己。如果数据库以这种方式向侦听器注册,那么您可以在tnsnames.ora中使用SERVICE_NAME参数,否则 - 在tnsnames.ora中使用SID。

此外,如果您有OPS(RAC),则每个实例都有不同的SERVICE_NAME。

SERVICE_NAMES为此实例连接的数据库服务指定一个或多个名称。您可以指定多个服务名称,以区分同一数据库的不同用途。例如:

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

您还可以使用服务名称来识别通过使用复制从两个不同数据库中获得的单个服务。

在Oracle Parallel Server环境中,必须为每个实例设置此参数。

TNS是sql * net配置文件,它定义了用于建立与它们的连接的数据库地址。