web-dev-qa-db-ja.com

sqlplusはOracle_SIDがどこを指しているかをどのようにして知ることができますか?

私が理解しているように、SIDはOracleデータベースインスタンスを識別する一意の値です。

また、Oracle_SID環境変数を変更することで、デフォルトのデータベースインスタンスsqlplusの使用を設定できます。

しかし、sqlplusはどのようにしてSIDがどこを指しているのかを知ることができますか?

Tnsnames.oraはsqlplusに情報を知らせたいと思っていましたが、そのような情報は存在しないようです。 (その場合、sqlplusはいつtnsnames.oraを使用しますか?)

3
SangminKim

SQLPlusを使用してbequeath接続を作成すると(たとえば、リスナーを経由せず、接続文字列でSID /サービス名を指定しないか、TNSエイリアスを使用しない場合)、SQLPlus/OracleはOracle_SIDとOracle_HOMEの組み合わせを使用して、接続するインスタンス。

注意が重要:同じOHをすべて共有する複数のインスタンスが1つのサーバーで実行されている可能性がありますが、SIDは異なります。または、複数のOracleホームから複数のインスタンスを実行することもできます。 1台のマシン上の2つのインスタンスが、SIDとOHの同じ組み合わせを共有することはありません。

この接続方法は、Oracleデータベース/リスナーが実行されているサーバーのコマンドラインから接続している場合にのみ機能することに注意してください。

リモートサーバーから接続している場合(または特定のサービスに接続する必要がある場合は同じサーバーから-12cのPDBなど)、接続文字列でtnsnamesエイリアスまたはホスト名のいずれかを指定する必要があります[オプション:ポート]と接続するサービス名。

例えば、:

sqlplus scott/tiger@hr

これは、クライアントのtnsnames.oraが「hr」のエイリアスで設定されていることを前提としています。このTNSエイリアスには、ホスト名、ポート、SID /サービス名が含まれます。

sqlplus scott/tiger@hostname[:port]/servicename

これは、コマンドラインで指定されたホスト名とSID /サービス名に接続します。 Oracle_SID、Oracle_HOME変数、およびTNSは、この接続とはまったく関係がなく、使用されません。

実際の例:

sqlplus hr/[email protected]:1521/hrdb 
2
Phil Sumner

SQL Plusを使用していて、接続しているインスタンスまたはデータベースを知りたいだけの場合は、以下を使用できます。

SELECT sys_context('USERENV','INSTANCE_NAME') FROM dual;
SELECT sys_context('USERENV','DB_NAME') FROM dual;
2
Leigh Riffel