• ベストアンサー

SIDとSERVICE_NAMEの違いとは?

tnsnames.oraの中の(CONNECT_DATA=に SIDだったりSERVICE_NAMEだったりしますが、どのような違いがあるのでしょうか? どちらでもつながるのでいいかとは思いますが、何かメリット・デメリットでもあるのでしょうか? それとも過去の遺物が未だ共存しているだけでしょうか? SIDはインスタンスにつけられた名前だと知っていますが、SERVICE_NAMEってなんですか?

  • mr-r00
  • お礼率93% (480/516)
  • Oracle
  • 回答数3
  • ありがとう数16

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.3

SIDはインスタンスの識別子、service_nameはサービス名。 インスタンスとサービスの違いはRAC を勉強されるとよくわかると思います。 サービス名は初期化パラメータのservice_namesで設定します。 設定されていない場合は先述のとおりdb_unuque_name.db_domainになります。 (これが同義と誤解されやすい原因となっているわけですが) ところで、service_namesパラメータですが、複数形になっていることからもわかるように、複数のサービス名をコンマ区切りで指定できるようになっています。 これをこのように使います。 2ノードRAC環境で、インスタンス1(SID=hoge1)、インスタンス2(SID=hoge2)があったとします。 ノードを意識することなく接続できるようにするためにクライアント側のtnsnames.oraにはこんな設定を追加します。 HOGE.EXAMPLE.COM (DESCRIPTION = (LOAD_BALANCE = ON) (ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DECIDATED)(SERVICE_NAME = hoge.example.com)) ) インスタンス1とインスタンス2のservice_namesパラメータにhoge.example.comを追加します。すると、インスタンス1とインスタンス2にラウンドロビンで接続できるようになります。 ここで、もしtnsnames.oraのservice_name=...がSID=hoge1だったらどうなるでしょう? インスタンス2のSIDはhoge2ですから一致せず、インスタンス2には接続できず、いつもインスタンス1に繋がってしまいます。 次に、一時的にメンテナンスのためにインスタンス2にアクセスしてほしくないケースを考えます。service_nameであれば、インスタンス2のservice_namesパラメータからhoge.example.comを削除することで(動的に変更できます)直ちにインスタンス1にのみ接続されるようにできます。 ここで、もしORACLE_SIDだったら・・・変更のためにインスタンスの再起動が必要になってしまいますね? 最後にservice_namesは複数登録できます。3ノードRAC環境において、オンライン処理(service_name=ONLINE)、バッチ処理(service_name=BATCH)があったとします。 バッチ処理は1つのノード(インスタンス1)でのみ処理したいとします。オンライン処理は3つのノードでしたいとします。 そんなとき、service_nameであれば、 <<サーバ側の初期化パラメータ>> 1:service_names = online, batch 2:service_names = online 3.service_names = online <<クライアント側のtnsnames.ora>> オンライン処理 ONLINE.EXAMPLE.COM (DESCRIPTION = (LOAD_BALANCE = ON) (ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DECIDATED)(SERVICE_NAME = online.example.com)) ) BATCH.EXAMPLE.COM (DESCRIPTION = (LOAD_BALANCE = ON) (ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DECIDATED)(SERVICE_NAME = batch.example.com)) ) と、クライアント側では接続先サーバを気にすることなく構成できますね? BATCHのノードを1から2にしたい場合の変更はサーバ側のみでできますよね? serivce_namesの"batch"設定をノード2に移すだけです。

mr-r00
質問者

お礼

ありがとうございます 大変参考になりました!

その他の回答 (2)

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.2

http://search.yahoo.co.jp/search?b=1&n=10&ei=UTF-8&fr=ie8sc&p=Oracle+tnsnames+SERVICE_NAME 上記の検索リンク順にたどってゆくとわかると思います。 tnsnames.ora からたどると、確かにわかりにくい説明ばかりかもしれません。いや、実際そうですね。このファイルは互換性のために、いまだに存在して言うかと私は思っています。 これらが使用去られるようになったのはVer7 くらいからだったと思います(今11?)。 ファイルから見るとよくわからないので、GUIツールから見て、ガイドを読んでゆくとわかると思います。DB管理ツールですね。エンタープライズXXXだったかな? GUIで変えると、ああ、ここが変わるんだ、とわかるはずです。実験できるなら、名前に、全て設定箇所か特定できる名前をつけるといいです。 通常ホスト名とか、グループ(チーム名)を、いろんなところにつけてしまうから、これって何の役に立っているのと、新人君からよく聞かれます。

mr-r00
質問者

お礼

