process/session/connection的一些問題
記得在一個群裡曾經討論過一個問題:是先有session還是先有connection呢?當時也沒有定論。回答問題的要點在於:什麼是session,什麼是connection,兩者的存在是以什麼為標識的,兩者直接有怎樣的依存關係。
首先看下三者的概念。以下所有概念來源於11gconcept。
Process
[php]
All connected Oracle Database users must run two modules of code to access an Oracle Database instance.
Application or Oracle tool: A database user runs a database application (such as a precompiler program) or an Oracle tool (such as SQL*Plus), which issues SQL statements to an Oracle database.
Oracle database server code: Each user has some Oracle database code executing on his or her behalf, which interprets and processes the application's SQL statements.
These code modules are run by processes. A process is a "thread of control" or a mechanism in an operating system that can run a series of steps. (Some operating systems use the terms job or task.) A process normally has its own private memory area in which it runs.
The processes in an Oracle Database system can be categorized into two major groups:
User processes run the application or Oracle tool code.
Oracle Database processes run the Oracle database server code. They include server processes and background processes.[/php]
process其實就是程式程式碼的執行時版。可以按照作者意圖去自動執行特定的任務。Oracle安裝process所執行任務的來源分為user process和server process.
[php]
Connections and Sessions
Connection and session are closely related to user process but are very different in meaning.
A connection is a communication pathway between a user process and an Oracle Database instance. A communication pathway is established using available interprocess communication mechanisms (on a computer that runs both the user process and Oracle Database) or network software (when different computers run the database application and Oracle Database, and communicate through a network).
A session is a specific connection of a user to an Oracle Database instance through a user process. For example, when a user starts SQL*Plus, the user must provide a valid user name and password, and then a session is established for that user. A session lasts from the time the user connects until the time the user disconnects or exits the database application.
Multiple sessions can be created and exist concurrently for a single Oracle Database user using the same user name. For example, a user with the user name/password of SCOTT/TIGER can connect to the same Oracle Database instance several times.
In configurations without the shared server, Oracle Database creates a server process on behalf of each user session. However, with the shared server, many user sessions can share a single server process.
[/php]
connection其實就是通訊鏈路,對oracle講就是user process和instance間的通訊鏈路,可以使用IPC或者TCP之類的網路機制。
session則是一個資料庫使用者在user process和instance之間所建立的一個具體連結.session存在的前提是建立了連線。建立了連結的同時,session已經存在了。當user資訊錯誤時,user process向instance傳送連結請求,instance驗證user資訊,發現user資訊錯誤,返回錯誤資訊。這個過程只是兩者的通訊,試圖建鏈,還根本沒建立成功,這時候既不存在connection也不存在session。從網路模型上理解二者之間的關係,應該會比較容易點。似乎建立了連結的同時,session也跟著出現了。
舉個例子,打電話。但我們想和對方通話的時候,我們首先要撥號,當對方按下接聽鍵時,雙方直接就建立一條通訊鏈路,這時雙方就可以談話了,session其實就是指從會話準備就緒開始到會話結束,會話結束了就要斷開鏈路。
session可以有active和inactive的狀態,當按下接聽鍵時,鏈路建立了,當我們說hello時,會話開始了,當我們交談時是active的,當我們沉默時是inactive的,當我們說bye的時候,會話結束了,當我們掛機的時候,鏈路斷了。
所以到底是現有session還是先有connection的問題也就清楚了,其實他們是同時的,只是對同一事件同一現象同一事務在不同層次上的描述,從底層通訊看,是叫connection,從上層user process和instance看,是兩者的session已經開始了。當我們敲exit時,會話中斷,底層拆鏈。
如果非要分個先後的話,那session是要放在connection之間的。
至於server process和要討論的問題沒什麼關係。
以上只是一些原理上的猜測,還是有兩個不確定點的,一是connection和session建立的標準是什麼,這個是至關重要的,二是oracle處理的二者的方法是什麼。事實上oracle建立connection後是要去建立session資訊,也就是say hello to user process,所以session建立似乎是要在connection後的。
以上只是我的一些猜想,歡迎大家拍磚。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7591490/viewspace-1008809/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- hibernate中的no session問題Session
- session共享問題???Session
- 如何區分 Connection、Thread和SessionthreadSession
- 關於突破 SESSION 0 隔離場景發現的一些問題Session
- android中The connection to adb is down,問題和解決Android
- 禁用 COOKIE 後如何訪問 SESSION 問題CookieSession
- ascp: Failed to open TCP connection for SSH, exiting. Session Stop (Error: Failed to open TCP connection for SSH)AITCPSessionError
- hive的一些問題Hive
- 使用Process Explorer/Process Hacker和Windbg高效排查軟體高CPU佔用問題
- 6.7 版本 Cookie 跟 Session 存入問題CookieSession
- Session一致性問題Session
- [20220531]驗證inactive session出現的問題.txtSession
- 日常問題 頁面跳轉 $_SESSION 失效Session
- vue 解決不能攜帶session問題VueSession
- SpringBoot 2.0 SpringSession 支援跨域session問題Spring BootGseSession跨域
- JavaScript 中的一些奇怪問題JavaScript
- 小程式遇到的一些問題
- WKWebView的一些問題彙總WebView
- 關於Redis的一些小問題Redis
- vuejs整合echarts的一些問題VueJSEcharts
- 記錄redis的一些問題Redis
- 整理的一些常見問題
- 關於 PHP Session ID 改變的問題解決PHPSession
- 解決問題-There appears to be trouble with your network connection. Retrying...APP
- Mysql mysql lost connection to server during query 問題解決方法MySqlServer
- 記錄springboot專案裡關於session的一個問題(session監聽器失效)Spring BootSession
- 解決telnet: connect to address 127.0.0.1: Connection refused的錯誤資訊問題127.0.0.1
- 為什麼資料庫中大量的server process沒有對應的session?資料庫ServerSession
- 理解Cookie和Session機制,及其安全問題CookieSession
- Nginx session丟失問題處理解決方法NginxSession
- 一些小問題彙總
- ES叢集搭建問題:memory locking requested for elasticsearch process but memory is not lockedElasticsearch
- WebApi和Mvc的Session一直獲取不到問題WebAPIMVCSession
- git的一些常用操作和問題Git
- 基環樹的一些基本問題
- Docker遇到的一些問題和感想Docker
- Python的Selenium一些問題解決Python
- Deployer 使用過程的一些問題
- EditText選擇模式的一些問題模式