在學習oracle中,體系結構是重中之重,一開始從宏觀上掌握它的物理組成、文件組成和各種文件組成。掌握的越深入越好。在實際工作遇到疑難問題,其實都可以歸結到體系結構中來解釋。體系結構是對一個系統的框架描述。是設計一個系統的宏觀工作。這好比建一棟大樓。你首先應該以圖紙的方式把整個大樓的體系架構描述出來。然后一點點的往里面填充東西。下面我們先以一個圖解的方式對oracle體系結構有一個基本了解

根據示圖,便於我們記憶,示圖分三部分組成,左側User Process、Server Process、PGA可以看做成Clinet端,上面的實例(Instance)和下面的數據庫(Database)及參數文件(parameter file)、密碼文件(password file)和歸檔日志文件(archived logfiles)組成Oracle Server,所以整個示圖可以理解成一個C/S架構。 Oracle Server由兩個實體組成:實例(instance)與數據庫(database)。這兩個實體是獨立的,不過連接在一起。在數據庫創建過程中,實例首先被創建,然后才創建數據庫。在典型的單實例環境中,實例與數據庫的關系是一對一的,一個實例連接一個數據庫,實例與數據庫也可以是多對一的關系,即不同計算機上的多個實例打開共享磁盤系統上的一個公用數據庫。這種多對一關系被稱為實際應用群集(Real Application Clusters,RAC)RAC極大提高了數據庫的性能、容錯與可伸縮性(可能耗費更多的存儲空間)並且是oracle網格(grid)概念的必備部分。
下面我們來詳細看一下oracle數據庫的體系架構
Oracle體系架構主要有兩大部分組成:數據庫實例(Instance)和數據庫文件(database)
數據庫實例
指數據庫服務器的內存及相關處理程序,它是Oracle的心臟。與Oracle性能關系最大的是SGA(System Global Area,即系統全局區活共享內存區),SGA包含三個部分:
1、數據緩沖區,可避免重復讀取常用的數據;
2、日志緩沖區,提升了數據增刪改的速度,減少磁盤的讀寫而加快速度;
3、共享池,使相同的SQL語句不再編譯,提升了SQL的執行速度。
oracle數據庫實例的另一部分就是一些后台進程了,他主要包括:
1.系統監控進程
2.進程監控
3.數據庫寫進程
4.日志寫進程
5.檢驗點進程
6.其他進程
這些后台進程合起來完成數據庫管理任務
在訪問數據庫的時候。器后台先啟動實例。啟動實例前要先分配內存區。然后在啟動后台進程。數據庫啟動過程中必須啟動上面的前五個進程。否則實例無法創建。
注意:在啟動oracle數據庫的時候。因為有些進程是在開機啟動項中自動啟動的。所以占用了很大一部分內存。如果您電腦上還有一些其他占用內存比較大的程序。在啟動oracle數據庫的時候有可能會因內存不足而啟動失敗。
Oracle服務器
Oracle服務器包括兩部分:數據庫實例和數據庫文件。他們構成了也就是所謂的數據管理系統(DBMS)

