oracle 監聽文件 說明


MAR:電腦筆記 不做整理 。。

ORACLE_SID=orcl2

instance_name=sicca

 

靜態注冊文件中SID_NAME=ORACLE_SID

動態注冊的時候是用的instance_name

 

在tnsname.ora中,動態注冊的話,監聽器知道實例的狀態。注冊的是參數文件中的instance_name 。客戶端要與注冊端保持一致SID就是instance_name .

靜態注冊,在沒有實例起來的情況下也可以鏈接,注冊用的是ORACLE_SID。客戶端與注冊段保持一致,就是ORACLE_SID

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------

可以在同一個oracle home 下存在兩個不相同的oracle sid ,相同的instance name ,db name 。動態注冊到監聽后,如果不通過服務名,默認哪個實例先注冊,就連哪個實例。

 

 

SQL> alter system set service_names='eygle,julia' scope=both;

System altered.

SQL> show parameter service_names

NAME TYPE VALUE

-------------------- ------------- ----------------------------------------

service_names string eygle,Julia

 

tnsnames.ora

EYGLE=

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.33.11)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = eygle)

(SID = sicca) 這個sid就是數據庫instance_name的值,可以跟ORACLE_SID不同。--- 補充:這個sid 跟要跟靜態或者動態注冊的SID_NAME保持一致。動態注冊是用的參數instance_name的值,靜態注冊用ORACLE_SID。

)

)

ADDRESS 部分包含了服務器的地址及監聽端口信息,CONNECT_DATA 部分包含了連接信息,用於定義目標服務的名稱。

SERVICE_NAME 在這里用於識別訪問的數據庫服務;

ERVICE_NAME 在這里也經常可以用 SID 來替代,從 Oracle 9i 開始,Oracle 推薦使用SERVICE_NAME 而不是 SID

 

因為oracle默認的服務名就是數據庫的名字或者數據庫的global_name .所以這里的service_name=global_db_name=db_name.db_domain

也可以如文章開頭那樣,指定其他服務名。

 

同樣在$ORACLE_HOME/network/admin 目錄下可以找到 listener.ora 文件,以下是一個監聽器文件的典型配置:

第一部分 LISTENER 信息,這部分包含了監聽的協議、地址以及端口等信息。

第二部分 SID_LIST_LISTENER 信息,這部分信息用於提供對外的數據庫服務列表。第一個 SID_DESC 部分(SID_NAME = PLSExtProc)是數據庫缺省就包含的對外部存儲過程提供

的本地監聽,此外兩個 SID_DESC 部分就是對數據庫的兩個 SERVICE_NAMES 所設置的監聽服務,對於同一個 SID 對應的數據庫,可以對外提供多個服務名供客戶端訪問。

設置服務名的參數為 GLOBAL_DBNAME,當處理客戶端連接請求時,監聽器首先嘗試將 GLOBAL_DBNAME 和客戶端請求中的 SERVICE_NAME 相匹配;如果客戶端連接請求的是 SID 信息,則 Oracle 不檢查 GLOBAL_DBNAME 設置,而是對監聽器中設置的 SID_NAME進行匹配

 

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))

)

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.33.11)(PORT = 1521))

)

)

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /opt/oracle/product/9.2.0)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = eygle)

(ORACLE_HOME = /opt/oracle/product/9.2.0)

(SID_NAME = eygle)

)

(SID_DESC =

(GLOBAL_DBNAME = julia)

(ORACLE_HOME = /opt/oracle/product/9.2.0)

(SID_NAME = eygle)

)

)

 

RAC中有點區別

動態注冊可以不要監聽文件。因為rac每個服務要向多個實例注冊,需要設置初始參數remote_listener。

簡單來說,動態注冊會根據參數文件中如下參數去進行注冊:

local_listener

對於專用服務器模式,參數可以設置為:

LOCAL_LISTENER=listener_alias (別名就是在listener_alias=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=prod-server)(PORT=1522))))

對於共享服務器模式,參數可以設置為:

DISPATCHERS="(PROTOCOL=tcp)(LISTENER=listener_alias)"

 

