Oracle網路 - listener.ora , tnsnames.ora 等 [final]

tolywang發表於2010-09-02


1. 網路結構
BS結構
CS結構

架構
Client -à Server 2層
Client -à Middle tier -à Server 3層

特點
客戶端和伺服器端使用相同的網路協議
客戶端可以為瘦客戶端或PC


中間層實現負載均衡,一臺可面對多臺伺服器。作用是在client和server中起到一個翻譯的作用,比如兩端的網路協議不同等


伺服器端儲存真實資料

舉例

ie -à iis(web server) -à database server


2. oracle網路方案 --- connectivity連線

oracle net services特點:

a. 使得client和server的連線與網路協議無關,oracle net services使用API針對不同協議提供不同的介面卡,因此只要物理上可以連通,那麼oracle實現連線不存在問題。
b. 使得client和server的連線與所在平臺無關
c. 提高了GUI圖形使用者介面工具簡化管理且有多種配置選項 (tnsnames.ora)
d. 提供了跟蹤和診斷工具,且有最基本的安全保證


oracle的連線還可使用IIOP/HTTP協議實現,比如使用isqlplus 在web上直接連oracle server。因此在使用isqlplus時,需要輸入的連線串名不是tnsnames.ora中配置的name servers而是指定伺服器上監聽到的instance name

HTTP:HYPERTEXT TRANSFER PROTOCOL

IIOP:INTERNET INTER-ORB PROTOCOL


3. oracle網路方案 --- Directory Services

Directory naming 目錄命名:是使支援足LDAP協議的目錄伺服器來為網路命名的一種方法。它要求伺服器端有相容LDAP的目錄伺服器,客戶端也要有LDAP的相關配置。


目錄服務:就是OID(oracle internet directory).是相容了LDAP的目錄服務。整合在oracle9i,簡化了網路管理,且提供了安全可依賴的目錄結構


LDAP:Lightweight Directory Access Protocol 輕量級目錄訪問協議


4. oracle網路方案 --- scalability可量測性

法一:使用oracle shared server,以前稱為:MTS多執行緒伺服器。這個是針對系統資源有限仍可支援過多使用者訪問的方法,即多個使用者共享同一個伺服器程式,多個連線被一個介面卡路由,提高了資源的利用率,降低了使用者的使用效果
法二:使用CM(connection manager),就是所謂的中間伺服器,oracle預設是不安裝的,若要使用需要增加額外的元件。CM的優點是:a.多功,即多個使用者連線轉化為一個連線訪問資料庫

b.使得client和server可以跨協議連線,即連線與協議無關

c.可以設定網路限制,控制可以訪問資料庫的使用者有哪些


在1成功連線CM產生到server的2後,client產生的所有對 server的訪問,透過CM的全部使用2。有效的降低了資料庫的連線數


5. oracle網路方案 --- Advanced Security

條件:

在client和server端都要安裝 Advanced Security元件

特點:

A.加密傳輸資料:client -à data -à 加密 -à network transfer -à 解密 -à 伺服器
B.授權使用者訪問:透過第三方的裝置和SSL(Secure Sockets Layer)確定使用者的訪問許可權
C.資料完整性:在網路傳輸過程保證資料的完整性

Oracle的普通安全保證來自於:oracle net and firewalls。放火牆有2種,一種是基於供應商的防火牆,條件是需要使用CM(connect manager),另外一種是stateful packet的防火牆


6. oracle網路方案 --- accessibility

不同資料庫系統間的訪問:使用透明閘道器,實現在不同資料庫系統下,使用者可以無縫透明的相互訪問

外部程式的訪問:

A. oracle的監聽器可以監聽外部程式的呼叫,在listen.ora檔案中,”KEY = EXTPROC”來實現oracle服務

器對外部程式呼叫的監聽。如果客戶端需要呼叫外部程式,也需要開啟監聽

B. PLSQL可以呼叫外部程式3GL(第三代程式語言),比如JAVA等


知識點:

Oracle net services / IIOP and HTTP connectivity / oracle internet directory

oracle shared server / connection manager / oracle advanced security

heterogeneous services

 

CHAPTER 2 Basic Oracle Net Architecture
1. oracle的連線型別有2種:

client-server application:可使用任意網路協議

web application connection:使用TCP/IP協議


2. Client-Server Application Connection:No Middle-Tier


