您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么理解Oracle架構、原理、進程”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么理解Oracle架構、原理、進程”吧!
對于一個數據庫系統來說,假設這個系統沒有運行,我們所能看到的和這個數據庫相關的無非就是幾個基于操作系統的物理文件,這是從靜態的角度來看,如果從動態的角度來看呢,也就是說這個數據庫系統運行起來了,能夠對外提供服務了,那就意外著數據庫系統啟動了自己的一個實例,綜合以上2個角度,Oracle如何定義上述描述呢?
我們來引入第一個概念,Oracle服務器,所謂Oracle服務器是一個數據庫管理系統,它包括一個Oracle實例(動態)和一個Oracle數據庫(靜態)。Oracle實例是一個運行的概念(如操作系統的進程),提供了一種訪問,Oracle數據庫的方式,始終打開一個,并且只能打開一個Oracle數據庫,Oracle實例有SGA和一些后臺服務進程組成,在后臺服務進程當中,DBWn PMON CKPT LGWR SMON是必備的后臺進程,而ad queue、rac、shared server、ad replication則是可選的,之所以可選,要們是因為離開它Oracle也能正常運行,要么是一些高級的功能才可以用得到。
Oracle數據庫是一個被統一處理的的數據的集合,從物理角度來看包括三類文件數據文件,控制文件,重做日志文件。從邏輯角度來看,Oracle數據庫至少包含一個表空間,表空間至少包含一個段,段由區做成,區有塊組成。需要注意的是表空間可以包含若干個數據文件,段可以跨同一個表空間的多個數據文件,區只能在同一個數據文件內。
Oracle還設計了其他的關鍵文件用來為整個系統服務,如配置文件、密碼文件、歸檔日志文件,還有還有用戶進程和服務進程,現在可以簡單理解下執行SQL語句就要用到這2個進程。
SGA | SHARE POOL (共享池) 用如下命令可以調整 ALTER SYSTEM SET SHARED_POOL_SIZE=64M | LIBRARY CACHE (庫高速緩存) 1存儲最近使用的SQL和PL/SQL語句信息 2包括SHARED SQL和SHARED PL/SQL 3用LRU算法管理 4大小由SHARE POOL大小決定 |
DATA DICTIONARY CACHE (數據字典高速緩存) 1數據庫中最近使用的定義的集合 2包含數據庫文件,表,索引,列,用戶,權限和其他的數據庫對象相關信息 3在語法分析階段,服務器進程會在數據字典中查找用于對象解析和驗證訪問的信息 4將數據字典信息高速緩存到內存中,可縮短查詢和DML的響應時間 5大小由共享池的大小決定 | ||
DATABASE BUFFER CACHE (數據緩沖區高速緩存) | 1存儲已從數據文件檢索到的數據的復本 2大幅提高讀取和更新數據的性能 3使用LRU算法管理 4主塊的大小由DB_BLOCK_SIZE確定 | |
REDO LOG BUFFER (重做日志緩沖區) | 1記錄對數據庫數據塊作的全部更改 2主要用來恢復 3其中記錄的更改被稱作重做條目 4重做條目包含用于重新構建或重做更改的信息 5大小由LOG_BUFFER定義 | |
LARGE POOL (大型池) | 1 SGA可選的內存區 2分擔了共享池的一部分工作 3用于共享服務器的UGA 4用于I/O服務器進程 5備份和恢復操作或RMAN 6并行執行消息緩沖區(前提PARALLEL_POOL_SIZE=TRUE) 7不使用LRU列表 8大小由LARGE_POOL_SIZE確定 | |
JAVA POOL (JAVA池) | 1存儲JAVA命令服務分析要求 2安裝和使用JAVA時必須的 3大小有JAVA_POOL_SIZE確定 | |
PGA | PRIVATE SQL AREA (專用SQL區)
專用SQL 區的位置取決于為會話建立的連接類型。在專用服務器環境中,專用SQL 區位于各自服務器進程的PGA中。在共享服務器環境中,專用SQL 區位于SGA 中。 管理專用SQL 區是用戶進程的職責。用戶進程可以分配的專用SQL 區的數目始終由 初始化參數OPEN_CURSORS 來限制。該參數的缺省值是50。 | PERSISTEN AREA (永久區) 包含綁定信息,并且只在關閉游標時釋放 |
RUNTIME AREA (運行時區) 在執行請求時的第一步創建。對于INSERT、UPDATE 和DELETE命令,該區在執行語句后釋放,對于查詢操作,該區只在提取所有行或取消查詢后釋放。 | ||
SESSION MEMORY (會話內存) | 包含為保留會話變量以及與該會話相關的其它信息而分配的內存。對于共享服務器環境,該會話是共享的而不是專用的。 | |
SQL WORK AREAS (SQL工作區) | 用于大量占用內存的操作,如排序、散列聯接、位圖合并和位圖創建。 工作區的大小可進行控制和調整 |
下表是后臺進程總結
DBWn | DBWn 延遲寫入數據文件,直到發生下列事件之一: ? 增量或正常檢查點 ? 灰數據緩沖區的數量達到閾值 ? 進程掃描指定數量的塊而無法找到任何空閑緩沖區時 ? 出現超時 ? 實時應用集群(Real Application Clusters, RAC) 環境中出現ping 請求 ? 使一般表空間或臨時表空間處于脫機狀態 ? 使表空間處于只讀模式 ? 刪除或截斷表 ? 執行ALTER TABLESPACE 表空間名BEGIN BACKUP 操作 |
LGWR | LGWR 在下列情況下執行從重做日志緩沖區到重做日志文件的連續寫入: ? 當提交事務時 ? 當重做日志緩沖區的三分之一填滿時 ? 當重做日志緩沖區中記錄了超過1 MB 的更改時 ? 在DBWn 將數據庫緩沖區高速緩存中修改的塊寫入數據文件以前 ? 每隔三秒 |
SMON | 例程恢復 – 前滾重做日志中的更改 – 打開數據庫供用戶訪問 – 回退未提交的事務處理 ? 合并空閑空間 ? 回收臨時段 |
PMON | 進程失敗后,后臺進程PMON 通過下面的方法進行清理: ? 回退用戶的當前事務處理 ? 釋放當前保留的所有表鎖或行鎖 ? 釋放用戶當前保留的其它資源 ? 重新啟動已失效的調度程序 |
CKPT | ? 在檢查點發信號給DBWn ? 使用檢查點信息更新數據文件的標頭 ? 使用檢查點信息更新控制 啟動檢查點的原因如下: ? 確保定期向磁盤寫入內存中發生修改的數據塊,以便在系統或數據庫失敗時不會丟失數據 ? 縮短例程恢復所需的時間。只需處理最后一個檢查點后面的重做日志條目以啟動恢復操作 ? 確保提交的所有數據在關閉期間均已寫入數據文件 由CKPT 寫入的檢查點信息包括檢查點位置、系統更改號、重做日志中恢復操作的起始位置以及有關日志的信息等等。 注:CKPT 并不將數據塊寫入磁盤,或將重做塊寫入聯機重做日志。 |
ARCn | ? 可選的后臺進程 ? 設置ARCHIVELOG 模式時自動歸檔聯機重做日志 ? 保留數據庫的全部更改記錄 |
最后,舉一個用戶提交SQL語句的的例子來結束本文,如果用戶想提交SQL語句,那么首先你必須要連接到Oracle實例,連接到Oracle實例有三種途徑:如果用戶登陸到運行Oracle實例的操作系統上,則通過進程間通信進行訪問2C/S結構訪問3三層結構。發起連接的應用程序或工具通常稱為用戶進程,連接發起后,Oracle服務器就會創建一個進程來接受連接,這個進程就成為服務進程,服務器進程代表用戶進程與Oracle實例進行通信,在專用服務器連接模式下,用戶進程和服務進程是1對1的關系,在共享服務器模式下,多個用戶進程可能共享一個服務進程。當服務器進程開始和Oracle實例進行通信時,一個會話就被創建了。顯然處理一個查詢要經過語法分析、綁定、執行、提取等階段。
感謝各位的閱讀,以上就是“怎么理解Oracle架構、原理、進程”的內容了,經過本文的學習后,相信大家對怎么理解Oracle架構、原理、進程這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。