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)
)
)
)
ありがとう!
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構成ファイルです。
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);