- Oracle數據庫從入門到運維實戰
- 甘長春 孟飛編著
- 1648字
- 2021-09-27 12:48:17
1.1 實例的體系結構
當用戶訪問數據庫時,需要在操作系統中運行相關的應用程序,如SQL*Plus,啟動用戶進程。用戶進程通過實例訪問數據庫。實例和數據庫組成了數據庫服務器,一個數據庫服務器中至少有一個實例。在單機環境中,實例和數據庫是一一對應的,一個實例只能和一個數據庫建立關聯關系,一個數據庫也只能被一個實例加載。在RAC環境中,一個數據庫可以對應多個實例,用戶進程可以通過任何一個實例訪問數據庫。
在本節將主要介紹“實例的概念”及“實例的構成”。
1.1.1 實例的概念
實例(Instance)是一組內存結構和后臺進程的集合。當用戶訪問數據庫時,在數據庫服務器端首先要啟動一個實例,在內存中分配一定的存儲空間,并啟動一些后臺進程。內存空間的作用是存儲與用戶訪問有關的重要數據,后臺進程的功能是監視系統的運行狀態,并負責在實例和數據庫之間交換數據。在支持線程的操作系統中,這些后臺進程以線程的方式運行。
用戶訪問數據庫的操作是通過實例來完成的。實例通過后臺進程與數據庫中的文件進行交互,將用戶修改過的或新增加的數據寫入文件,而用戶對數據的所有訪問都是在實例的內存結構中進行的。引入實例的好處是顯而易見的:數據位于內存中,用戶讀/寫內存的速度要比直接讀/寫磁盤快得多,而且內存中的數據可以在多個用戶之間共享,從而提高了數據訪問的并發性。
Oracle適用于大型的應用系統,如果有成千上萬個用戶同時訪問數據庫時,采用并發能力不強的數據庫是件不可思議的事情。由此可見,Oracle的實例對于數據庫的性能是多么的重要。
1.1.2 實例的構成
當數據庫服務器啟動時,首先啟動實例,然后加載并打開數據庫。當用戶訪問數據庫時,數據庫服務器便為用戶進程啟動一個服務器進程,負責處理用戶進程的所有請求,例如,將用戶訪問的數據從數據文件讀到內存中。
在計算機的內存中不僅要存儲數據庫中的數據,還要存儲數據字典的信息、重做日志以及經過解析的SQL代碼等。實例中的這部分內存結構叫作系統全局區(System Global Area,SGA)。
SGA是實例中最重要的組成部分,一個實例只有一個SGA。SGA中的數據可以在多個用戶進程之間共享。SGA由若干個緩存和緩沖池組成,不同類型的數據存儲在不同的緩存和緩沖池中。SGA的大小可以定制,通過在參數文件中為各個緩存和緩沖池分別指定大小,可以確定SGA的大小。
用戶對數據的操作實際上是在SGA中進行的,當啟動數據庫服務器時,首先啟動實例,然后數據庫被打開。當用戶進程向服務器進程發出請求時,服務器進程將用戶請求的數據讀到SGA中,用戶對數據的所有訪問直接在SGA中完成,其他用戶進程也可以在SGA中訪問相同的數據。當關閉實例時,未保存的數據寫入數據文件中,SGA被撤銷,所有的數據從SGA中清除。
當用戶訪問數據庫時,實例為用戶進程啟動一個服務器進程,并分配一段內存區,用來保存用戶進程的私有信息和控制信息,這段內存區叫作程序全局區(Program Global Area,PGA)。
SGA是所有用戶進程共享的,只要實例被啟動,無論是否有用戶訪問數據庫,SGA都存在。而PGA是用戶進程私有的,當用戶進程向數據庫服務器發出請求時,實例為用戶進程分配PGA,當用戶進程結束時,PGA自動釋放。
由此可見,實例中的內存結構包括SGA和PGA兩部分。SGA是所有用戶共享的,它在實例的運行過程中一直存在。嚴格地說,PGA并不屬于實例,它是服務器進程的一部分,是用戶進程私有的,是一種臨時的內存結構。Oracle允許成千上萬個用戶同時訪問數據庫,并提供了一種巧妙的機制來確保用戶對數據的安全、高效訪問。在Oracle實例中包含一組后臺進程,它們負責完成復雜的數據訪問和維護工作。在Oracle實例中可以啟動以下后臺進程:SMON(系統監視進程)、DBWR(數據庫寫進程)、PMON(監控和管理進程)、CKPT(檢查點進程)、LGWR(日志寫進程)、ARCH(歸檔日志進程)、RECO(恢復進程)。其中有些進程是必須啟動的,而另外一些是可選的。在默認情況下,實例將啟動SMON(系統監視進程)、DBWR(數據庫寫進程)、PMON(監控和管理進程)、CKPT(檢查點進程)、LGWR(日志寫進程)和ARCH(歸檔日志進程)6個后臺進程(參照圖1-1)。
實例的組成如圖1-2所示。在接下來的幾節中,本書將分別對實例的內存結構和后臺進程進行詳細的介紹。

圖1-2
- 數據科學實戰手冊(R+Python)
- 算法精粹:經典計算機科學問題的Java實現
- INSTANT Sencha Touch
- GeoServer Beginner's Guide(Second Edition)
- ASP.NET程序設計教程
- Visual Basic 6.0程序設計實驗教程
- Learning AWS
- MINECRAFT編程:使用Python語言玩轉我的世界
- 單片機原理及應用技術
- PHP與MySQL權威指南
- 從零開始學Unity游戲開發:場景+角色+腳本+交互+體驗+效果+發布
- Mastering Object:Oriented Python(Second Edition)
- Python深度學習(第2版)
- C語言程序設計實驗指導
- Learning Google Apps Script