Forms/sqlplus 發出命令,用OCI(oracle呼叫介面)傳給TTC

TTC(two tasks command)完成字符集和資料型別的轉換,傳到oracle net

Oracle net對剛才的命令打成邏輯包,傳到OPS

OPS為協議介面卡,將剛才的邏輯包轉化為物理包,透過網路協議船給server


上面圖執行的順序是個U型,由client到server,再由server到client


3. Web Application Connections有2種實現方法:

A. 使用web server作為中間層與JDBC oracle call interface驅動或瘦JDBC配置

B. 直接連線database server,透過IIOP或HTTP協議。比如isqlplus等


4. Web Application Connection:


JAVA Application Client
JAVA Applet Client


這個與client-server application connection幾乎一樣,只是把SQLPLUS工具改為了JAVA工具放在中間層,而使用者使用是從WEB上調JAVA。而在JAVA與資料庫連線中需要一個JDBC介面

相對於oracle server而言,middle-tier為一個client端,因此連線方式很多,比如TCP/IP等。中間層的作用就是:翻譯,負載均衡,閘道器


5. Web Application Connection:No Middle-Tier


使用該類連線方式的條件是:伺服器端必須支援HTTP和IIOP。即在資料庫上啟動相應的服務

該類連線典型的例子就是:isqlplus


使用isqlplus

在Windows上:啟動ORACLE的HTTP服務

在Linux上:啟動isqlplus服務,即敲入:[oracle@sating bin]$isqlplusctl start


然後在web browser上敲入地址:http://資料庫伺服器IP:isqlplus的埠號/isqlplus

eg.

注:isqlplus的埠號可以在$ORACLE_HOME/install/portlist.ini中檢視到,該檔案是oracle提供的所有預設埠號的列表,isqlplus預設是:5560


CHAPTER 3 Basic Oracle Net Server-Side Configuration
1. sqlnet.ora:網路配置概要檔案,在伺服器端和客戶端都有

tnsnames.ora:以local name本地命名方式實現資料庫連線時,在客戶端存在的用來解析service_name的檔案

listener.ora:是個耳朵的功能,監聽客戶端的連線請求,在伺服器端存在的,記錄 server端登記的service_name


2. 監聽的實現方式

當client端發出一個連線請求,且client傳送的service_name和server端登記的service_name匹配時,listener會根據情況實現2種監聽方式:

A. 啟動一個獨佔伺服器程式process “Bequeath Session”


B. 把該連線重定向到一個已經啟動了的process,(該process在DB啟動時啟動),常用於MTS

“Redirect Session”


A,B兩種方式的第1步和client端配置的命名方法有關,常用的都是服務名service_name解析,。A類從第4步開始通訊,B類從第5步開始通訊。


3. 配置listerner:靜態配置法 或 動態配置法


static service configuration
Dynamic service configuration


特點
A. 應用與8和更早的版本

B. 需要伺服器端有listener.ora檔案

C. 需要OEM和其他一些oracle提供的配置工具
A. 不需要伺服器端有listener.ora檔案

B. 該類監聽使用PMON程式監控程式,

C. 引數instance_name和service_name必須指定


4. 靜態配置法的listener.ora檔案

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)


SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = BOSS)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(SID_NAME = BOSS)

)

)


---LISTENER為oracle預設的監聽名稱

–--HOST為主機名,如果使用的是TCP/IP協議,也可寫伺服器IP地址

---PORT=1521是oracle預設分配的標準監聽器的埠號,也可使用別的埠號

---SID_LIST_LISTENER代表名為LISTENER的監聽器所服務的DB,可同時服務多個DB

---GLOBAL_DBNAME的值可以任意定,因為它是作為別名存在的,代表伺服器端的service_name,只要client端在配置tnsnames.ora中service_name的值是這個listener上的global_name的值,連通就沒問題。一般寫 SID.DOMAINNAME。但ORACLE_HOME和ORACLE_SID必須寫準確資訊

---ORACLE_HOME就是ORACLE_SID指定DB的$ORACLE_HOME引數值


5. 動態配置listener

步驟一:輸入lsnrctl,檢視輸出的預設監聽名。(如果要檢視非預設監聽器的狀況命令是:lsnrctl+監聽器名)

STATUS of the LISTENER

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

Alias LISTENER

步驟二:A. 如果預設的監聽器名為:LISTENER,則確定引數service_name和instance_name設定了正確的值

