web-dev-qa-db-ja.com

JDBC接続でのTNS名とサービス名の使用の違い

JDBC接続を使用してOracleデータベースに接続するJavaベースのサーバー(Tomcat))があります。データベースに接続するには、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)

   )

  )

)

ありがとう!

17
Luis Garcia

Oracle SIDは、インスタンス/データベースを一意に識別する一意の名前です。サービス名は、データベースにリモート接続するときに指定するTNSエイリアスであり、このサービス名はクライアントのTnsnames.oraファイルに記録されます。 SIDと同じで、他の名前を付けることもできます。

SERVICE_NAMEは、データベースがリスナーに登録できるOracle 8i以降の新機能です。データベースがこの方法でリスナーに登録されている場合は、tnsnames.oraでSERVICE_NAMEパラメータを使用できます。そうでない場合は、tnsnames.oraでSIDを使用します。

また、OPS(RAC)がある場合は、インスタンスごとに異なるSERVICE_NAMEがあります。

SERVICE_NAMESは、このインスタンスが接続するデータベースサービスの1つ以上の名前を指定します。同じデータベースのさまざまな用途を区別するために、複数のサービス名を指定できます。例えば:

SERVICE_NAMES = sales.acme.com、widgetsales.acme.com

サービス名を使用して、レプリケーションを使用して2つの異なるデータベースから利用できる単一のサービスを識別することもできます。

Oracle Parallel Server環境では、すべてのインスタンスにこのパラメーターを設定する必要があります。

TNSは、接続を確立するためのdatbasesアドレスを定義するsql * net構成ファイルです。

7
TheEwook

SERVICE_NAMEは、データベースインスタンス(または多数のインスタンス)に対するエイリアスです。これの主な目的は、クラスターを実行している場合です。これを使用して、クラスター内の特定のデータベースに接続できます。その他の方法では、SID[〜#〜] s [〜#〜] ystem [〜#〜] id [〜#〜] entifier )データベースインスタンスに接続できます。これは、Oracleデータベースインスタンスの一意名です。

つまり、SID = DBの一意の名前、SERVICE_NAME =接続時に使用されるエイリアス。

直接指定、tnsnames.ora(つまりTNS名)、LDAPディレクトリ、ネットワーク情報サービスなどのデータベース情報を提供する方法はいくつかあります。

A TNS([〜#〜] t [〜#〜]透明[〜#〜] n [〜#〜] etwork [〜#〜] s [〜#〜] ubstrate)nameは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);
11
Premraj