web-dev-qa-db-ja.com

sqlplusを使用して、自分のtnsnames.oraを変更せずに別のホストにあるOracleデータベースに接続する方法

Sqlplusを使用して別のホストにあるOracleデータベースに接続したい。 このページ データベースに接続するアイテムをtnsnamesに追加することを提案しました

local_SID =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL= TCP)(Host= hostname.network)(Port= 1521))
    (CONNECT_DATA = (SID = remote_SID))
  )

そしてそれをsqlplusで使用します

sqlplus user/pass@local_SID

ただし、私の状況では、ローカルtnsnamesを変更することはできません。 tnsnamesを変更せずにsqlplus引数を使用するだけでリモートデータベースに接続できますか?何かのようなもの

sqlplus user/pass@[email protected] ;( I know, this one is not valid)
83
Louis Rhys
 sqlplus user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))

たぶん、これはあなたが使っているコマンドライン環境に依存しているかもしれません、あなたは文字列を引用する必要があります。

 sqlplus "user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))"

または

 sqlplus 'user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))'
88

これには easy connect を使用できます。

sqlplus usr/[email protected]/remote_service_name

マシンでeasy connectを有効にするには、それをsqlnet.oraのNAMES.DIRECTORY_PATHに追加する必要があります。例:

NAMES.DIRECTORY_PATH=(EZCONNECT)

リスナーがデフォルト以外のポートにある場合は、[email protected]:port/...を使用します。

実際には、SIDではなくサービス名を指定する必要があるようです。それらは同じである可能性がありますが、異なる場合はサーバーから取得する必要があります。

37
Alex Poole

書き込み可能なディレクトリにtnsnames.oraファイルのコピーを作成し、それに応じてファイルを変更してから、TNS_ADMIN環境変数をそのディレクトリの場所に設定します。

例えば:

cp $Oracle_HOME/network/admin/tnsnames.ora /tmp/tnsnames.ora
# edit the /tmp/tnsnames.ora file to add your entries

# Set the $TNS_ADMIN environment variable so that sqlplus knows where to look 
export TNS_ADMIN=/tmp
18
Philᵀᴹ

Unix/Linuxシステムでは、 ユーザーレベルの設定ファイル を使用して、システムレベルのエントリを上書きできます。

システムレベルユーザーレベル
構成ファイル構成ファイル
 ------------------ ------- ------------ 
 sqlnet.ora $ HOME/.sqlnet.ora 
 tnsnames.ora $ HOME/.tnsnames.ora 

システムレベルの設定ファイルは、ディレクトリ$TNS_ADMINにあります。変数TNS_ADMINが設定されていない場合、変数$Oracle_HOME/network/adminで検索されます。

ユーザーレベルの構成ファイルは、システムレベルの構成ファイル全体を置き換えません(TNS_ADMINディレクトリは$Oracle_HOME/network/adminディレクトリ全体を置き換えます)が、システムレベルの構成のエントリを追加または変更しますファイル。ユーザーレベルの構成ファイルにエントリが存在する場合は、このエントリが使用されます。ユーザーレベルの構成ファイルに存在しない場合は、システムレベルの構成ファイルのエントリが使用されます。

3
miracle173