このエラーを適切に解決し、適切なOracleデータベースに接続するには、Oracleの動作と、そもそもこの問題の原因について少し説明する必要があります。
SIDとSERVICE_NAMES
OracleがSID
として定義するものの(わずかな)違いを理解することが重要です。 SERVICE_NAME
と比較して 、後でこの情報を使用して適切な接続文字列を作成するためです。
Oracleでは、システム識別子(またはSID
)は、最大8文字の長さのローカル識別子であり、特定のデータベースを識別し、システム上の他のデータベースと区別するために使用されます。
多くの場合、SID
プレフィックスワードまたはDB_UNIQUE_NAME
DB_DOMAIN
の前にあります 。たとえば、SID
bookstore
の 完全なglobal database name
に見られるデータベース bookstore.company.com
の 。
SERVICE_NAMES
一方、は、データベースインスタンスを接続できる名前を表します。 SERVICE_NAME
通常、SID
の形式に従います 次のように、データベースドメインが続きます:DB_UNIQUE_NAME.DB_DOMAIN
TNSリスナー
クライアントがデータベースに直接接続するのではなく、Oracleデータベースに接続しようとしている場合 、クライアントの接続要求に介入して処理するブローカーサービスがあります。
このブローカーアプリケーションは、listener
として知られています。 そしてそれは聞くのタスクを実行します 着信クライアント要求の場合。リクエストを受信すると、listener
service handler
を使用して、その要求を処理し、適切なOracleデータベースサーバーに転送します。 、listener
間の接続として機能します およびデータベースサーバー。
TNSの名前と構成
Oracleデータベースに接続する場合、通常、データベースサーバーにはtnsnames.ora
があります。 、これは、サーバーにNET_SERVICE_NAMES
について通知する構成ファイルです。 これは有効なデータベース接続です。デフォルトでは、このファイルはORACLE_HOME/network/admin
にあります。 。
たとえば、NET_SERVICE_NAME
tnsnames.ora
の記述子 次のようにフォーマットできます:
myDatabaseNetService =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = tcp)(HOST = localhost)(PORT = 1521)(QUEUESIZE = 100))
(CONNECT_DATA =
(SERVICE_NAME = bookstore.company.com)
)
)
これにより、NET_SERVICE_NAME
が定義されます SERVICE_NAME
を使用する 前に説明しました(bookstore.company.com
)そしてlocalhost
に接続します ポート1521
経由 。
Oracleが実際にデータベースに接続する方法についてもう少し知識があれば、connection strings
の方法を確認できます。 フォーマットされています。
TNS名/NET_SERVICE_NAME経由で接続
NET_SERVICE_NAME
を介して接続する場合 tnsnames.ora
で指定されているとおり 設定ファイルの場合、username
を使用する必要があります 、password
、次にNET_SERVICE_NAME
を追加します @
で シンボル、そのように:
username/password@NET_SERVICE_NAME
したがって、以前のNET_SERVICE_NAME
の場合 上記の記述子、実際のNET_SERVICE_NAME
定義したのはmyDatabaseNetService
、したがって、接続文字列は次のようになります。
john/Hunter2@myDatabaseNetService
SERVICE_NAME経由で接続
SERVICE_NAME
を介して接続する場合 、host
も追加する必要があります およびport
、/
と一緒に SERVICE_NAME
の前の記号 それ自体:
username/password@host:port/SERVICE_NAME
SID経由で接続
最後に、構成されたNET_SERVICE_NAME
なしで接続する場合 またはSERVICE_NAME
、SID
から直接行うことができます :
を使用する /
の代わりに記号 SERVICE_NAME
と同様の記号 接続文字列:
username/password@host:port:SID