ORACLE數據庫管理系統體系結構
介紹ORACLE數據庫管理系統的基本輪廓和程序模塊結構、實例概念和組織、進程結構和功能、內存結構和用途,數據字典結構和使用、進程配置和管理、運行模式、程序接口、事務管理。
一、基本輪廓和程序模塊結構
-
數據庫:存放數據的倉庫,有組織的、可共享的、存儲的數據集合,按數據模型組織、描述和存儲、較小數據冗余度、較高數據獨立性和易擴展性、可為用戶共享。
-
數據庫實例:存取和控制數據庫的軟件機制,SGA(System Global Area)和ORACLE進程的組合,內存和進程用於管理數據庫的數據,並為數據庫用戶服務。
-
物理結構:由操作系統文件組成,包括數據文件(一個或多個)、重做日志文件(兩個或多個)、控制文件(一個或多個)。
-
邏輯結構:由表空間、段、范圍、數據塊、模式對象組成,通過邏輯結構控制磁盤空間的使用。
-
模式對象:直接引用數據庫數據的邏輯結構,包括表、視圖、序列、存儲過程、觸發器、同義詞、索引、集聚、數據庫鏈、快照等。
DBMS程序模塊結構 |
|
模塊類別 |
模塊名稱 |
系統運行管理類 (運行管理) |
系統啟停控制 |
存儲管理 |
|
數據存取 |
|
並發控制 |
|
安全控制 |
|
完整性控制 |
|
事務管理 |
|
通信控制 |
|
數據更新 |
|
運行日志管理 |
|
語言翻譯解釋處理類 (數據操縱) |
DDL翻譯 |
DML處理 |
|
終端查詢語言結識(交互、嵌入) |
|
DB控制語言解釋 |
|
公用定義類 (數據定義) |
模式定義 |
字模式定義 |
|
安全定義 |
|
信息格式定義 |
|
公用維護類 (建立和維護) |
裝入 |
DB重構 |
|
DB恢復 |
|
統計分析 |
|
信息格式維護 |
|
工作日志 |
|
數據轉儲、編輯、打印 |
二、實例的基本概念
實例:SGA+ORACLE進程(用戶、服務器、后台)=ORACLE實例
-
實例工作過程:
啟動實例(分配SGA、啟動ORACLE進程)
實例裝配數據庫(裝配時實例查詢控制文件:mount)
數據庫准備打開(打開前,數據庫為關閉狀態,只有DBA可存取)
數據庫打開(打開后,授權的用戶可以存取數據庫)
關閉數據庫(先卸載數據庫,后關閉實例:unmount)
-
權限:DBA可以啟動實例和打開數據庫。
-
多實例:多個實例可同時在一台計算機上運行,每個實例存取自己的物理數據庫;大規模並行處理系統(MPP)中,ORACLE並行服務器(OPS)允許多個實例裝配單個數據庫。
三、進程結構
-
進程:具有一定獨立功能的程序對某個數據集合的一次運行活動。又稱作業或任務,每個進程有其專用內存區
-
關系:進程是程序的執行實例,線程是進程內部的一個執行單元—函數或類對象,每個進程至少有一個線程—主執行線程,線程間通信比進程間通信容易得多,UNIX無線程概念
-
ORACLE進程:負責執行客戶端和服務器端代碼
-
ORACLE實例:單進程實例和多進程實例
1、單進程ORACLE實例
單個進程負責執行客戶端和服務器端代碼,ORACLE實例和客戶端應用程序不能分開執行,又稱單用戶ORACLE(如MS-DOS下的ORACLE),使用很少。
2、多進程ORACLE實例
多個進程負責執行代碼的不同部分,為每個連接的用戶使用單獨的進程,又稱多用戶ORACLE。用戶進程執行客戶端代碼(應用程序或ORACLE工具代碼),ORACLE進程執行ORACLE服務器代碼。
3、用戶進程
-
用戶運行應用程序或ORACLE工具時,建立用戶進程
-
連接(Connection)是用戶進程和ORACLE實例間的一個通信通路(通信機制+網絡軟件),同一用戶可多次連接到同一個數據庫實例
-
會話(Session)是用戶進程和ORACLE實例間的特定連接,同一用戶可建立和存在多個會話
-
在專用服務器模式中,可為每個用戶會話建立服務器進程
-
在多線程服務器模式中,多個用戶會話可共享單個服務器進程
4、ORACLE進程
-
ORACLE進程分為服務器進程(Server Process,又稱影子進程Shadow Process)和后台進程(Background Process)
-
服務器進程用於處理連接到該實例的用戶進程的請求。當應用程序和ORACLE運行在同一主機時,用戶進程和相應的服務器進程可組合到單個進程,以減少系統開銷;當應用程序和ORACLE運行在不同的主機時,用戶進程將通過一個單獨的服務器進程與ORACLE聯系。
-
服務器進程完成的工作(分析和執行SQL語句、所需數據不在SGA中時從磁盤數據文件中拷貝數據到SGA的共享數據緩沖區、按要求返回結果)
-
后台進程在實例啟動或安裝時建立,用於優化性能和協調多用戶
5、后台進程的作系用與關
序號 |
后台進程 |
功能與說明 |
1 |
數據庫寫(DBWn) (0-9) |
功能:按照最近最少使用(LRU)算法,以批量(多塊)方式,將“臟的”緩沖區的內容寫入數據文件,保持緩沖區的“清潔”和數量。 寫入:
說明:
|
2 |
日志寫(LGWR) |
功能:將重做日志緩沖區中自上次寫以來已經拷貝到緩沖區中的所有重做條目寫入重做日志文件。重做日志緩沖區是一個循環緩沖區,LGWR正常寫的速度很快。 寫入:
說明:
|
3 |
檢查點(CKPT) |
功能:發生檢查點時,修改所有數據文件的標題和記錄該檢查點的細節。通常由LGWR完成,但有多個數據文件,而使用LGWR又明顯降低系統性能時才使用CKPT。 說明:
|
4 |
系統監控(SMON) |
功能:在實例啟動時執行實例恢復,整理不再使用的臨時段,合並鄰近的空閑空間獲得更大的空閑可用塊。 說明:定期被喚醒,或在需要時被其它進程調用。 |
5 |
進程監控(PMON) |
功能:恢復出故障的用戶進程,整理緩沖區的高速緩存和釋放用戶進程使用的資源。定期檢查調度進程和服務器進程狀態,重新啟動非正常終止的進程。 說明:定期被喚醒,或在需要時被其它進程調用。 |
6 |
存檔(ARCH) |
功能:聯機重做日志填滿時,將日志內容拷貝到指定的存儲設備中。 說明:在ARCHIVELOG方式中重做日志和自動存檔使能時,ARCH才出現。 |
7 |
恢復(RECO) |
功能:在分布式數據庫環境中自動解決分布式事務中的故障。 |
8 |
鎖(LCKn)(0-9) |
功能:在並行服務器系統中提供實例間的封鎖。 |
9 |
作業隊列(SNPn)(0-Z) |
功能:在分布式數據庫環境中自動刷新表快照,還執行DBMS_JOB包創建的作業請求。 說明:定期被喚醒,並刷新預定義刷新的任何快照,故障不會引起實例故障,ORACLE重啟故障進程。 |
10 |
隊列監控(QMn) |
功能:監控消息隊列的ORACLE高級(AQ)隊列。 說明:故障不會引起實例故障,ORACLE重啟故障進程。 |
11 |
調度(Dnnn) |
功能:通過允許用戶進程共享限定數量的服務器進程來支持多線程配置。 說明:每個實例可建立多個調度進程,每個網絡協議至少建立一個調度進程,在實例運行時可增加或刪除調度進程以達到最佳數量。 |
12 |
共享服務器(Snnn) |
功能:在多線程配置模式下,每個服務器進程服務於多個客戶請求。 |
6、跟蹤文件和報警文件
-
每個進程(前台或后台)在檢測到內部錯誤時,將錯誤信息記錄到其相關的跟蹤文件中(Trace File:包含進程名,SNPn除外),但初始化參數SQL_TRACE必須為TRUE
-
每個數據庫有一個報警文件(Alert File),按時間順序記錄消息和錯誤。
四、內存結構
ORACLE內存結構
-
軟件代碼區(SCA)
-
系統全局區(SGA)
-
程序全局區(PGA)
-
排序區(SA)
SCA |
PGA |
堆棧區 |
會話信息區 |
私有SQL區(專用模式) |
SGA |
數據庫高速緩存(DBC) |
|||
重做日志緩沖區(RLB) |
||||
SA |
共享池(SP) |
庫高速緩存 |
共享SQL區 |
|
私有SQL區(共享模式) |
||||
PL/SQL區(過程和包) |
||||
控制結構(鎖、庫、句柄) |
||||
數據字典高速緩存(DC) |
||||
控制結構(字符集轉換、網絡安全屬性) |
||||
數據字典高速緩存(DC) |
||||
其它信息區 |
1、ORACLE內存中保存的信息
-
程序代碼(正在執行和可能執行的)
-
連接和會話信息(活動和不活動的)
-
程序執行期間需要的信息(狀態信息)
-
ORACLE進程間共享和通信的信息(鎖信息)
-
高速緩存的外存中永久保存的數據(數據塊、重做日志條目)
2、虛擬內存
-
可以使用虛擬內存,但整個SGA最好放在實際內存中
-
通過內存分頁(Paging)或交換(Swapping)實現虛擬內存和物理內存的映射,交換以進程為單位,分頁以頁為單位(典型內存頁為4kB)
-
分頁和交換使用和消耗大量的系統資源,存取磁盤比存取內存大約慢50倍
3、軟件代碼區(SCA)
-
軟件區用於保存正在執行和可能執行的代碼
-
大小一般不變,與安裝、升級和操作系統有關
-
軟件區是只讀的,可以安裝為共享或非共享的
-
ORACLE代碼是共享的,可被多個ORACLE用戶和實例共享
-
用戶程序可以是共享或非共享的
4、系統全局區(SGA)
-
SGA是實例啟動時自動分配的確定大小的共享內存結構,包含實例的數據和控制信息,數據為多用戶共享
-
SGA是可讀寫的,連接到實例的所有用戶進程可讀取SGA中的數據,但只有幾個進程可以寫SGA
-
SGA分為數據庫緩沖區高速緩存、重做日志緩沖區、共享池、數據字典高速緩存和其它信息區
-
DBC(Database Buffer Cache)用於保存讀自數據文件的拷貝,按臟列表(Dirty List)和LRU(Least Recently Used)列表組織;進程直接在內存中讀到數據稱為命中(Hint),否則成為遺漏;緩沖區池包括KEEP、RECYCLE、DEFAULT三類,初始化參數有BUFFER_POOL_KEEP和BUFFER_POOL_RECYCLE;DBC大小的初始化參數有DB_BLOCK_BUFFER和DB_BLOCK_SIZE
-
RLB(Redo Log Buffer)是環行緩沖區,用於保存數據庫的全部修改信息,初始化參數有LOG_BUFFER,大的緩沖區可減少日志文件的I/O,缺省為OS最大數據塊的4倍
-
SP(Shared Pool)包含庫高速緩存、數據字典高速緩存和控制結構;庫高速緩存包括共享SQL區、私有SQL區、PL/SQL區和控制結構;DC(Dictionary Cache)保存關於數據的邏輯和物理結構的一組表和視圖,如用戶信息、完整性約束、表的列名和數據類型;控制結構是SGA的固定部分,包含數據庫和實例狀態的一般信息(后台進程需要的);初始化參數有SHARED_POOL_SIZE
-
控制SGA使用內存的初始化參數有LOCK_SGA和LOCK_SGA_AREAS(將SGA鎖入物理內存)、SHARED_MEMORY_ADDRESS和HI_SGARED_MEMROY_ADDRESS(指定運行時SGA的起始地址)、USE_INDIRECT_DATA_BUFFER(支持大於4GB的物理內存)
5、程序全局區(PGA)
-
PGA是進程對應的、可寫的、獨占的一個內存區,包含某個服務器或后台進程的數據和控制信息;包括堆棧信息、會話信息、私有SQL區(保存捆綁變量和運行緩沖區);PGA大小固定並由操作系統指定,初始化參數OPEN_LINKS、DB_FILES和LOG_FILES影響PGA大小
6、排序區(SA)
-
l SA存在於要求排序的ORACLE用戶進程的內存中(專用服務器模式時SA在PGA中,MTS模式時SA在SGA中);
-
初始化參數有SORT_AREA_SIZE(缺省值又OS指定)和SORT_AREA_RETAINED_SIZE(最小值為一個數據庫塊,最大值為SORT_AREA_SIZE)
五、進程配置方案
-
用戶/服務器進程結構
-
專用服務器進程結構
-
多線程服務器進程結構
1、用戶/服務器進程結構
-
應用程序和ORACLE服務器代碼運行在同一進程中,又稱用戶進程(單任務ORACLE)
-
接口程序在應用程序和ORACLE代碼之間建立隔離,保護ORACLE服務器代碼
-
某些操作系統支持該配置(如VAX VMS),某些則不支持該配置(如UNIX)
2、專用服務器進程結構
-
應用程序和ORACLE服務器代碼運行在兩個進程中(兩任務ORACLE),用戶進程與服務器進程是一一對應的
-
當用戶進程與服務器進程配置為運行在同一主機上時,程序接口使用主機操作系統的進程間通信機制
-
當用戶進程與服務器進程配置為運行在不同主機上時,程序接口提供進程間的通信機制(如網絡軟件和SQL *Net2/Net8)
3、多線程服務器進程結構
-
多個用戶進程可共享一個可用的服務器進程池(不同於共享一個服務器進程),用戶進程直接與調度進程連接,調度進程通過請求和響應隊列與下一個可用的服務器進程連接。該配置降低系統開銷,增加用戶個數
-
需要的進程類型包括:網絡監聽進程(Net8的一部分,不是ORACLE的一部分)、調度進程(一個或多個)、共享服務器進程(一個或多個)
-
該配置下用戶進程必須通過Net8或SQL *Net2與服務器連接,即使用戶進程與服務器進程運行在同一主機上
-
實例啟動時,網絡監聽進程打開和建立通信通路,每個調度進程給監聽進程一個地址;用戶進程請求連接時,監聽進程檢查請求,當確定用戶進程可以使用共享服務器進程時,返回調度進程地址,用戶進程便可直接連接到調度進程
六、程序接口
1、程序接口的功能:
-
提供安全屏障,防止用戶進程對SGA的破壞性存取
-
提供通信機制,格式化請求信息,傳送數據,捕捉和返回錯誤
-
轉換和解釋數據,特別是異類計算機之間、與外部程序之間的數據類型轉換
2、程序接口的結構
-
ORACLE調用接口(OCI)或運行庫(SQLLIB)
-
客戶或用戶端(UPI)
-
各種Net8驅動程序(協議指定的通信軟件)
-
操作系統通信軟件
-
服務器或ORACLE端(OPI)
3、程序接口的驅動程序
-
驅動程序是協議相關的,執行連接、斷開、捕捉和測試錯誤
-
可以安裝多個驅動程序,並選其一為缺省驅動程序,單個進程可以使用不同的驅動程序連接到不同的數據庫,連接時可指定驅動程序
4、操作系統通信軟件
-
用戶端到ORACLE端的最底層連接軟件是操作系統提供的通信軟件(如TCP/IP、DECnet、LU6.2、ASYNC等)
七、數據字典
1、數據字典(Data Dictionary)的信息
-
ORACLE用戶名稱
-
用戶的權限(特權和角色)
-
模式對象
-
模式對象的空間(分配的和使用的)
-
列的缺省值
-
完整性約束
-
審計信息
-
其它一般數據庫信息
2、數據字典的結構(基表、視圖和動態性能表)
-
基表保存數據庫信息,ORACLE可讀寫,數據一般是加密格式,存儲在SYSTEM表空間中
-
視圖匯總和顯示基表中的信息,數據是解碼的,多數用戶可被授權訪問,存儲在SYSTEM表空間中
-
動態性能表記錄當前數據庫活動的虛表,不需要磁盤空間,也不存儲在任何表空間中
3、數據字典的使用
-
獲取數據庫信息(性能調整前后查看)
-
保存數據庫信息(DDL運行時字典相應修改)
-
引用數據庫信息(編程過程和程序中)
八、事務管理
1、事務(Transaction)
-
由一個或多個SQL語句組成的、完成特定任務的邏輯單位,即原子單位。事務開始時,ORACLE給事務分配一個可用的回滾段,記錄回滾條目
2、事務結束的情況
-
用COMMIT顯式提交
-
用ROLLBACK顯式回滾(到savepoint)
-
執行DDL語句前后隱式提交
-
斷開連接(事務提交)
-
進程異常中斷(事務回滾)
3、事務提交(修改永久化)
-
事務提交前
SGA的回滾段緩沖區中生成回滾記錄(含舊數據)
SGA的重做日志緩沖區中生成重做日志條目(提交前可存入磁盤)
SGA的數據庫緩沖區中生成數據的修改(提交前可存入磁盤)
-
事務提交后
分配回滾段記錄及事務的系統修改序號(SCN:唯一),並記錄到表中
LGWR將SGA重做日志條目和SCN寫入聯機重做日志文件中
ORACLE釋放表和行上的鎖
ORACLE將事務標記為“完成”
4、事務回滾(全部或部分取消修改)
-
無保留點時的回滾
取消全部修改
ORACLE釋放事務的所有數據鎖
事務結束
-
有保留點時的回滾
回滾保留點之后執行的語句
保護指定的保留點,但丟棄指定保留點之后的保留點
ORACLE釋放所有表和指定保留點獲得的行鎖,但保留指定保留點前獲得的數據鎖
事務保持活動,可以繼續
5、保留點(SavePoint)
-
保留點是事務中的中間標記,用於將一個長事務分割為更小的部分。
更多內容請關注微信公眾號:數據與人