Oracle 12cを使用しています。私は1つのCDBと1つのPDBを持っています(私の知る限り)。練習のために、2つのリスナーを作成しました。 tnsnames.oraファイルで適切な設定を行いました。
観察:
lsnrctl start
を実行するだけ、つまりリスナー名を指定しない場合、** TNSLSNRは実際に/ora01/app/Oracle/product/12.1.0/db_1/bin/tnslsnr
にあるリスナーをロードします(これはpsで示されるパスです)lsnrctl start
を実行する前に、 $Oracle_HOME/network/admin
のlistener.oraはありません。シンプルなxxxxxlistener.ora
によってロードされた「ゾンビ」リスナーをテストするために、名前をlsnrctl start
に変更しました。最悪の部分は、応答メッセージが$Oracle_HOME/network/admin/listener.ora
からリスナーをロードしたと言っていることです。そのファイルの名前をxxxxxlistener.ora
に変更したので、これはAWFULです。コンピュータにゴーストファイルがあります。カスタムリスナーを練習することさえできないので、助けてください。
カスタムリスナーをポート1521に配置しないように練習することはできません。DBに接続するためにそれらを使用することはできません。その「幽霊」のリスナーは物事を台無しにしているようです
lsnrctl START [listener_name]
上記のコマンドで、listener_nameは
listener.ora
ファイルで定義されたリスナーの名前です。デフォルトのリスナー名LISTENERを使用している場合は、リスナーを識別する必要はありません。
リスナー名なしでlsnrctl start
を押すと、Oracleは2つのアドレスで待機するデフォルトのリスナーを開始しようとします。
(ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))
(ADDRESS=(PROTOCOL=tcp)(PORT=1521))
特定のリスナーを開始する場合は、まず、以下のようにlistener.ora
ファイルでリスナーを定義し、リスナー名をlsnrctl start listener_name
として指定して開始します。
[Oracle@ora12c admin]$ lsnrctl start listener3
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 07-JAN-2017 19:53:16
Copyright (c) 1991, 2014, Oracle. All rights reserved.
Starting /u01/app/Oracle/product/12.1.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 12.1.0.2.0 - Production
System parameter file is /u01/app/Oracle/product/12.1.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/Oracle/diag/tnslsnr/ora12c/listener3/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=192.168.30.133)(PORT=1523)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=192.168.30.133)(PORT=1523)))
STATUS of the LISTENER
------------------------
Alias listener3
Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date 07-JAN-2017 19:53:17
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/Oracle/product/12.1.0/db_1/network/admin/listener.ora
Listener Log File /u01/app/Oracle/diag/tnslsnr/ora12c/listener3/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=192.168.30.133)(PORT=1523)))
The listener supports no services
The command completed successfully
[Oracle@ora12c admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/grid/product/12.1.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER2 = ON
VALID_NODE_CHECKING_REGISTRATION_LISTENER = SUBNET
VALID_NODE_CHECKING_REGISTRATION_LISTENER2 = SUBNET
LISTENER1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = 192.168.30.133)(PORT = 1522))
)
)
LISTENER3 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = 192.168.30.133)(PORT = 1523))
)
)
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON
Local_listener初期化パラメーターを設定します。その数はリスナーの数を使用します。私の場合、私は両方を使用しました。
SQL>alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(Host=192.168.30.133)(PORT=1522))','(ADDRESS=(PROTOCOL=TCP)(Host=192.168.30.133)(PORT=1523))';
更新
ORA-00119:システムパラメータLOCAL_LISTENERの指定が無効です
ORA-00132:構文エラーまたは未解決のネットワーク名 'LISTENER1'
オラクルは言う-
00132、00000、「構文エラーまたは未解決のネットワーク名 '%s'」
原因:リスナーのアドレスに構文エラーがあるか、解決できません。
アクション:ネットワーク名が指定されている場合、それが
TNSNAMES.ORA
またはシステムに設定されているその他のアドレスリポジトリのエントリに対応していることを確認します。エントリが構文的に正しいことを確認してください。
データベースを作成してリスナー名を指定すると、Oracleがtnsnames.ora
ファイルにTNSエイリアスを作成し、そのエイリアスがlocal_listener
値として使用されます。
$ cat $Oracle_HOME/network/admin/tnsnames.ora
#LISTENER1 =
# (ADDRESS = (PROTOCOL = TCP)(Host = ora12c.dba.com)(PORT = 1522))
あなたの場合、エイリアス名はLISTENER_ORA12C
ではなくLISTENER1
にする必要があります。シナリオをシミュレートするために、そのエイリアスにコメントしました。
tnsnames.ora
に移動して、エイリアスが存在することを確認してください。次に、Oracleインスタンスの起動を再試行してください。
[Oracle@ora12c admin]$ vi tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/Oracle/product/12.1.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER1 =
(ADDRESS = (PROTOCOL = TCP)(Host = ora12c.dba.com)(PORT = 1522))
[Oracle@ora12c admin]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Sun Jan 8 09:10:35 2017
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
Oracle instance started.
Total System Global Area 838860800 bytes
Fixed Size 2929936 bytes
Variable Size 624954096 bytes
Database Buffers 100663296 bytes
Redo Buffers 5455872 bytes
In-Memory Area 104857600 bytes
Database mounted.
Database opened.
SQL> show parameter local_listener
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string LISTENER1
Balazs PappとJSapkotaの回答に基づいて、問題がどのように解決されたかを段階的に説明します。詳細については、Balazs PappおよびJSapkotaの回答を読む必要があります。
ステップ1
LOCAL_LISTENERパラメータの初期化パラメータファイルを編集して、1521以外のポートにリスナーを追加します
local_listener='(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))' ,' (ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1522))' , '(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1523))'
Spfileしかない場合は、うまくいけば次のことができます。
connect / as sysdba
startup
alter system set local_listener = '(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1521))' ,' (ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1522))' , '(ADDRESS = (PROTOCOL = TCP)(Host = localhost)(PORT = 1523))'
ステップ2
OS認証を使用して接続し、データベースを起動します
connect / as sysdba
およびSTARTUP PFILE = <path>/you_init_file.ora
Initファイルがなく、spfileを変更する必要がある場合は、shutdown immediate
とstartup
を再び
ステップ3
これで準備は完了です。プラガブルデータベースを開いて、クライアントから切断できます。切断後、listener.oraとtnsnames.oraがLOCAL_LISTENERパラメータファイルで適切に構成されていて、接続する必要のあるリスナーがサーバーで開始されている場合、connect username/password@descriptor
を使用してそのリスナーからクライアントに再接続できます。ここで、「記述子」は、実行中のカスタムリスナーに関連付けられたネットワークサービス名に対応します。
構文の詳細については、以下をお読みください。
https://docs.Oracle.com/database/121/NETRF/tnsnames.htm#NETRF26
https://docs.Oracle.com/cd/B28359_01/network.111/b28317/listener.htm#NETRF008
Balazs PappとJSapkotaに感謝
lsnrctl start
は、ポート1521
でLISTENER
という名前のデフォルトのリスナーを起動します。これは設定を必要としません。このリスナーはlistener.ora
なしで開始できます。
カスタムリスナーをポート1521に配置しないように練習することはできません。DBに接続するためにそれらを使用することはできません。
データベースは、設定なしでデフォルトの1521
ポートで実行されているリスナーに登録されます。他のポートでリスニングする他のリスナーにもデータベースを動的に登録する場合は、local_listener
パラメータを設定する必要があります。たとえば、ポート1521
と1522
に2つのリスナーがある場合、Host
の後に実際のホスト名またはIPを使用して、データベースインスタンスで以下を設定する必要があります。
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(Host=...)(PORT=1521)), (ADDRESS=(PROTOCOL=TCP)(Host=...)(PORT=1522))';