在學(xué)習(xí)oracle中,體系結(jié)構(gòu)是重中之重,一開始從宏觀上掌握它的物理組成、文件組成和各種文件組成。掌握的越深入越好。在實(shí)際工作遇到疑難問題,其實(shí)都可以歸結(jié)到體系結(jié)構(gòu)中來解釋。體系結(jié)構(gòu)是對一個系統(tǒng)的框架描述。是設(shè)計(jì)一個系統(tǒng)的宏觀工作。這好比建一棟大樓。你首先應(yīng)該以圖紙的方式把整個大樓的體系架構(gòu)描述出來。然后一點(diǎn)點(diǎn)的往里面填充東西。下面我們先以一個圖解的方式對oracle體系結(jié)構(gòu)有一個基本了解
根據(jù)示圖,便于我們記憶,示圖分三部分組成,左側(cè)User Process、Server Process、PGA可以看做成Clinet端,上面的實(shí)例(Instance)和下面的數(shù)據(jù)庫(Database)及參數(shù)文件(parameter file)、密碼文件(password file)和歸檔日志文件(archived logfiles)組成Oracle Server,所以整個示圖可以理解成一個C/S架構(gòu)。 Oracle Server由兩個實(shí)體組成:實(shí)例(instance)與數(shù)據(jù)庫(database)。這兩個實(shí)體是獨(dú)立的,不過連接在一起。在數(shù)據(jù)庫創(chuàng)建過程中,實(shí)例首先被創(chuàng)建,然后才創(chuàng)建數(shù)據(jù)庫。在典型的單實(shí)例環(huán)境中,實(shí)例與數(shù)據(jù)庫的關(guān)系是一對一的,一個實(shí)例連接一個數(shù)據(jù)庫,實(shí)例與數(shù)據(jù)庫也可以是多對一的關(guān)系,即不同計(jì)算機(jī)上的多個實(shí)例打開共享磁盤系統(tǒng)上的一個公用數(shù)據(jù)庫。這種多對一關(guān)系被稱為實(shí)際應(yīng)用群集(Real Application Clusters,RAC)RAC極大提高了數(shù)據(jù)庫的性能、容錯與可伸縮性(可能耗費(fèi)更多的存儲空間)并且是oracle網(wǎng)格(grid)概念的必備部分。
下面我們來詳細(xì)看一下oracle數(shù)據(jù)庫的體系架構(gòu)
Oracle體系架構(gòu)主要有兩大部分組成:數(shù)據(jù)庫實(shí)例(Instance)和數(shù)據(jù)庫文件(database)
數(shù)據(jù)庫實(shí)例
指數(shù)據(jù)庫服務(wù)器的內(nèi)存及相關(guān)處理程序,它是Oracle的心臟。與Oracle性能關(guān)系最大的是SGA(System Global Area,即系統(tǒng)全局區(qū)活共享內(nèi)存區(qū)),SGA包含三個部分:
1、數(shù)據(jù)緩沖區(qū),可避免重復(fù)讀取常用的數(shù)據(jù);
2、日志緩沖區(qū),提升了數(shù)據(jù)增刪改的速度,減少磁盤的讀寫而加快速度;
3、共享池,使相同的SQL語句不再編譯,提升了SQL的執(zhí)行速度。
oracle數(shù)據(jù)庫實(shí)例的另一部分就是一些后臺進(jìn)程了,他主要包括:
1.系統(tǒng)監(jiān)控進(jìn)程
2.進(jìn)程監(jiān)控
3.數(shù)據(jù)庫寫進(jìn)程
4.日志寫進(jìn)程
5.檢驗(yàn)點(diǎn)進(jìn)程
6.其他進(jìn)程
這些后臺進(jìn)程合起來完成數(shù)據(jù)庫管理任務(wù)
在訪問數(shù)據(jù)庫的時候。器后臺先啟動實(shí)例。啟動實(shí)例前要先分配內(nèi)存區(qū)。然后在啟動后臺進(jìn)程。數(shù)據(jù)庫啟動過程中必須啟動上面的前五個進(jìn)程。否則實(shí)例無法創(chuàng)建。
注意:在啟動oracle數(shù)據(jù)庫的時候。因?yàn)橛行┻M(jìn)程是在開機(jī)啟動項(xiàng)中自動啟動的。所以占用了很大一部分內(nèi)存。如果您電腦上還有一些其他占用內(nèi)存比較大的程序。在啟動oracle數(shù)據(jù)庫的時候有可能會因內(nèi)存不足而啟動失敗。
Oracle服務(wù)器
Oracle服務(wù)器包括兩部分:數(shù)據(jù)庫實(shí)例和數(shù)據(jù)庫文件。他們構(gòu)成了也就是所謂的數(shù)據(jù)管理系統(tǒng)(DBMS)
物理結(jié)構(gòu):oracle的物理結(jié)構(gòu)指的其實(shí)就是一些存在硬盤上的各種文件。其最終目的就是存儲和獲取相關(guān)數(shù)據(jù)。這些存在硬盤上的文件組成了oracle數(shù)據(jù)庫的物理結(jié)構(gòu)
Oracle中主要包括三種文件:
1.數(shù)據(jù)文件
2.控制文件
3.重做日志文件
參數(shù)文件和密碼文件:
參數(shù)文件:定義了數(shù)據(jù)庫實(shí)例的特性,他是正文文件
密碼文件:授予用戶啟動和關(guān)閉數(shù)據(jù)庫的實(shí)例。主要有二進(jìn)制數(shù)據(jù)組成
Oracle數(shù)據(jù)庫的內(nèi)存結(jié)構(gòu):SGA和PGA
SGA:數(shù)據(jù)庫實(shí)例的一部分。數(shù)據(jù)庫實(shí)例的啟動會首先分配系統(tǒng)全局區(qū)(SGA)
1.共享池:共享sql和pl/sql代碼,即把解析的sql代碼在這里緩存,PL/SQL不僅緩存還共享。這樣大大提高了直接訪問磁盤獲得sql的速度。
1)庫高速緩存:存儲最近使用過的sql語句。利用LRU(最近最少使用)算法來管理緩存。最近最少使用算法是一種比較常用的算法。在這里當(dāng)庫高速緩存接近滿的時候。它會把緩存中最近最少使用的數(shù)據(jù)清除緩存中。加入新的緩存sql。
查看共享池的大小使用參數(shù)shared_pool_size
Sql>show parameter shared_pool_size
設(shè)置共享池大小
Sql>alter system set shared_pool_size=16M
注:在下面的的內(nèi)容中。如果提到有關(guān)參數(shù)。如沒有特殊說明。設(shè)置和查看參數(shù)值都是用以上類似方法。以后就不在重復(fù)了。并且這些參數(shù)必須是在以系統(tǒng)管理員system登陸時才能查看和修改。用類似scott用戶是不能查看和修改的。
Oracle提供了DB_CACHE_SIZE(數(shù)據(jù)庫大小)和DB_BLOCK_BUFFERS(數(shù)據(jù)庫塊個數(shù))設(shè)置庫高速緩存的大小,即為兩者的成績。
2)數(shù)據(jù)字典高速緩存
存儲數(shù)據(jù)文件、表、索引、列、用戶、權(quán)限信息和其他一些數(shù)據(jù)庫對象的定義。把相關(guān)的數(shù)據(jù)字典信息放入緩存來提高查詢的響應(yīng)時間。其大小取決于共享池的大小。
2.數(shù)據(jù)庫高速緩存
存儲了最近從數(shù)據(jù)文件讀入的數(shù)據(jù)塊信息或用戶更改后需要寫回?cái)?shù)據(jù)庫的數(shù)據(jù)信息。內(nèi)存讀取比磁盤讀取的速度快的多。提高了訪問速度。這里的存取也采用了LRU(最近最少使用)算法。
Oracle數(shù)據(jù)庫引入了緩沖區(qū)顧問參數(shù)(Buffer cache advisory parameter)用于啟動和關(guān)閉統(tǒng)計(jì)信息。這些信息用于預(yù)測不同緩沖區(qū)的大小導(dǎo)致的不同行為特性。三種狀態(tài):OFF:ON:READY
設(shè)置顧問緩存為開啟狀態(tài)后??梢酝ㄟ^動態(tài)性能視圖:v$db_cache_advice查看緩沖區(qū)的建議信息
3.重做日志緩存
在執(zhí)行insert、update等操作后。數(shù)據(jù)發(fā)生了改變。這些變化的數(shù)據(jù)在寫入數(shù)據(jù)庫高速緩存前會先寫入重做日志緩沖區(qū)。包括變化之前的數(shù)據(jù)??梢酝ㄟ^初始化參數(shù)log_buffer查看它的大小。此參數(shù)為靜態(tài)參數(shù),不能修改。
4.大池和java池
大型池(Large Pool)
在SGA中大型池是可選的緩沖區(qū)。它可以根據(jù)需要有管理權(quán)進(jìn)行配置。它可以提供一個大的區(qū)以供象數(shù)據(jù)庫的備份與恢復(fù)等操作。
在以下幾種情形下會啟用:
一,backup 和 restore 操作的時候
二,當(dāng)啟動UGA, I/O slaves的時候
三,設(shè)置MTS服務(wù)器的時候,用戶信息的存放也使用到Large Pool
可以使用以下命令進(jìn)行更改Large Pool的大小:
ALTER SYSTEM SET Large_Pool_Size = 64m;
Java池用于編譯java語言編寫的指令。通過java_pool_size查看和修改大小。大小由數(shù)據(jù)庫在SGA自動分配和管理。所以查看的時候值為0;
Oracle的連接和會話
連接 (connection)與會話 (session)這兩個概念均與用戶進(jìn)程 (user process)緊密相關(guān),但二者又具有不同的含義。
連接 :用戶進(jìn)程和 Oracle 實(shí)例間的通信通道(communication pathway)。這個通信通道是通過進(jìn)程間的通信機(jī)制(interprocess communication mechanisms)(在同一個計(jì)算機(jī)上運(yùn)行用戶進(jìn)程和 Oracle 進(jìn)程)或網(wǎng)絡(luò)軟件(network software)(當(dāng)數(shù)據(jù)庫應(yīng)用程序與 Oracle 服務(wù)器運(yùn)行在不同的計(jì)算機(jī)上時,就需要通過網(wǎng)絡(luò)來通信)建立的。
會話 :用戶通過用戶進(jìn)程與 Oracle 實(shí)例建立的連接[此處連接與上文中的連接含義不同 ,主要指用戶和數(shù)據(jù)庫間的聯(lián)系 ]。例如,當(dāng)用戶啟動 SQL*Plus 時必須提供有效的用戶名和密碼,之后 Oracle 為此用戶建立一個會話。從用戶開始連接到用戶斷開連接(或退出數(shù)據(jù)庫應(yīng)用程序)期間,會話一直持續(xù)。
Oracle 數(shù)據(jù)庫中的同一個用戶可以同時創(chuàng)建多個會話。例如,用戶名/密碼為的SCOTT/TIGER 用戶可以多次連接到同一個 Oracle 實(shí)例。
當(dāng)系統(tǒng)沒有運(yùn)行在共享服務(wù)模式下時,Oracle 為每個用戶會話創(chuàng)建一個服務(wù)進(jìn)程(server process)。而當(dāng)系統(tǒng)運(yùn)行在共享服務(wù)模式下時,多個用戶會話可以共享同一個服務(wù)進(jìn)程。
深圳塔塔咨詢服務(wù)有限公司(簡稱塔塔IT)專注于IT前沿技術(shù)的傳播與應(yīng)用。公司與微軟、Cisco、Oracle、IBM、Vmware、Citrix、EMC、HP、SAP等全球著名IT廠商建立長期合作伙伴關(guān)系,提供思科CCNA\CCNP\CCIE培訓(xùn),微軟MCSE\MCITP培訓(xùn),Office培訓(xùn),Oracle培訓(xùn),JAVA培訓(xùn),ITIL培訓(xùn),PMP培訓(xùn)、CompTIA培訓(xùn)等多種IT認(rèn)證培訓(xùn)以及IT服務(wù)、企業(yè)內(nèi)訓(xùn)業(yè)務(wù),是一家以IT高端培訓(xùn)、咨詢服務(wù)、技術(shù)支持以及國際IT認(rèn)證考試為核心業(yè)務(wù)的專業(yè)服務(wù)商。聯(lián)系方式:深圳0755-29152000
Copyright? 2012-2013 TATAIT.COM All Rights Reserved 深圳塔塔咨詢服務(wù)有限公司 版權(quán)所有 深圳網(wǎng)站建設(shè):沙漠風(fēng)
塔塔IT—高端IT培訓(xùn)領(lǐng)導(dǎo)品牌,專注于IT前沿技術(shù)的傳播與應(yīng)用。專業(yè)創(chuàng)造價值,服務(wù)贏得口碑!