ありがとうございます 大変参考になりました!

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ。 > ・・・どのような違いがあるのでしょうか? SID はインスタンスに付けられた名前です。 通常の環境では、SID, SERVICE_NAME のどちらでも構いませんが、 RAC 環境の場合ノード毎にインスタンス名が異なるのでSERVICE_NAME で指定できるようになっていたと思います。

mr-r00
質問者

お礼

ありがとうございます 大変参考になりました!

関連するQ&A

  • SIDとSERVICE_NAMEの違い

    tnsnames.oraの中の(CONNECT_DATA=に SIDだったりSERVICE_NAMEだったりしますが、どのような違いがあるのでしょうか?

  • SID、SERVICE_NAMES、GLOBAL_DBNAME、DB_NAME、DB_DOMAINの関係

    SID、(init.SIDora内の)SERVICE_NAMES、GLOBAL_DBNAME、DB_NAME、DB_DOMAINの関係は どうなっているのでしょうか?以下でいいのでしょうか? SID =DB_NAME サービス名=GLOBAL_DBNAME=DB_NAME+DB_DOMAIN

  • データベースに接続できない

    データベースに接続できません!! 「tnsnames.ora」、「listener.ora」、「sqlnet.ora」の内容は以下になっております。いろいろ調べてみて、これでいいとは思うのですが、「ORA-12545 ターゲット・ホストまたはオブジェクトが見つかりません。」というエラーが出てしまい接続できません。 DBはOracle10g Release1を使用しています。 【tnsnames.oraの内容】 ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) ) 【listener.oraの内容】 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = G:\oracle\product\10.1.0\Db_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_NAME = orcl) (ORACLE_HOME = G:\oracle\product\10.1.0\Db_1) (SID_NAME = orcl) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) )

  • データベースへの接続について

    サーバーに、OracleDB10gR2を導入し、リスナーの設定まで完了しています。 クライアントの接続情報の設定を、「Net Configuration Assistant」の 「ローカル・ネット・サービス名構成」を使用し設定を行おうと思っています。 設定が完了するとTNSNAMES.ORAが作成され、以下のような内容になると思います。 net_service_name= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=test)(PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=service_name))) この後以下のコマンドでデータベースへの接続が可能になると思うのですが、 service_nameというのは、何に使用しているのでしょうか? また、net_service_nameに設定される値とservice_nameに設定される値の違いを教えてください。 connect user/password@net_service_name 調べると、以下のような記述を見つけたのですが、 Oracle9iまたはOracle8のデータベースに接続する際に必要なのでしょうか? SERVICE_NAME 用途 パラメータSERVICE_NAMEを使用して、アクセスするOracle9iまたはOracle8データベース・サービスを識別します。値は、初期化パラメータ・ファイルのSERVICE_NAMESパラメータに指定されている値に設定します。

  • リスナーがありません

    無償版のOracle 12cをインストールしました。 レジストリで「ORACLE_HOME」と「ORACLE_SID」の値を確認して環境変数に設定しました。 ORACLE_HOME … C:\app\ora\product\12.1.0\dbhome_2 ORACLE_SID … orcl それから下記のURLを参考にしてユーザーを作成しました。 http://replication.hatenablog.com/entry/2015/08/05/093000 作成したユーザーで接続しようとしたら下記のエラーが発生してしまいました。 conn 上記で作成したユーザー/パスワード@PDBORCL ORA-12541: TNS: リスナーがありません ネットで「tnsnames.ora」に記述するという記事を見たので下記のパス先ある「tnsnames.ora」に下記の内容を追加しました。 C:\app\ora\product\12.1.0\dbhome_2\NETWORK\ADMIN PDBORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = IPアドレス)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = PDBORCL) ) ) でも結果は同じでした。 ※試しに下記のパス先に「tnsnames.ora」を設置しても同じでした。 C:\app\ora\product\12.1.0\dbhome_1\NETWORK\ADMIN 申し訳ありませんがどのようにすればいいのでしょうか。 何卒、ご教授宜しくお願いします。

  • ORA-12514が出た時の対処法と原因

    今回で2度目なのですが、ORA-12514のエラーがでる様になりました。 前回は仕方なくフォルダを削除して再インストールしたら直りましたが、 PCで作業している内に再び同じ現象になりましたので、 原因と再インストール以外の対処法があればと思い書き込みさせて頂きました。 環境はWindows2000でOracle10gです。 Oracleを入れたPCと作業しているPCは同じPCです。 前回と今回の違いは、 前回は「XYZ」の作成をしていない。 サービスのOracleOraDb10g_home1TNSLitenerが開始できなかった。 (一応コマンド入力でもダメでした) (リスナーの起動を試すみたいなのがインターネットで検索してる時に書いてあったので参考にしました) の2点です。 現在は「XYZ」が作成されているのと、 OracleOraDb10g_home1TNSLitenerが停止したり開始したりすることができます。 自分で作成したオラクルは初めてで、 最初にエラーが出た時もインターネットで検索したりして、 原因を探そうと思いましたが難しくて断念し再インストールといった感じでした。 どうかよろしくお願いします。 listener.oraとtnsnames.oraは下記の通りです。 # listener.ora Network Configuration File: g:\oracle\product\10.1.0\Db_1\network\admin\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = g:\oracle\product\10.1.0\Db_1) (PROGRAM = extproc) ) ) XYZ = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = abc)(PORT = 1521)) ) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = abc)(PORT = 1521)) # tnsnames.ora Network Configuration File: g:\oracle\product\10.1.0\Db_1\network\admin\tnsnames.ora # Generated by Oracle configuration tools. XYZ = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = abc)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = abc)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) )

  • SIDの設定が保存されていない?

    ORACLEのDATABASEフォルダをコピーしてデータベースサーバーを移設しようとしております。 Listnerやtnsnameを設定し、下記のコマンドでSIDとサービスの登録を行いました。 Set ORACLE_SID=SID名 oradim80 -new -sid SID名 -intpwd ORACLE -startmode auto -pfile ~\initSID名.ora これでサービス起動し、接続も出来ました。 しかし、DOSプロンプトからSVRMGR30を実行するとまず接続出来ないと出て、その後にconnect internal/oracleとすると接続出来ませんでした。 試しに、初めにSet ORACLE_SID=SID名をしてからSVRMGR30を起動すると接続出来ました。 DATABASEフォルダをコピーしてくる方法ではSIDの設定は保持されないのでしょうか?こんな経験がありましたらどうか教えて下さい。 よろしくお願いします。 WindowsNT Oracle8.0.4

  • DBリンクできませんが

    これが TNSNAMES.ORA (一部仮名) ORACLE.AB123 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 123.456.789.012)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = AB123) ) ) で  CREATE DATABASE LINK ORACLE.AB123 CONNECT TO ABCUSER IDENTIFIED BY ABCUSER USING 'ORACLE.AB123' そして SELECT * FROM ABCUSER.ABC@ORACLE.AB123 →ORA12154エラーになってしまいます。なぜでしょうか?

  • 【sqlplus】USER/PASS@HOSTでログインできない

    SQLPLUSでローカルのOracle10gに接続を試みているのですが コマンドプロンプトで sqlplus USER/PASS では接続できるのですが、 sqlplus USER/PASS@HOST で接続できないんです。 環境は下記となっております。 Windows XP Oracle10g(10.1.0) ======【エラー内容】================================== C:\Documents and Settings\XXXX XXXX>sqlplus USER/PASS@orcl SQL*Plus: Release 10.1.0.2.0 - Production on 火 7月 3 01:56:57 2007 Copyright (c) 1982, 2004, Oracle. All rights reserved. ERROR: ORA-12523: TNS:listener could not find instance appropriate for the client connection ======【listener.ora】================================== # listener.ora Network Configuration File: C:\oracle\product\10.1.0\Db_1\network\admin\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = C:\oracle\product\10.1.0\Db_1) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = ORCL) (ORACLE_HOME = C:\oracle\product\10.1.0\Db_1) (PROGRAM = oracle) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) ) ======【sqlnet.ora】================================== # sqlnet.ora Network Configuration File: C:\oracle\product\10.1.0\Db_1\network\admin\sqlnet.ora # Generated by Oracle configuration tools. SQLNET.AUTHENTICAION_SERVICES=NONE NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) ======【tnsnames.ora】================================== # tnsnames.ora Network Configuration File: C:\oracle\product\10.1.0\Db_1\network\admin\tnsnames.ora # Generated by Oracle configuration tools. ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = localhost) (PORT = 1521) ) (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = orcl) ) ) ======【tnsping】================================== Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = localhost) (PORT = 1521)) ( CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = orcl))) OK (40 msec) ======【LSNRCTL>status】================================== Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROCipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))) Services Summary... Service "ORCL" has 1 instance(s). Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service... 実は当初PHPから接続しようと色々やっていたのですが、sqlplusで まともに接続できていないことが判明し、自分でも色々調べてみた のですが、どうしてもうまくいかず質問させていただいた次第です。 初心者ですが、どうかよろしくお願いいたします。

  • SQL*PLUSでホスト名を入れるとエラー

    よろしくお願いします。 SQL*PLUSで、ホスト名を入れると、ORA-12154エラーとなってしまいます。 ホスト名を入力しないと、正常に接続可能です。 ちなみに、DBはローカルにあります。 以下、TNSNAMES.ORAの内容です。 =========================== ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = cl-000788.iafc.local )(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) ================================= どこか、設定が間違っているのでしょうか? よろしくお願いいたします。