Listener.oraとtnsnames.oraを設定しましたが、うまく設定されているかどうかわかりません。 lsnrctl status
コマンドを呼び出すと、インスタンスrcadbおよびproddbが不明になります。
私はOracleの初心者ですが、ビルド済みのOracle 12cをインストールしました。
2つのデータベースを作成したので、この問題が発生し、間違いを見つけることができません。
インストールで取得したデータベースorcl12cには、変更したHost = 0.0.0.0がありました。
Listener.ora:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl12c)
(SID_NAME = orcl12c)
(Oracle_HOME = /u01/app/Oracle/product/12.2/db_1)
)
(SID_DESC =
(GLOBAL_DBNAME = prodDB)
(SID_NAME = prodDB)
(Oracle_HOME = /u01/app/Oracle/product/12.2/db_1)
)
(SID_DESC =
(GLOBAL_DBNAME = rcatDB)
(SID_NAME = rcatDB)
(Oracle_HOME = /u01/app/Oracle/product/12.2/db_1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(Host = 127.0.0.1)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = 127.0.0.2)(PORT = 1524))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = 127.0.0.3)(PORT = 1525))
)
)
そして、私はこのようにtnsnames.oraを設定しました:
ORCL12C =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl12c)
)
)
prodDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL=TCP)(Host = 127.0.0.2)(PORT = 1524))
(CONNECT_DATA =
(SERVICE_NAME = prodDB)
)
)
rcatDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL=TCP)(Host = 127.0.0.3)(PORT = 1525))
(CONNECT_DATA =
(SERVICE_NAME = rcatDB)
)
)
LISTENER_ORCL12C =
(ADDRESS = (PROTOCOL = TCP)(Host = 0.0.0.0)(PORT = 1521))
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = 0.0.0.0)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
lsnrctlステータス
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=127.0.0.1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=127.0.0.2)(PORT=1524)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=127.0.0.3)(PORT=1525)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=localhost)(PORT=8081))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "51c99766d7e2568de0530100007f4fae" has 1 instance(s).
Instance "orcl12c", status READY, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
Instance "orcl12c", status READY, has 1 handler(s) for this service...
Service "orcl12c" has 2 instance(s).
Instance "orcl12c", status UNKNOWN, has 1 handler(s) for this service...
Instance "orcl12c", status READY, has 1 handler(s) for this service...
Service "orcl12cXDB" has 1 instance(s).
Instance "orcl12c", status READY, has 1 handler(s) for this service...
Service "prodDB" has 1 instance(s).
Instance "prodDB", status UNKNOWN, has 1 handler(s) for this service...
Service "rcatDB" has 1 instance(s).
Instance "rcatDB", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
編集:
[Oracle@localhost ~]$ unset TWO_TASK
[Oracle@localhost ~]$ . ./.profile_productionDB
[Oracle@localhost ~]$ sqlplus sys/Oracle as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Tue Jan 15 05:33:45 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> select name from v$database;
NAME
---------
PRODDB
SQL>
それには何の問題もありません。
- UNKNOWNは、インスタンスがサービス登録で動的にではなく、listener.oraファイルに静的に登録されることを意味します。したがって、ステータスは不明です。
他の人がすでに指摘したように、「不明」は単にレポートがlistener.oraのSID_LISTセクションにリストされていたことを示しています。 「私はこれらへのリクエストを処理しようとしますが、現時点ではそれらのステータスを知る方法がありません」と言っているのはリスナーです。 「準備完了」リストは、リスナーに登録するデータベース自体からのものです-動的登録。
余談ですが、リスナーをさまざまなポートに配置し、さまざまなポートをtnsnamesにリストしても何も達成されません。実際にポートを特定のデータベースにバインドするものはありません。リスナー自体へのエントリとしてのみ使用されます。接続が確立されると、リスナーはクライアントとサーバーに通信するための異なる(準ランダム)ポートを提供します。そうすると、リスナーは完全に見えなくなります。リスナーがサービスしているデータベースの数に関係なく、1つのポートで十分です。
別の方法として、IPアドレス127.0.0.1はループバックアドレスです。プロセス(Oracleクライアントだけでなく任意のプロセス)がパケットを127.0.0.1(または「localhost」)に送信するように要求した場合、その要求は要求側システムにループバックされます。したがって、デスクトップAがサーバーB上のデータベースへの接続を要求したが、アドレスが127.0.01であると指定した場合、要求はサーバーBに到達しません。
TWO_TASKは、接続文字列で '@dbname'を使用する代わりに変数を提供するだけです。 TWO_TASK = mydbを設定すると、
sqlplus fred/fred
と同じです
sqlplus fred/fred@mydb
UNKNOWNステータスは必ずしも問題ではありません。データベースの前にリスナーを開始すると、リスナーがデータベースのステータスを認識しない場合に発生する可能性があります。
あなたがするとき:
[Oracle@localhost ~]$ sqlplus sys/Oracle as sysdba
リスナーを使用せずに、データベースにローカルに接続しています。リスナーを停止して、接続を試みることができます。うまくいくはずです。
Tnsnames/listenerをテストする場合は、最初にテストユーザーを作成します。
[Oracle@localhost ~]$ sqlplus / as sysdba
create user test_tns identified by "test_tns";
grant create session to test_tns;
exit;
それからテストしてください:
[Oracle@localhost ~]$ sqlplus test_tns/test_tns@rcadb