B. 如果預設的監聽器名不為:LISTENER,則不但要確定引數service_name和instance_name設定了正確的值,還要指定local_listener引數。如果當前是共享伺服器,還需要指定引數dispatchers

步驟三:重起資料庫即可


注意:

A. 此時沒有listener.ora檔案,也沒有手動輸入lsnrctl start,因為oracle在啟動時透過PMON直接啟動監聽器,可使用lsnrctl status檢視監聽器的狀況

B. 在client端配置相應的tnsnames.ora,此時service_name為server端指定的引數service_name的值

C. service_name和instance_name可以任意指定,但必須這2個引數的值相同。在連線時tnsnames.ora,中service_name給相應值即可

D. 無論動態註冊還是靜態註冊,client端都需要有相應的內容記錄在tnsnames.ora中

E. 動態註冊,在資料庫啟動後每一分鐘註冊一次


6. listener的注意事項

A. listener只在發出連線時有用,一旦連線上了,就不再起任何作用,此時client-server的連線只和伺服器分配的process有關。

B. 一個listener可以服務多個DB。多個listener也可以服務一個DB,此時起到負載均衡的作用當一個listener忙的時候可使用另外一個

C. 在oracle網路這一塊,有2個別名,可任意給值。一個就是listener.ora中的global_name,只要與tnsnames.ora中的service_name值相同即可。另外一個就是tnsnames.ora中指定的連線串的串名,只要在連線資料庫時@後寫該串名即可(eg.sqlplus )。

D. listener.ora檔案只在啟動listener時有用,一旦啟動後,刪除該檔案也不影響oracle的連線,但無法重起listener

E. 靜態配置監聽器需要在資料庫啟動後,手工啟動監聽器,資料庫關閉時,手動關閉監聽器

動態配置監聽器,在資料庫啟動時自動啟動監聽器,資料庫關閉時自動關閉監聽器


7. JVM:JAVA的虛擬機器


8. LSNRCTL命令

LSNRCTL>help

LSNRCTL>show + 引數名

LSNRCTL>set + 引數名 + 值


總結:

監聽的實現方式有2種,一個是有監聽啟動獨立程式,另一種是有監聽使用共享程式


監聽的配置方法有2種,一個是有動態配置,使用引數service_name和instance_name來解析服務名,使用PMON

程式管理監聽程式。另一個是靜態配置,使用listener.ora檔案配置監聽,其中的global_name來用於解析服

務名,需要DBA手動開啟和關閉監聽程式

 

 

 

 

 

 

CHAPTER 4 Basic Oracle Net Client-Side Configuration
1. 客戶端的網路配置有很多方法,常見的有2種配置方法:host naming 和 local service name(tnsnames)。當前客戶端可使用的方法,定義在sqlnet.ora中 ”name.directory_path = (HOSTNAME,TNSNAMES)”

 

Host naming
Local service name(tnsnames)

區別
主機名解析法,在server端實現解析
本地伺服器名解析法,在client端實現解析

實現條件
A.client端和server端的連線協議為TCP/IP,且埠號為1521

B.主機名是透過DNS或者是客戶端上/etc/hosts檔案中記錄的伺服器IP地址來解析的

C.不可使用CM和一些oracle的高階安全設定


連線
conn s/s@”主機名”
Conn s/s@在tnsnames.ora中配的串名

要求
A. 在客戶端和伺服器端的sqlnet.ora中指明解析方法為name.directory_path = (HOSTNAME)

B. client端不需要tnsnames.ora檔案,但需要在/etc/hosts檔案中寫請IP和主機名的對應關係

C. server端的listner.ora檔案中,必須指明主機名 (global_dbname = 主機名)


A. 在客戶端和伺服器端的sqlnet.ora中指明解析方法為name.directory_path = (TNSNAMES)

B. client端需要tnsnames.ora檔案,該檔案中service_name需要與server端的listener.ora中的global_name相對應,因為是根據這個名字進行的解析。而連線串名可自己定義

C. 補充,在oracle 8前,tnsnames.ora中的service_name為DB_SID

D. Tnsname.ora中配置的埠需要與server端的listener.ora中一致

 

總結:

oracle的網路配置策略需要從3個方面進行定義,首先確定監聽是靜態的還是動態的,其次確定命名的解析方法是主機名解析方法還是本地解析方法,如果是本地解析方法需要再去配置本地解析的命名檔案(tnsnames.ora)

 

 

 

 

 

 

 


