小議服務程式與會話(二)
PL/SQL Developer連線解析
PL/SQL Developer是我們常常使用的開發工具。這個工具同時可以開啟多個視窗,每個視窗是一個獨立的會話,那麼其中的原理和過程是如何呢?我們一起來分析。
首先啟動一個Develper程式,開啟一個視窗。實現登入。
SQL> conn sys/sys@wilson as sysdba;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as SYS
注意,此時只開啟了一個視窗,可見的只有一個會話物件!!
SQL> select sid, serial#, paddr, user#, username, machine, action from v$session where username='SYS';
SID SERIAL# PADDR USER# USERNAME MACHINE ACTION
-------- ---------- ------------------------------ ----------------------------------------------------------------
33 10 38BC4C0C 0 SYS {本機名} Main session
37 13 38BC56E4 0 SYS {本機名} Command Window - New
//說明:版式原因,將本機名簡寫;
出現了一些問題,我們只開啟了一個視窗command window。但在會話檢視中,我們卻發現了兩個會話。一個是command window,另一個是Main session。
檢視v$process,可以發現。
//篇幅原因,簡寫
SQL> select * from v$process where pname is null;
ADDR PID SPID
-------- ---------- -------------------
38BC4C0C 22 5730
38BC56E4 23 5734
兩個會話,在v$process中對應的是兩個process,分別的SPID為5730和5734。
那麼,從Linux程式列表中,如何情況呢?
[oracle@oracle11g ~]$ ps -ef | grep ora
……(篇幅原因,省略)
oracle 5720 1 0 10:41 ? 00:00:00 ora_w000_wilson
oracle 5730 1 1 10:42 ? 00:00:02 oraclewilson (LOCAL=NO)
oracle 5734 1 0 10:42 ? 00:00:00 oraclewilson (LOCAL=NO)
oracle 5747 5515 0 10:45 pts/0 00:00:00 ps -ef
oracle 5748 5515 0 10:45 pts/0 00:00:00 grep ora
果然,存在PID為5730和5734的兩個程式對應。
結論:當我們在Develper中,只開啟一個視窗的時候,是有兩個session存在的,並且與兩個server process相對應。
當我們再開啟一個command視窗(原有視窗不關閉)。
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as SYS
會話情況。
SQL> select sid, serial#, paddr, user#, username, machine, action from v$session where username='SYS';
SID PADDR USERNAME MACHINE ACTION
---------- ---------- -------- ---------- ------------------------
33 38BC4C0C SYS {本機} Main session
37 38BC56E4 SYS {本機} Command Window - New
39 38BC61BC SYS {本機} Command Window – New
增加了一個視窗,在會話層面上新增加了一個會話(SID=39)。此外,Process層面。
SQL> select * from v$process;
//有省略結果
ADDR PID SPID
---------- ------------------------------ ---------
38BC4C0C 22 5730
38BC56E4 23 5734
38BC61BC 24 5756
程式對應的地址,完全相同,說明有三個process與其對應。
作業系統層面。
[oracle@oracle11g ~]$ ps -ef | grep ora
……(篇幅原因,有省略結果)
oracle 5730 1 0 10:42 ? 00:00:02 oraclewilson (LOCAL=NO)
oracle 5734 1 0 10:42 ? 00:00:00 oraclewilson (LOCAL=NO)
oracle 5756 1 0 10:46 ? 00:00:00 oraclewilson (LOCAL=NO)
oracle 5762 5515 0 10:47 pts/0 00:00:00 grep ora
結論:當新增加一個command視窗之後,是有一個新會話生成,同時一個新的server process出現與其對應。
這次我們關閉了所有的視窗,只保留一個空的Develper介面。
SQL> select sid, serial#, paddr,machine,action from v$session where username='SYS';
SID SERIAL# PADDR MACHINE ACTION
---------- ---------- ------------------------------------ -----------------------------------
28 71 38BC56E4 WORKGROUP\WWW-0E6111DFF74 //觀察程式
33 10 38BC4C0C WORKGROUP\WWW-0E6111DFF74 Main session
只有一個Main Session的介面存在。
[oracle@oracle11g ~]$ ps -ef | grep ora
。。。(篇幅原因,有省略)
oracle 5730 1 0 10:42 ? 00:00:02 oraclewilson (LOCAL=NO) //這個是Main Session對應的程式,因為PID編號一直保留為5730;
oracle 5791 1 0 10:51 ? 00:00:00 ora_w000_wilson
oracle 5809 1 0 10:55 ? 00:00:00 oraclewilson (LOCAL=NO)
oracle 5821 1 9 10:58 ? 00:00:00 ora_j000_wilson
oracle 5823 1 0 10:58 ? 00:00:00 ora_j001_wilson
oracle 5824 5515 0 10:58 pts/0 00:00:00 ps -ef
oracle 5825 5515 0 10:58 pts/0 00:00:00 grep ora
當關閉developer之後,
[oracle@oracle11g ~]$ ps -ef | grep ora
…(有省略)
oracle 5676 1 0 10:36 ? 00:00:00 ora_q001_wilson
oracle 5718 1 0 10:41 ? 00:00:00 ora_smco_wilson
oracle 5791 1 0 10:51 ? 00:00:00 ora_w000_wilson
oracle 5826 5515 1 10:58 pts/0 00:00:00 ps -ef
oracle 5827 5515 0 10:58 pts/0 00:00:00 grep ora
分析和結論:
在分析之前,我們先關注一個細節。當我們在Developer中開啟視窗的時候,如果我們當前是已經登入的,是不需要再輸入使用者名稱和密碼的。而在我們命令列的視窗頭行,會有如下資訊:
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as SYS
細心的朋友們會意識到,這段提示實際上是我們新連線到一個Oracle例項的時候,會出現的資訊。說明我們在新開一個視窗的時候,雖然沒有輸入使用者名稱資訊,但是還是算一次登入。那麼問題來了,究竟是誰在什麼時候替我們輸入了呢?
第二個細節,每個Developer程式,只能是一個使用者在登入。比如,我開啟5個command視窗,只要我在一個視窗中重新登入。那麼其他所有的視窗的使用者資訊都是被重新整理為新的使用者,當然,會話也全部為新的。
結論:畢竟我們不是Developer的開發者,只能依據事實進行合理猜測。
1、 Developer主程式,實際上是一個Main Session的Oracle連線。只要Developer不是在nologing的狀態,就會有一個會話與資料庫伺服器相連。這個會話像一個火種,儲存著當前Developer的登入使用者資訊。在專有連線模式下,這個Main Session也是有Server Process與其連線;
2、 當我們新建立一個視窗的時候,Developer會利用Main Session的資訊,自動完成與監聽器溝通、連線重定向和與新Server Process溝通的作用。讓我們新開啟一個視窗,不需要做任何額外的工作。本質上,一個視窗,就對應的一個會話。專有模式下,也就對應的一個Server Process;
3、 當我們在任何一個視窗中重新登入的時候,Developer會將這個連線資訊(連線使用者、密碼和連線服務名)作為Main Session的一個替代品,替代Main Session原有的資訊。並且為每一個視窗,重新建立會話,形成與Server Process的通訊。在專有模式下,對應的Server Process是新生成的;
那麼,在共享模式下,我們研究的又是如何呢??
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-683640/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 第二次小組站立會議
- [程式碼會說話] 原創技術視訊第二週小結
- 搭建微信小程式服務微信小程式
- 微信小程式服務推送微信小程式
- 哪裡有開會議服務費發票_開票服務大廳
- 哪裡有開服務會議費發票_開票服務大廳
- php 小程式服務商支付模式PHP模式
- 特靈空調售後服務電話(全國24小時客服服務熱線)
- Node服務下的微信小程式微信小程式
- 如何開發同城生活服務小程式?
- SpringCloud(二)Eureka服務的搭建與使用SpringGCCloud
- SpringCloud(二):服務呼叫與負載均衡SpringGCCloud負載
- WebSocket實現服務端推送訊息和聊天會話Web服務端會話
- 如何實現在服務端錄製視訊會議?服務端
- [服務端與網路]http協議與http狀態碼服務端HTTP協議
- 使用Express開發小說API介面服務1.0(二)ExpressAPI
- 盤點與業務轉化息息相關的小程式能力(二)
- 抓包整理外篇fiddler———— 會話欄與過濾器[二]會話過濾器
- mysql鎖與會話MySql會話
- 小議Linux安全防護(二)Linux
- 阿里巴巴:1Q21財報電話會議實錄 停止UC web和其他創新業務在印度的服務阿里Web
- PMP常見會議小結
- 微信小程式:小程式碼、小程式二維碼、普通二維碼微信小程式
- Cobaltstrike與MSF會話派生會話
- 前端【小程式】14-小程式基礎篇【地理位置】【騰訊定位服務】前端
- 阿里雲智慧對話分析服務阿里
- “文章助手”小程式已服務十萬次 URL 訪問
- 小程式成為本地生活服務的“功守道”
- 微信小程式新增外部地圖服務資料微信小程式地圖
- 小程式開發家政公司、家政服務平臺。
- 使用微信小程式連線到 MQTT 雲服務微信小程式MQQT
- Java Spring Cloud 與響應式微服務(二)賬戶服務建立JavaSpringCloud微服務
- go微服務系列(二) - 服務註冊/服務發現Go微服務
- 服務與服務之間的呼叫
- 團隊里程碑會議二
- 京東:3Q19財報電話會議實錄 未來技術服務收入將成業務收入增長重要驅動力
- gitlab 服務搭建小記Gitlab
- 2019遊鼎獎小程式釋出,移動端助力引爆會議!
- Web網站服務(二)Web網站