oracle實驗記錄 (listener.ora與 tnsnames.ora)
講解下listener.ora與 tnsnames.ora
寫過一篇NET的 不過實驗完後 複製記錄 時 順序有問題,所以重新整理實驗記錄一次
伺服器listener
C:\>sqlplus xh/a831115
SQL*Plus: Release 10.1.0.2.0 - Production on 星期三 8月 12 13:17:32 2009
Copyright (c) 1982, 2004, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
這種是IPC 連線(程式間連線) client與SERVER 在一臺機器上
SQL> conn xh/a831115@orcl;
已連線。
這種TCP IP連線 CLIENT 用TNSNAMES.ora ,server用 listener.ora
基本理論:
基本的TCP IP 過程是 CLIENT 發請求 SERVER 的LISTENER 程式 監聽請求 然後LISTENER 通過PMON 註冊到LISTENER的資訊檢查下,然後LISTENER 衍生出一個SERVER HANDLER 新
程式(理論上為LISTENER程式的子程式)並且將連線描述符也交給這個子程式,這樣子程式 與CLIENT 通訊 沿用LISTENER的IP&PORT ,CLIENT 屬於一次TCP/IP連線,若OS 不允許
直接傳送(WIN NT上就如此)CLIENT 請求 LISTENER ,LISTENER 衍生出SERVER HANDLER ,LISTENER 與衍生出的新程式IPC連線
新程式將PORT 告訴LISTENER ,LISTENER將PORT 告訴 CLIENT,CLIENT 用新PORT 與 新程式連線(IP 還是用LISTENER的 因為只發了PORT) 這樣CLIENT 就是2次TCP連線,另外若
是SHARED MODE那麼 LISTENER不會衍生SERVER HANDLER 而是提前配置好DISPATCHER程式 並且註冊到LISTENER中
伺服器端的 LISTENER.ORA
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)~~~~~~~~為外部儲存過程配置的本地監聽
(ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
)
)
C:\>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 07-9月 -2009 15
0
Copyright (c) 1991, 2005, Oracle. All rights reserved.
歡迎來到LSNRCTL, 請鍵入"help"以獲得資訊。
LSNRCTL> status
服務 "PLSExtProc" 包含 1 個例程。
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "orcl" 包含 1 個例程。
例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "orcl_XPT" 包含 1 個例程。
例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...~~~~~~~~~~~~可以看到為 動態註冊
命令執行成功 動態ready,靜態unknown
情況一先啟動 DATABASE 後啟動 LISTENER
LSNRCTL> stop (關閉lsnrctl)
SQL> conn xh/a831115@orcl
ERROR:
ORA-12541: TNS: 無監聽程式
警告: 您不再連線到 ORACLE。
LSNRCTL> start
啟動tnslsnr: 請稍候...
服務 "PLSExtProc" 包含 1 個例程。
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
命令執行成功
LSNRCTL> STATUS
服務 "PLSExtProc" 包含 1 個例程。
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
命令執行成功
SQL> conn xh/a831115@orcl
ERROR:
ORA-12514: TNS: 監聽程式當前無法識別連線描述符中請求的服務
此時我們可以等待 PMON程式60秒向LISTENER 註冊資訊 也可以 手動註冊
SQL> alter system register;
系統已更改
LSNRCTL> STATUS
服務摘要..
服務 "PLSExtProc" 包含 1 個例程。
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式.
服務 "orcl" 包含 1 個例程。
例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...~~~~~~~~~~~~~~~~~~~手動註冊資訊後
服務 "orcl_XPT" 包含 1 個例程。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~READY動態註冊
例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
命令執行成功
SQL> conn xh/a831115@orcl
已連線。
這樣的情況是由於 是動態註冊導致,listener.ora中沒有服務的資訊(要等 60秒PMON 才會向LISTENER註冊)
下面針對這種情況 配置靜態註冊(靜態配置 就是將資訊明確的寫到 LISTENER。ORA中)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\oracle\product\10.2.0\Db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = E:\oracle\product\10.2.0\Db_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))~~~~~~~~~~~~~~~~~~~~~把資訊加到LISTENER.ORA中
)
) 協議,主機名字(IP也行) ,埠號
LSNRCTL>STop
LSNRCTL>START(造成DATABASE 先啟動LSNRCTL 後啟動)
LSNRCTL>STATUS
服務摘要..
服務 "PLSExtProc" 包含 1 個例程。
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "orcl" 包含 1 個例程。
例程 "orcl", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...~~~~~~~~~~~~~~~~~~~~~~~~靜態註冊(UNKNOW) 此時可以看到沒有動態註冊(READY)
命令執行成功
SQL> conn xh/a831115@orcl(通過靜態註冊連線)
已連線。
LSNRCTL>STATUS
服務 "PLSExtProc" 包含 1 個例程。
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "orcl" 包含 2 個例程。
例程 "orcl", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
服務 "orcl_XPT" 包含 1 個例程。
例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...~~~~~~~~~~~~~~~過了會看 PMON想LSNRCTL 動態註冊了
動態註冊的一個特點就是不需要LISTENER.ORA檔案
預設情況PMON 向LSNRCTL 註冊TCP/IP協議,PORT 為1521*********當然可以改埠號 需要下面這個引數 ,對此將有單獨的實驗
SQL> show parameter local
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string
SQL> host move E:\oracle\product\10.2.0\Db_1\NETWORK\ADMIN\listener.ora d:\listene ~~~~~~~~~~~~~~~移走
r.ora
LSNRCTL> stop
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
命令執行成功
LSNRCTL> start
命令執行成功
LSNRCTL> status
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
TNS-12541: TNS: 無監聽程式
TNS-12560: TNS: 協議介面卡錯誤
TNS-00511: 無監聽程式
32-bit Windows Error: 2: No such file or directory
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=6688-621)(PORT=1521)))
LISTENER 的 STATUS
------------------------
別名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Producti
on
啟動日期 07-9月 -2009 16:31:59
正常執行時間 0 天 0 小時 0 分 6 秒
跟蹤級別 off
安全性 ON: Local OS Authentication
SNMP OFF
監聽程式日誌檔案 E:\oracle\product\10.2.0\db_1\network\log\listener.log
監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=6688-621)(PORT=1521)))
監聽程式不支援服務
命令執行成功
*****
服務 "orcl" 包含 1 個例程。
例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...~~~~~過一會PMON 註冊動態LISTENER了
服務 "orcl_XPT" 包含 1 個例程。
例程 "orcl", 狀態 READY, 包含此服務的 1 個處理程式...
SQL> conn xh/a831115@orcl;
已連線。
靜態時候 LISTENER 將 LISTENER.ORA中 GLOBAL_NAME 與CLIENT TNSNAMES.ORA中 SERVIEC_NAME 匹配 若CILENT TNSNAME.ORA中用的 SID 那麼 listener use LISTENER.ORA中
SID_name 匹配就行了
實驗看下
listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\oracle\product\10.2.0\Db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = E:\oracle\product\10.2.0\Db_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
)
)
tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl) ~~~~~~~~~~~~~~~~~~~將SERVICE_NAME 修改成別的
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
SQL> show parameter db_name
NAME TYPE VALUE
------------------------------------ ----------- ---------------
db_name string xhtest
SQL> show parameter db_domain
NAME TYPE VALUE
------------------------------------ ----------- ---------------
db_domain string
SQL> show parameter service_name
NAME TYPE VALUE
------------------------------------ ----------- ---------------
service_names string ORCL, XH
SQL> show parameter global_name
NAME TYPE VALUE
------------------------------------ ----------- ---------------
global_names boolean FALSE
SQL>
default service_name=global_name=db_name.db_domain
用server_name匹配
(SID_DESC =
(GLOBAL_DBNAME = tttttt)~~~~~~~~~~~~~~~~~~~修改 (LISTENER.ORA)
(ORACLE_HOME = E:\oracle\product\10.2.0\Db_1)
(SID_NAME = orcl)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)~~~~~~~~
(SERVICE_NAME= orcl)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(tnsnames.ORA)
)
)
LSNRCTL STOP
START
STATUS
服務 "tttttt" 包含 1 個例程。
例程 "orcl", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...~~~此時只有一個靜態
命令執行成功
LSNRCTL>
SQL> conn xh/a831115@orcl
ERROR:
ORA-12514: TNS: 監聽程式當前無法識別連線描述符中請求的服務~~~出現問題 LISTENER.ORA中GLOBAL_NAME與 TNSNAMES.ORA中SERVICE_NAME 不匹配
警告: 您不再連線到 ORACLE。
用orcle_sid匹配
LISTENER.ORA
(SID_DESC =
(GLOBAL_DBNAME = tttttt)~~~~~~~~~~~~~~不在使用這個匹配
(ORACLE_HOME = E:\oracle\product\10.2.0\Db_1)
(SID_NAME = orcl)~~~~使用這個
)
)
tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(oracle_sid = orcl)**********************************讓TNSNAMES使用ORACLESID 這樣 LISTENER.ORA 將用 SID_NAME與起其匹配
)
)
LSNRCTL STOP
START
服務 "PLSExtProc" 包含 1 個例程。
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "tttttt" 包含 1 個例程。
例程 "orcl", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...~~~~~~~~~~~~~~~~~~靜態註冊
命令執行成功~~~~~~~~~~~~~LSTENER STATUS
SQL> conn xh/a831115@orcl
已連線。
******************
關於tnsnames.ora
這個是CLIENT 要配的~~~CLIENT 總要知道些資訊才能 才能連線吧 包括 使用者 名 密碼,IP,PORT,SERVICE_name
xh =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(oracle_sid = orcl)
)
)
AA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(oracle_sid = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
也可以 不用TNSNAME。ORA直接連
IP Address. . . . . . . . . . . . : 192.168.1.126
SQL> conn xh/a831115@192.168.1.126:1521/xh (IP ,PORT,連線符) 屬於EASY NAMING
Connected.
SQL> conn xh/a831115@(description=(address=(protocol=tcp)(host=6688-621)(port=1521)
)(connect_data=(sid=orcl)))
已連線。
LOCAL NAMING 就是 都放入 TNSNAME。ORA
SQLNET。ORA
SQLNET.AUTHENTICATION_SERVICES= (NTS)~~可以控制/ AS SYSDBA(會有單獨實驗詳細介紹 AS SYSDBA)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) 這個是允許CLIENT連線的方式
若 TNSNAMES去掉
C:\>sqlplus xh/a831115@xh
SQL*Plus: Release 10.1.0.2.0 - Production on 星期三 8月 12 15:56:32 2009
Copyright (c) 1982, 2004, Oracle. All rights reserved.
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~幾個檢查
C:\>PING 192.168.1.126~~~~~~~~~~~~網路
Pinging 192.168.1.126 with 32 bytes of data:
Reply from 192.168.1.126: bytes=32 time<1ms TTL=128
Reply from 192.168.1.126: bytes=32 time<1ms TTL=128
Reply from 192.168.1.126: bytes=32 time<1ms TTL=128
Reply from 192.168.1.126: bytes=32 time<1ms TTL=128
Ping statistics for 192.168.1.126:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
C:\>tnsping xh~~~~~~~~~oracle層的檢查
TNS Ping Utility for 32-bit Windows: Version 10.1.0.2.0 - Production on 12-8月 -
2009 15:58:55
Copyright (c) 1997, 2003, Oracle. All rights reserved.
Used parameter files:
E:\oracle\product\10.1.0\Db_1\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 6688-621
)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (oracle_sid = orcl)))
OK (50 msec)
若PING通 但TNSPING不通 那麼檢查TNSNAMES.ora or sqlnet.ora中是否禁用TNSNAMES
C:\>lsnrctl~~~~控制LISTENER
LSNRCTL for 32-bit Windows: Version 10.1.0.2.0 - Production on 12-8月 -2009 16:0
1:17
Copyright (c) 1991, 2004, Oracle. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> help
The following operations are available
An asterisk (*) denotes a modifier or extended command:
start stop status
services version reload
save_config trace change_password
quit exit set*~~~~~~~~~~~~~~還有許多可設定的引數
show*
LSNRCTL> show
The following operations are available after show
An asterisk (*) denotes a modifier or extended command:
rawmode displaymode
rules trc_file
trc_directory trc_level
log_file log_directory
log_status current_listener
inbound_connect_timeout startup_waittime
snmp_visible save_config_on_stop 使用查聯機文件就行了
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12020513/viewspace-614293/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 11g 【listener.ora tnsnames.ora】Oracle
- Oracle網路 - listener.ora , tnsnames.ora 等 [final]Oracle
- oracle實驗記錄 (子游標與解析)Oracle
- oracle實驗記錄 (基礎,truncate與delete區別實驗)Oracledelete
- oracle實驗記錄 (flashback)Oracle
- oracle實驗記錄 (OMF)Oracle
- oracle實驗記錄 (NET)Oracle
- oracle實驗記錄 (audit)Oracle
- oracle實驗記錄 (oracle reset parameter)Oracle
- oracle實驗記錄 (PGA manual or auto 與hash join)Oracle
- oracle實驗記錄(並行操作與FTS COST)Oracle並行
- oracle網路配置listener.ora、sqlnet.ora、tnsnames.oraOracleSQL
- oracle網路配置(listener.ora/sqlnet.ora/tnsnames.ora)OracleSQL
- Oracle Data Redaction實驗記錄Oracle
- oracle實驗記錄 (block cleanout)OracleBloC
- oracle實驗記錄 (dump undo)Oracle
- oracle實驗記錄 (inlist card)Oracle
- listener.ora檔案與tnsnames.ora之間的關係
- oracle實驗記錄 (oracle 資料字典)Oracle
- oracle實驗記錄 (oracle 10G dataguard(10)flashback 與dg)Oracle
- Oracle檔案改名實驗記錄Oracle
- oracle實驗記錄 (選擇率)Oracle
- oracle實驗記錄 (dump logfile)Oracle
- oracle實驗記錄 (事務控制)Oracle
- oracle實驗記錄 (函式index)Oracle函式Index
- oracle實驗記錄 (bigfile tablespace)Oracle
- oracle實驗記錄 (恢復-redo)Oracle
- oracle實驗記錄 (expdp/impdp使用)Oracle
- oracle實驗記錄 (transport tablespace(Rman))Oracle
- oracle實驗記錄 (使用exp/imp)Oracle
- oracle實驗記錄 (sort_area_size與 cpu_time)Oracle
- oracle實驗記錄 (FTS的cost與基數計算)Oracle
- oracle實驗記錄 (快取記憶體命中率與成本)Oracle快取記憶體
- oracle實驗記錄 (oracle 10G dataguard(9)rman恢復與dg)Oracle
- oracle實驗記錄 (dump index b*tree)OracleIndex
- oracle實驗記錄 (CKPT的觸發)Oracle
- oracle實驗記錄 (dump undo4)Oracle
- oracle實驗記錄 (dump undo3)Oracle