CHAPTER 5 Usage And Configuration Of The Oracle Shared Server
1. oracle shared server在9I前被叫做MTS,多執行緒伺服器。作用是在同等的資源下,支援更多的併發訪問


2. 獨佔伺服器模式 與 共享伺服器模式比較


共享伺服器模式 shared server
獨佔伺服器模式 dedicated server

連線方式
User process -à dispatcher

-à shared server process

-à SGA + background process


Oracle伺服器透過dispatcher調配器為使用者程式分配一個共享的伺服器程式
User process -à server process

-à SGA + background process


Oracle伺服器為每個使用者連線分配一個專用的伺服器程式

SGA


shared pool and other memory structure

+ user session data

+ cursor state
shared pool and other memory structure


使用者連線的資料儲存在PGA中

PGA
statck space

使用者連線的資料儲存在SGA中,因此該模式需要更大的SGA記憶體
statck space

+ user session data

+ cursor state


3. 共享伺服器模式優點:

減低訪問instance的程式數量,增加使用者的併發數,使資料庫伺服器負載均衡,減少空間的伺服器程式,減少記憶體的消耗和系統負擔


4. connecting


1發出connect連線請求到listener,listener確定連線是否合法

2listener返回關於dispatcher的資訊,指明那個dispatcher是可使用的

3連線dispatcher,只有再由dispatcher分配shared server process

注意:若listener為配置為共享伺服器模式,但沒有啟動dispatcher,則連線失敗。

5. Processing a request


1連線到空閒的dispatcher

2由dispatcher把command放到請求佇列裡,等待空閒的server process

3command被空閒的server process 接受並處理

4把處理結果傳給響應佇列

5響應佇列再傳給空閒的dispatcher

6dispatcher把結果返回給使用者

注意:請求佇列對於server process是共享的

響應佇列對於server process是獨佔的


6. 配置共享伺服器

伺服器端:定義dispatchers和shared_servers引數

SQL>alter system set

dispatchers=’(PROTOCOL=TCP)(SERVICE=SS)(PROTOCOL=TCP)(DISPATCHERS=2)’;

為service_name=’SS’的監聽服務啟動2個可以使用TCP/IP協議連線的dispatchers


SQL>alter system set dispatchers=’(PROTOCOL=TCP)(DISPATCHERS=2)’;

為所有監聽服務啟動2個可以使用TCP/IP協議連線的dispatchers


SQL>alter system set shared_server=6;

為共享伺服器分配6個shared server processes


客戶端:修改tnsnames.ora的連線解析方式

當使用者使用SS連線串連線時,使用的是共享伺服器程式

當使用者使用SATING連線串連線時,使用的是獨佔伺服器程式

這樣,一個service_name,根據tnsnames.ora中的解析方式不同,所使用的伺服器使用方式也不一樣


SS =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVER = SHARED)

(SERVICE_NAME = ss)

)

)


SATING =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = ss)

)

)


7. server端還有一些其他的引數可以設定

max_dispatchers:最多的dispatchers數量,上面dispatchers引數設定的是啟動了多少dispatchers,如果max_dispatchers為5,那麼最多可啟動4個,若試圖啟動5個則報錯ORA-00112

max_shared_server

circuits:內路和外路可使用的網路連線的總共虛擬路線的條數

shared_server_sessions:作為共享伺服器方式連線上的session的最大數,

引數sessions - 引數shared_sever_sessions = 可以獨佔方式登陸的總session數


相關的一些引數:

large_pool_size:在共享伺服器中,獨立分配出的一塊記憶體區域

session:控制可用獨佔方式登陸的session數量


8. 檢視登記到listeners的dispatchers的情況:lsnrctl service


9. 可檢視的資料字典

v$circuuit
有幾個共享伺服器的連線,該view就有幾條記錄

v$shared_server
v$dispatcher

v$shared_server_monitor
v$queue

v$queue
v$session


4. 注意:

A.共享伺服器模式和獨佔伺服器模式是可以同時存在的

B.在使用as sysdba選項連線資料庫伺服器時,只能使用獨佔伺服器模式登陸

C.S001,S002… … 代表shared server processes。 D001,D002… … 代表著dispatchers

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-672475/,如需轉載,請註明出處,否則將追究法律責任。

相關文章