tnsnames.oraと接続文字列の関係
DBにOracleを利用する場合、大抵は利用することになるtnsnames.ora
tnsnames.oraとアプリケーション側からの呼び出しの関係がなんとなくでしか理解できていなかったので、この機会に整理を行っておく。
接続情報には下記で説明する以外にも多くのオプションが存在するが、今回は必要最低限の値に絞って説明を行う。
tnsnames.ora
① =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ②)(PORT = ③))
(CONNECT_DATA =
(SERVICE_NAME = ④)
)
)
No | 説明 |
---|---|
① | ネットサービス名。アプリケーションはこの名前を参照して接続情報を取得する |
② | DBサーバのアドレス |
③ | DBサーバのリスナのポート番号。意図的に変更してなければ1521 |
④ | サービス名 |
サービス名とは
1つインスタンス、または、同じ機能を提供(=サービス)する複数インスタンスの集合体を特定する名称。
インスタンスに複数設定でき、同じ名前を別のインスタンスに指定することができる。
SID=xxx で接続先を指定する場合
SERVICE_NAME でなく、「SID=xxx」という書き方で接続先を指定することもできる。
(SIDとはインスタンスに一意に割り当てられる名前)
ただ、これは古い書き方(Oracle8か9くらいまで)なので、今はSERICE_NAMEで書くことが推奨。
(これでも一応動作するけれど)
configファイル(接続文字列)
<connectionStrings>
<add name="①" connectionString="Data Source=②;User ID=③;Password=④" providerName="⑤" />
</connectionStrings>
No | 説明 |
---|---|
① | 接続文字列名。ここの名前を用いて接続情報を取得する。 |
② | ネットサービス名。tnsnames.oraで設定したものを指定 |
③ | DBに接続するためのユーザ名 |
④ | DBに接続するためのパスワード |
⑤ | DBに接続するために利用するドライバ |
実例
tnsnames.ora
KOTORI =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.111.222)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = minami)
)
アプリケーションのコンフィグファイル
<configuration>
<connectionStrings>
<add name="chunchun"
connectionString="data source=KOTORI;user id=oyatuni;password=sityauzo;"
providerName="System.Data.OracleClient"/>
</connectionStrings>
</configuration>
アプリケーション内のコネクション取得処理
(以下の例はVB)
Dim connection As New OracleConnection("chunchun")
最後に
今回はアプリケーションからOracleのDBへ接続するための設定ファイルについて記述した。
なんとなくでしか理解できていない場合いざという時に問題になるので、整理できてよかったと思う。
あと、例示が相変わらずアレなのはご愛嬌。
(追記)SID、サービス名の確認方法
すでに作成済みのインスタンスに対し、「SID」「サービス名」は以下のように取得できる。
SID
SELECT DBID,NAME,DB_UNIQUE_NAME,CURRENT_SCN,LOG_MODE FROM V$DATABASE
サービス名
※SQL*PLUSで実行すること
show parameter service_name