物理結構:oracle的物理結構指的其實就是一些存在硬盤上的各種文件。其最終目的就是存儲和獲取相關數據。這些存在硬盤上的文件組成了oracle數據庫的物理結構
Oracle中主要包括三種文件:
1.數據文件
2.控制文件
3.重做日志文件
參數文件和密碼文件:
參數文件:定義了數據庫實例的特性,他是正文文件
密碼文件:授予用戶啟動和關閉數據庫的實例。主要有二進制數據組成
Oracle數據庫的內存結構:SGA和PGA
SGA:數據庫實例的一部分。數據庫實例的啟動會首先分配系統全局區(SGA)
1.共享池:共享sql和pl/sql代碼,即把解析的sql代碼在這里緩存,PL/SQL不僅緩存還共享。這樣大大提高了直接訪問磁盤獲得sql的速度。
1)庫高速緩存:存儲最近使用過的sql語句。利用LRU(最近最少使用)算法來管理緩存。最近最少使用算法是一種比較常用的算法。在這里當庫高速緩存接近滿的時候。它會把緩存中最近最少使用的數據清除緩存中。加入新的緩存sql。
查看共享池的大小使用參數shared_pool_size
Sql>show parameter shared_pool_size
設置共享池大小
Sql>alter system set shared_pool_size=16M
注:在下面的的內容中。如果提到有關參數。如沒有特殊說明。設置和查看參數值都是用以上類似方法。以后就不在重復了。並且這些參數必須是在以系統管理員system登陸時才能查看和修改。用類似scott用戶是不能查看和修改的。
Oracle提供了DB_CACHE_SIZE(數據庫大小)和DB_BLOCK_BUFFERS(數據庫塊個數)設置庫高速緩存的大小,即為兩者的成績。
2)數據字典高速緩存
存儲數據文件、表、索引、列、用戶、權限信息和其他一些數據庫對象的定義。把相關的數據字典信息放入緩存來提高查詢的響應時間。其大小取決於共享池的大小。
2.數據庫高速緩存
存儲了最近從數據文件讀入的數據塊信息或用戶更改后需要寫回數據庫的數據信息。內存讀取比磁盤讀取的速度快的多。提高了訪問速度。這里的存取也采用了LRU(最近最少使用)算法。
Oracle數據庫引入了緩沖區顧問參數(Buffer cache advisory parameter)用於啟動和關閉統計信息。這些信息用於預測不同緩沖區的大小導致的不同行為特性。三種狀態:OFF:ON:READY
設置顧問緩存為開啟狀態后。可以通過動態性能視圖:v$db_cache_advice查看緩沖區的建議信息
3.重做日志緩存
在執行insert、update等操作后。數據發生了改變。這些變化的數據在寫入數據庫高速緩存前會先寫入重做日志緩沖區。包括變化之前的數據。可以通過初始化參數log_buffer查看它的大小。此參數為靜態參數,不能修改。
4.大池和java池
大型池(Large Pool)
在SGA中大型池是可選的緩沖區。它可以根據需要有管理權進行配置。它可以提供一個大的區以供象數據庫的備份與恢復等操作。
在以下幾種情形下會啟用:
一,backup 和 restore 操作的時候
二,當啟動UGA, I/O slaves的時候
三,設置MTS服務器的時候,用戶信息的存放也使用到Large Pool
可以使用以下命令進行更改Large Pool的大小:
ALTER SYSTEM SET Large_Pool_Size = 64m;
Java池用於編譯java語言編寫的指令。通過java_pool_size查看和修改大小。大小由數據庫在SGA自動分配和管理。所以查看的時候值為0;
Oracle的連接和會話
連接 (connection)與會話 (session)這兩個概念均與用戶進程 (user process)緊密相關,但二者又具有不同的含義。
連接 :用戶進程和 Oracle 實例間的通信通道(communication pathway)。這個通信通道是通過進程間的通信機制(interprocess communication mechanisms)(在同一個計算機上運行用戶進程和 Oracle 進程)或網絡軟件(network software)(當數據庫應用程序與 Oracle 服務器運行在不同的計算機上時,就需要通過網絡來通信)建立的。
會話 :用戶通過用戶進程與 Oracle 實例建立的連接[此處連接與上文中的連接含義不同 ,主要指用戶和數據庫間的聯系 ]。例如,當用戶啟動 SQL*Plus 時必須提供有效的用戶名和密碼,之后 Oracle 為此用戶建立一個會話。從用戶開始連接到用戶斷開連接(或退出數據庫應用程序)期間,會話一直持續。
Oracle 數據庫中的同一個用戶可以同時創建多個會話。例如,用戶名/密碼為的SCOTT/TIGER 用戶可以多次連接到同一個 Oracle 實例。
當系統沒有運行在共享服務模式下時,Oracle 為每個用戶會話創建一個服務進程(server process)。而當系統運行在共享服務模式下時,多個用戶會話可以共享同一個服務進程。
來源:Oracle認證