remote_listener

10g rac中可以指定一個相同的名字remote_listener=LISTENERS_SMSDB

然后 tnsnames.ora 文件配置包含如下信息: 全部是虛擬IP

LISTENERS_SMSDB =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.13)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.14)(PORT = 1521))

)

 

11g rac中 用了scan-vip(比如我自己電腦)

remote_listener =scan-vip:1521

 

 

簡捷的 Easy Connect 方式

 

從 Oracle Database 10g 開始,一種稱為 Easy Connect Naming Method 被引入到數據庫中來,通過在 客 戶 端 和 數 據 庫 服 務 器 端 的 sqlnet.ora 文 件 中 設 置 NAMES.DIRECTORY_PATH命 名 方 法 可 以 啟 用 這 個 特 性 ,例如如下設置,指定數據庫可以接受 EZCONNECT 方式的連接:

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

進行了這樣的設定之后,可以在客戶端使用如下方式進行數據庫連接:

[oracle@drac1 admin]$ sqlplus eygle/eygle@172.16.3.248:1521/orcl.local.com

 

 

(留)

對應於 RAC 環境,客戶端的 tnsnames.ora 文件配置也有所不同,以下是一段 RAC 環境下客戶端的配置示例。與單實例的不同之處在於地址列表段包含多個實例的地址信息,同時支持

負載均衡和在多實例之間的 FailOver 切換:

SMSRAC =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.13)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.14)(PORT = 1521))

(LOAD_BALANCE = yes)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = smsrac)

(FAILOVER_MODE =

(TYPE = SELECT)

(METHOD = BASIC)

(RETRIES = 180)

(DELAY = 5)

)

)

)

 

oracle 11g rac 中靜態監聽的不同

 

listener.ora配置文件中的信息是Grid Infrastructure安裝過程中Agent自行添加的(During the Grid Infrastructure installation, the (default) node VIP listener is always created referencing the public network),比較難以理解的可能是LISTENER僅指定了PROTOCOL=IPC的信息, 而沒有指定監聽的地址、端口等信息。

實際上11.2 GI的LISTENER 監聽器配置默認受到11.2新引入的endpoints_listener.ora配置文件的管理:

注意:使用 endpoints_listener.ora的情況 下不應使用lsnrctl管理LISTENER,而需使用srvctl或crsctl工具管理,否則lsnrctl將不會識別 endpoints_listener.ora中的信息,造成監聽沒有在必要地址、端口上工作。如:

而在11.2 RAC中listener.ora僅記錄LISTENER的IPC條目。這樣做的目的是方便dbca配置數據庫參數及tnsnames.ora配置文件。了解到以上信息后可能你對當前11.2 RAC中的listener.ora文件中的監聽配置信息不再感到奇怪。我們可以使用netca圖形化工具或者srvctl 命令行工具添加監聽配置; 如果僅僅是手動在listener.ora中添加記錄的話是無法被注冊為Cluster Ready Service的服務的,將不會被CRS管理。

 

1 $ srvctl config listener

Name: LISTENER

Network: 1, Owner: grid

Home: <CRS home>

End points: TCP:1521

 

2 $ srvctl add listener -l SICCA_LISTENER -o $ORACLE_HOME -p 1588 -k 1

 

3 $ srvctl start listener -l SICCA_LISTENER

srvctl start listener啟動新添加的監聽后listener.ora和endpoints_listener.ora會出現新的記錄:

 

4 在listener.ora配置文件中加入(SID_LIST_($LISTENER_NAME),並重啟監聽即完成靜態注冊:

 

5 $ srvctl stop listener -l SICCA_LISTENER --or-- $ crsctl stop res ora.MACLEAN_LISTENER.lsnr

 

6 $ srvctl start listener -l SICCA_LISTENER --or-- $ crsctl start res ora.MACLEAN_LISTENER.lsnr

 

7 $ lsnrctl status SICCA_LISTENER --or-- $ crsctl status res ora.MACLEAN_LISTENER.lsnr

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM