java程序員菜鳥進階(五)oracle基礎詳解(五)oracle數據庫體系架構詳解


      在學習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性能關係最大的是SGASystem 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數據庫的內存結構:SGAPGA


SGA:數據庫實例的一部分。數據庫實例的啓動會首先分配系統全局區(SGA)


1.共享池:共享sqlpl/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.重做日誌緩存

在執行insertupdate等操作後。數據發生了改變。這些變化的數據在寫入數據庫高速緩存前會先寫入重做日誌緩衝區。包括變化之前的數據。可以通過初始化參數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)。而當系統運行在共享服務模式下時,多個用戶會話可以共享同一個服務進程。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章