2009-10-13 10 views
5

私は本当にこれを知っているべきですが、誰かがLinux上でデフォルトのデータベースを変更する方法を教えてくれますか?例えばOracleでは、どのように 'デフォルト'データベースを変更しますか?

私はORACLE_SID=test1と上のデータベースtest1を持っています。だから、私は使用することができますtest1に接続します。

sqlplus myuser/password 

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

test1

は、私は今、デフォルトのSQLPLUSの接続のようにサーバーserver2上のデータベースtest2に行くことでしょう。

したがって、古いtest1のエントリが[email protected]を指すように、tnsnamesを更新しました。同じ場所を指す別のエントリtest2も追加しました。ただし、既定の接続はまだ[email protected]になります。正常に動作してserver2上のデータベースtest2に行き、次の両方の

sqlplus myuser/[email protected] 
sqlplus myuser/[email protected] 

しかし、デフォルトの接続、sqlplus myuser/password[email protected]に行きます。

アイデア?

ありがとうございました。

+0

これはすべてserver1で行われていると仮定しますか? – DCookie

+0

「sqlplus user/pass」で始まるserver1には、多くのレガシー・スクリプトがあります。私は、これらのスクリプトをserver1からserver2へのデータベース移行後に動作させる方法を見つけようとしています。 –

+0

スクリプトは最終的にserver1またはserver2で実行されますか? server2の場合は、server2のORACLE_SIDをtest2に設定するだけです。 – DCookie

答えて

4

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

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

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

明示的な接続文字列を使用する必要がある理由は、ユーザーがTWO_TASK,ORACLE_SID、または両方を設定しているかどうかに関係なく、彼らが何に設定されるかも知っていません。両者を異なる値に設定することは、特にオラクルの仕組みを実際に理解していない(そこにいる、行った)人との電話による診断では、特に苦痛を伴う問題です。

+0

ありがとうございました。私が前に出会ったことのない「TWO_TASK」は、まさに私が必要とするものです。 –

+0

Hrm、 'TWO_TASK'が' ORACLE_SID'をオーバーライドする(Tomに問い合わせてください)(http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:89412348059) OS Xの私にとっては、 'TWO_TASK'は動作しますが、' ORACLE_SID'は動作しません。私は色を混乱させる。 – theory

+0

@theory - 動作が変更された可能性があります(私は8iからOracleを積極的に使用していません)、または私のメモリが間違っている可能性があります。 Oracleが標準ポートでリッスンしていない場合を除き、なぜ 'ORACLE_SID'があなたのために機能していないのか分かりません。個人的には、どのような場合でも 'TWO_TASK'が好きですが、それはおそらくデータベースサーバーがたくさんある環境で働いたからでしょう。 – kdgregory

1

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

3

あなたはサーバー1にログインしていると仮定すると、あなたがserver2のを取得するリスナーを介して行かなければならないので

sqlplus myuser/[email protected] 

使用TEST2に接続する必要があります。 test2という文字列は、test2に接続する方法を指定するtnsnames.oraファイルのエントリを示します。 sqlplusコマンドの最初の形式を使用して、別のサーバーに接続することはできません。

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

+0

これは打撃だ - 私はいくつかのスクリプトを移行する必要があるようだ。 –

+0

いいえ、@ kdgregroryの回答を参照してください。 - エクスポートTWO_TASK = test2は必要な場所に移動します。 – DCookie

+0

それは、今日の私の新しいことです - "TWO_TASK"。うまく動作します。 –

2

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

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

これはWindowsクライアント上で動作しますが、他のOSについてはわかりません。

+1

LOCALはWindows用、TWO_TASKはその他のもの用です。彼らはまったく同じことをする。 –

0

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

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

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

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

listener-configファイル名listener.oraは、instanceをserviceに関連付けます。 接続先のデフォルトサービスを変更するには、instanceのデフォルト値を変更します。 したがって、シェル変数ORACLE_SIDのデフォルト値を変更してください。 .profileや同様の設定ファイルなどのOSユーザー設定ファイルで行います。

これが役に立ちます。

関連する問題