從連線到資料(一)

realkid4發表於2010-12-30

轉眼到年關。但凡是年關,總要總結一下過去,暢想一下未來。

 

總的來說,過去還是修行不夠,和大人們的差距很大。未來就是繼續努力!

 

 

這次說一說我們從連線Oracle到斷開的整個過程吧,也作為一個總結。其中肯定有環節是不明確或者有認識誤區,希望不吝指教。

 

 

連線資料庫到執行操作,直至最後斷開,共分為下面幾個階段。

 

1、  建立連線,發起會話

 

這個環節的主要過程是實現客戶端應用程式到資料庫例項之間的會話。其中主要涉及到Oracle監聽器和例項元件。

 

客戶端程式透過sqlplus或者plsql developer等工具,向資料庫伺服器提出連線請求。連線時,大部分情況是透過本地NET命名服務指定一個名稱來進行連線。

 

我們在netca中建立的“本地NET命名服務”實際上就是一個配置檔案專案。檢視客戶端上的tnsname.ora檔案,可以看到所配置的所有的本地NET命名服務資訊。下面是一段連線名配置段。

 

//tnsname.ora檔案配置片段

WILSON =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = wilson)

    )

  )

 

在配置片段中,說明定義了一個名字為wilson的本地命名,連線的資料庫伺服器在192.168.0.88IP地址上。連線資料庫例項的服務名為wilson,監聽器所在的埠是1521

 

我們連線的時候,使用conn命令。

 

 

SQL> conn scott/tiger@wilson

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Connected as scott

 

 

分隔符@後,使用的就是本地命名服務。本質上說,這個服務名就是連線伺服器地址、服務名和監聽埠的代名詞。

 

cmd視窗中,使用tnsping命令,是可以檢視本地命名服務對應的連線資訊的。

 

 

C:\Documents and Settings\Administrator>tnsping wilson

 

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 30-12-

2010 21:43:36

 

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

 

已使用的引數檔案:

D:\oracle\network\admin\sqlnet.ora //定義了oracle net service元件的一些引數,如安全等

 

 

已使用 TNSNAMES 介面卡來解析別名

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)

(HOST = 192.168.0.88)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = wilson)))

OK (0 毫秒)

 

 

有時候,手工進行tnsname.ora檔案修改的時候,常常出現錯誤。實際中,可以使用tnsping命令檢視連線的資訊,判斷是否配置正確。

 

連線命令嘗試訪問資料庫伺服器的指定埠。這時候,要注意它嘗試連線的是資料庫伺服器的監聽程式程式。監聽程式作為一個獨立的程式(Linux/UnixWindows),在監聽伺服器主機的特定埠(預設為1521)等待客戶端的請求。

 

監聽程式是客戶端與資料庫例項連線的橋樑紐帶。監聽程式一方面在等待客戶端的連線請求,另一方面接受資料庫例項的連線資訊。如果監聽器使用動態註冊技術,是可以週期性的獲取到PMON後臺程式提交的例項註冊資訊。例項註冊資訊包括例項的名稱和服務名。在這個過程中,監聽器也可以及時瞭解例項活動情況。下面是一段監聽器執行情況:

 

LSNRCTL> status 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle11g)(PORT=1521)))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                30-DEC-2010 14:09:52

Uptime                    0 days 2 hr. 0 min. 50 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/oracle/network/admin/listener.ora

Listener Log File         /u01/diag/tnslsnr/oracle11g/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g)(PORT=1521)))

Services Summary...

Service "wilson" has 1 instance(s).

  Instance "wilson", status READY, has 1 handler(s) for this service...

Service "wilsonXDB" has 1 instance(s).

  Instance "wilson", status READY, has 1 handler(s) for this service...

The command completed successfully

 

當監聽器接受到客戶端的請求時,要進行請求匹配。將已有的註冊資訊與請求進行對比,如果有相同的註冊內容,就認為連線允許,並且轉接到資料庫例項進行處理。

 

要注意,這個步驟中,不進行任何的身份驗證。

 

監聽器向資料庫例項申請獲取到一個Server Process進行會話連線。Oracle例項是若干後臺程式和共享記憶體構成。客戶端是不允許直接和例項記憶體空間進行互動,都需要透過Server Process(也成為影子程式)。監聽器需要為客戶端尋找一個Server Process進行聯絡。

 

 

這時不同的連線模式下,Oracle的行為就有所差別了。如果是專用連線模式,也就是一個客戶端對應一個Server Process,客戶端連線斷開,Server Process釋放,監聽器需要向OS申請fork一個全新的Server Process

 

如果是共享連線模式,資料庫伺服器上就還有一個名為Dispatcher的程式協同工作。監聽程相當於向Dispatcher提出要求,獲取一個Server ProcessDispatcher依據共享Server Process的原則,找到一個可以共享的Process返回給監聽器程式。

 

 

監聽器程式獲取到Server Process的資訊(程式號、通訊埠等)之後,將其返回給客戶端。客戶端重新連線伺服器主機,與Server Process單獨通訊連線。注意,這時兩者通訊的埠,不一定是1521

 

 

直到這個階段,客戶端才將登陸使用者名稱和密碼資訊透過Server Process進行驗證。驗證透過後,兩者開始建立聯絡。

 

 

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

相關文章