5

私は本当にこれを知っている必要がありますが、誰かが Linux でデフォルトのデータベースを変更する方法を教えてくれませんか?

例えば:

でデータベースを持ってtest1server1ますORACLE_SID=test1。したがって、接続するtest1には次を使用できます。

sqlplus myuser/password

デフォルトのデータベースに接続し、test1

test2デフォルトの sqlplus 接続をserverのデータベースに接続したいと思いますserver2

test1そのため、古いエントリが を指すように tnsnames を更新しましたtest2@server2test2また、同じ場所を指す別のエントリを追加しました。ただし、デフォルトの接続は引き続きtest1@server1.

test2次の両方が正常に機能し、 のデータベースに移動しますserver2

sqlplus myuser/password@test1
sqlplus myuser/password@test2

しかし、デフォルトの接続 はsqlplus myuser/passwordに行きtest1@server1ます。

何か案は?

ありがとう。

4

5 に答える 5

4

kerchingoの回答を拡張するには: Oracle には、データベースを識別する方法が複数あります。

最良の方法 (常に使用する必要がある方法) は、USER/PASSWORD@SERVER. これにより、Oracle ネーミング ルックアップ (tnsnames.ora) を使用して実際のサーバーが検索されます。このサーバーは、接続するたびに異なる物理ホスト上にある可能性があります。Oracle 接続文字列を として指定することもできますSERVERが、できないふりをします。

環境変数を介してデフォルト サーバーを指定する方法も 2 つあります。1 つ目はTWO_TASK、ネーミング ルックアップを使用する で、2 つ目はORACLE_SIDで、サーバーが現在のマシンで実行されていることを前提としています。ORACLE_SIDよりも優先されTWO_TASKます。

常に明示的な接続文字列を使用する必要がある理由は、ユーザーがTWO_TASKORACLE_SID、両方を設定しているか、どちらも設定していないかがわからないためです。また、それらが何に設定されるかもわかりません。両方を異なる値に設定することは、特に Oracle の仕組みをよく理解していない人と電話で診断するのが特に困難な問題です (実際に行ったことがあります)。

于 2009-10-14T12:22:58.143 に答える
3

server1 にログインしていると仮定すると、次を使用して test2 に接続する必要があります。

sqlplus myuser/password@test2

server2 に到達するにはリスナーを経由する必要があるためです。文字列 test2 は、test2 への接続方法を指定する tnsnames.ora ファイル内のエントリを識別します。sqlplus コマンドの最初の形式を使用して別のサーバーに接続することはできません。

両方のインスタンス (test1、test2) が server1 にある場合、@kerchingo が述べているように、ORACLE_SID 環境変数を別のインスタンスを指すように設定できます。

于 2009-10-14T01:56:49.993 に答える
2

LOCALデータベースの tns エイリアスを使用して環境変数を定義します。

> set LOCAL=test1
> sqlplus myuser/password
> ... connected to test1
> set LOCAL=test2
> sqlplus myuser/password
> ... connected to test2

これはWindowsクライアントで機能しますが、他のOSについては問題ありません。

于 2009-10-14T06:58:45.113 に答える
2

正しい質問は、「デフォルト サービスを変更するにはどうすればよいですか?」です。Oracle DBMS には、明示的および暗黙的な 2 種類の接続要求があります。明示的な要求では、sqlplus username/password@service のような 3 つのオペランドを指定します。暗黙的な要求では、3 番目のオペランドを無視します。

暗黙的な接続は、クライアント ホストとサーバー ホストが同じ場合にのみ適用されます。したがって、リスナーは同じホスト上にあります。

リスナーは、最初に接続要求に応答するものです。同一ホストからの暗黙接続要求を処理する際に、インスタンス名が設定されているかどうかをチェックします。シェル変数 ORACLE_SID の値をチェックします。

設定されている場合、暗黙的な接続要求を処理できます。それ以外の場合は、3 番目のオペランドを指定して、明示的な接続要求を実行する必要があります。

リスナー構成ファイル名の listener.ora は、インスタンスをサービスに関連付けます。接続先のデフォルト サービスを変更するには、インスタンスのデフォルト値を変更します。したがって、シェル変数 ORACLE_SID のデフォルト値を変更します。これは、.profile などの OS ユーザー構成ファイルまたは同様の構成ファイルで行います。

お役に立てれば。

于 2014-11-19T19:51:59.107 に答える
1

あなたの環境で設定されていると思いますが、$ORACLE_SID をエコーできますか?

于 2009-10-13T23:53:23.287 に答える