
1、oracle記憶體由SGA+PGA所構成
2、oracle資料庫體系結構
資料庫的體系結構是指資料庫的組成、工作過程與原理,以及資料在資料庫中的組織與管理機制。
oracle工作原理:
1)、在資料庫伺服器上啟動Oracle執行個體;
2)、應用程式在用戶端的使用者程序中運作,啟用Oracle網絡服務驅動器與伺服器建立連接配接;
3)、伺服器運作Oracle網絡服務驅動器,建立專用的伺服器程序執行使用者程序;
4)、用戶端送出事務;
5)、伺服器程序擷取sql語句并檢查共享池中是否有相似的sql語句,如果有,伺服器程序再檢查使用者的通路權限;否則配置設定新的sql共享區分析并執行sql語句;
6)、伺服器從實際的資料檔案或SGA中取得所需資料;
7)、伺服器程序在SGA中更新資料,程序DBWN在特定條件下将更新過的資料塊寫回磁盤,程序LGWR在重做日志檔案中記錄事務;
8)、如果事務成功,伺服器程序發送消息到應用程式中。
3、oracle伺服器
i、oracle伺服器由oracle資料庫和oracle執行個體組成。
ii、oracle資料庫是一個資料的集合,存放在資料檔案裡,該集合被視為一個邏輯單元。
iii、oracle執行個體由管理資料庫的背景程序和記憶體結構所構成。
4、oracle執行個體
i、Oracle執行個體是記憶體結構和背景程序的集合
ii、啟動Oracle執行個體的過程,即:配置設定記憶體、啟動背景程序
iii、Oracle執行個體的記憶體包括SGA和PGA;
當啟動執行個體的時候配置設定SGA;
當伺服器程序建立時配置設定PGA;
一般情況下,SGA:PGA=8:1配置設定記憶體。
iiii、Oracle執行個體的背景程序包括SMON、PMON、DBWR、LGWR、ARC、CKPT等。
5、SGA(SystemGlobalArea):系統全局區
i0、資料庫資訊存儲于SGA,由多個資料庫程序共享。
i1、SGA包括:共享池、資料緩沖區、日志緩沖區、Large池、Java池、Stream池。
i2、共享池
1)、共享池是對SQL、PL/SQL程式進行文法分析、編譯、執行的記憶體區域。
如在執行SELECT*FROMemp語句時,會對sql語句進行文法分析->編譯->生成執行計劃->運作執行計劃等,這些操作都在共享池中完成;如果再次執行SELECT*FROMemp語句時,會在共享池中查找是否有相同的sql,如果存在則省去編譯、生成執行計劃操作步驟而是直接運作執行計劃,是以養成良好的編碼習慣對于提高oracle執行效率非常有幫助。
2)、共享池由庫緩存和資料字典緩存組成。
3)、共享池的大小直接影響資料庫的性能。
i3、資料緩沖區
1)、用于存儲從磁盤資料檔案中讀入的資料,所有使用者共享。
2)、伺服器程序将讀入的資料儲存在資料緩沖區中,當後續的請求需要這些資料時可以在記憶體中找到,不需要再從磁盤讀取,提高了讀取速度。
3)、資料緩沖區的大小對資料庫的讀取速度有直接的影響。
4)、硬碟上的資料檔案中的資料,如何傳回給使用者的?
i、從硬碟取出來,直接傳回給使用者,使得擷取資料的效率非常低。
ii、從硬碟取出來,放到資料緩沖區,從資料緩沖區中把資料傳回給使用者。下次讀取同樣的資料的話,直接從資料緩沖區中擷取,不需要再從硬碟擷取。
i4、日志緩沖區
1)、日志記錄資料庫的所有修改資訊,日志資訊首先産生于日志緩沖區。
2)、當日志緩沖區的日志資料達到一定數量時,由背景程序将日志資料寫入日志檔案中。
3)、相對來說,日志緩沖區對資料庫的性能影響較小。
eg、UPDATEempSETempno=7935WHEREempno=7934;首先在日記緩沖區中被記錄,某個時候(三種情況;一、日志緩沖區中的記錄達到1M二、每隔3秒三、日志緩沖區已經用了三分之一,滿足其中任意一項就可以)把日志緩沖區中的這些記錄寫到線上日志中去。
i5、Large池
為了進行大的背景程序操作而配置設定的記憶體空間,主要指備份恢複、大型IO操作、并行查詢等。
i6、Stream池
為了stream應用而配置設定的記憶體空間,進階複制技術一部分。
i7、JAVA池
為了java應用而配置設定的記憶體空間。
7、PGA(ProcessGlobalArea):程式全局區
i0、程式全局區(PGA)包含單個伺服器程序所需的資料和控制資訊,比如每個session傳入的SQL綁定變量、以及對該session進行控制的控制資訊。如果該session進行了排序或hash連接配接操作,也會使用PGA中的記憶體。
i1、PGA是在使用者程序連接配接到資料庫并建立一個會話時自動配置設定的,儲存每個與Oracle資料庫連接配接的使用者程序所需的資訊
i2、共享連接配接模式和專用連接配接模式,PGA的管理方式不同。
大多情況下,采用專用連接配接模式。其産生的使用者程序和伺服器程序後面講述
8、oracle程序:使用者程序、伺服器程序(影子程序,相對使用者程序而言)、背景程序
i、使用者程序是一個需要與oracle伺服器進行互動的程式。當使用者運作一個應用程式準備向資料庫伺服器發送請求時,即建立了使用者程序。使用者程序位于用戶端,伺服器程序、背景程序位于伺服器端。
ii、伺服器程序用于處理連接配接到該執行個體的使用者程序的請求。當使用者連接配接至oracle資料庫執行個體建立會話時,即産生伺服器程序。
iii、背景程序是Oracle資料庫為了保持最佳系統性能和協調多個使用者請求而設定的。Oracle執行個體啟動時即建立一系列背景程序。
10、使用者程序和伺服器程序
i、對專用連接配接來說,使用者在用戶端啟動了一個應用程式,例如sql*plus,就是在用戶端啟動一個使用者程序;與oracle伺服器端連接配接成功後,會在伺服器端生成一個伺服器程序,該伺服器程序作為使用者程序的代理程序,代替用戶端執行各種指令并把結果傳回給用戶端。9i、10g、11g都使用專用連接配接。
ii、使用者程序一旦中止,伺服器程序立刻中止。
iii、SGA對所有使用者共享,PGA不共享。
11、會話
i0、會話是使用者與Oracle伺服器的單個連接配接
i1、當使用者與伺服器建立連接配接時建立會話
i2、當使用者與伺服器斷開連接配接時關閉會話
i3、從v$session中查詢會話資訊,SELECT*FROMv$session;
12、背景程序
i0、PMON程序監控程序,監控使用者程序是否正常。
1)、清理出現故障的程序。
2)、釋放所有目前挂起的鎖定。
3)、釋放故障程序使用的資源。
i1、SMON系統監控程序,實時監控整個oracle狀況。
1)、在執行個體失敗之後,重新打開資料庫時自動恢複執行個體。
2)、整理資料檔案的自由空間,将相鄰區域結合起來。
3)、釋放不再使用的臨時段。
i2、DBWR資料寫入程序
1)、管理資料緩沖區,将最近使用過的塊保留在記憶體中。
2)、将修改後的緩沖區資料寫入資料檔案中。
i3、LGWR日志寫入程序
1)、負責将日志緩沖區中的日志資料寫入日志檔案。
2)、系統有多個日志檔案,該程序以循環的方式将資料寫入檔案。
i4、CKPT檢查點程序
1)、為了防止執行個體崩潰,為了盡快進行執行個體恢複的程序。
2)、檢查點包括兩種:完全檢查點、增量檢查點。
3)、完全檢查點隻有下面兩種情況下被觸發:
1,使用者發出altersystemcheckpoint;
2,除了shutdownabort以外的其他方式正常關閉資料庫。
3)、增量檢查點觸發情況:
1,每隔三秒。
2,線上日志切換。
DBWR、LGWR、CKPT之間如何協調工作的?
i5、檢視程序資訊
1)、從v$process中查詢啟動的背景程序資訊
2)、檢視啟動了幾個DBWR程序
select*fromv$processwhereprogramlike'%DBW%';
檢視DBWR程序個數:showparameterdb_wr,DBWR程序個數跟髒資料的産生有一定的影響。
修改DBWR程序個數:
altersystemsetdb_writer_processes=3scope=memory;--會報"無法修改指定的初始化參數"錯誤
altersystemsetdb_writer_processes=3scope=spfile;--修改成功,下次啟動時才生效
3)、檢視啟動了幾個ARC程序
select*fromv$processwhereprogramlike'%ARC%';
13、9i中的自動PGA管理
i、前提是:必須設定初始化參數workarea_size_policy為AUTO。
ii、自動PGA管理,DBA根據資料庫的負載情況,估計所有的session大概需要消耗的PGA的總的大小,然後把該值設定成初始化參數pga_aggregate_target,Oracle就會自動調整每個session的PGA的大小。
14、10g中的自動SGA管理
i、自動SGA管理,即ASMM,AutomaticSharedMemoryManagement。隻為SGA配置設定一個總的大小就可以了,不必像9i那樣具體配置設定SGA中的每一個部分的大小。
ii、在設定初始化參數statistics_level為typical或all,才可以啟動ASMM。然後可以使用10g提供的一個新的初始化參數sga_target來定義了整個SGA的大小。
iii、為此,10g有一個新的背景程序MMAN,即memorymanager,用于進行自動SGA管理。
iiii、注意另一個背景程序MMON,即memorymonitor,用于自動統計資訊收集。
15、11g中的自動記憶體管理
i1、自動記憶體管理,即AMM,AutomaticMemoryManagement。隻為Oracle的使用整體配置設定一個總的記憶體大小就可以了,不必像10g那樣具體配置設定SGA和PGA的大小。
i2、初始化參數statistics_level為typical或all,才可以啟動AMM。
showparameterstatistics_level;--檢視AMM
showparametermemory;--檢視整個oracle占用了多大記憶體
altersystemsetmemory_max_target=900m;--設定記憶體最大可以達到多大
i3、新的初始化參數memory_target來定義了整個記憶體的大小,即SGA加上PGA的總的大小。
altersystemsetmemory_target=500m;--memory_target設定的值要不大于memory_max_target
i4、新的初始化參數memory_max_target來定義了memory_target最大可以達到的值。
altersystemsetmemory_max_target=900mscope=spfile;--下次啟動生效,scope=spfile不能省略否則報錯
i5、注意:如果使用AMM,則sga_target和pga_aggregate_target的值應該設定成0。
showparametersga_target;
showparameterpage_aggregate_target;
altersystemsetsga_target=0m;
altersystemsetpag_aggregate_target=0;
i6、11g中的背景程序MMAN,用于進行自動記憶體管理。
16、oracle資料庫結構
i、Oracle資料庫由作業系統檔案組成,這些檔案為資料庫資訊提供實際實體存儲區。
ii、Oracle資料庫包括邏輯結構和實體結構;
實體結構包含資料庫中的一組作業系統檔案;
邏輯結構指資料庫建立之後形成的邏輯概念之間的關系。
17、實體結構
實體元件就是Oracle資料庫所使用的作業系統實體檔案。我們可以在D:\dev\oracle\product\10.2.0\oradata\orcl目錄下進行檢視,在生産環境中不同的檔案放在不同的目錄,根據使用者通路的頻繁情況來做決定。
1)、主要實體檔案可分為三類:
i、資料檔案:資料檔案用于存儲資料庫資料,如表、索引資料等。
ii、控制檔案:控制檔案是記錄資料庫實體結構的二進制檔案。
iii、線上日志檔案:記錄對資料庫的所有修改資訊,用于故障恢複。
注意:丢失這些檔案,資料庫不可以繼續運作,需要進行媒體恢複。
2)、非主要實體檔案包括:
參數檔案、密碼檔案、告警和跟蹤檔案、歸檔日志檔案、備份檔案。
參數檔案分為pfile檔案和spfile檔案,位于ORACLE_HOME\DATABASE目錄下,9i開始預設不使用sfile檔案,如spfileorcl.ora檔案。
密碼檔案:sys使用者密碼,位于ORACLE_HOME\DATABASE目錄下,如pwdorcl.ora檔案。
檢視是否有歸檔日志:archiveloglist。
ORACLE_HOME:D:\dev\oracle\product\10.2.0\db_1
注意:丢失這些檔案,資料庫仍然可以繼續運作,不需要進行媒體恢複。
18、邏輯結構
資料庫的邏輯結構是從邏輯的角度分析資料庫的組成。
Oracle的邏輯元件包括:資料庫->表空間->段->區->資料庫->模式。
19、表空間
i1、表空間是資料庫中最大的邏輯機關,一個Oracle資料庫至少包含一個表空間,就是名為SYSTEM的系統表空間。
i2、每個表空間是由一個或多個資料檔案組成的,一個資料檔案隻能與一個表空間相關聯。
i3、表空間的大小等于構成該表空間的所有資料檔案大小之和。
i4、建立表空間的文法是:
CREATETABLESPACEtablespacename
DATAFILE'filename'[SIZEinteger[K|M]]
[AUTOEXTEND[OFF|ON]];
i5、預設表空間
1)、預設包含如下表空間(從v$tablespace中檢視):SYSTEM、SYSAUX、TEMP、UNDOTBS1、USERS、EXAMPLE。
2)、SYSTEM是系統表空間,存放系統的最基本的資訊,如果SYSTEM表空間壞掉,Oracle将無法啟動。
3)、SYSAUX從10g中引入,作為SYSTEM的輔助表空間,用以減少SYSTEM表空間的負荷。以前其他表空間中的一些元件,現在放到SYSAUX表空間中了。比如,以前SYSTEM表空間中LogMiner、以前SYSTEM表空間中LogicalStandby、Spatial、以前DRSYS表空間中OracleText等。
i6、TEMP是臨時表空間,當排序不能在配置設定的空間中完成時,就會使用磁盤排序的方式,即在Oracle執行個體中的臨時表空間中進行。
UNDOTBS1是撤銷表空間,是UNDO類型的表空間,儲存使用者進行DML操作中,修改前的資料。
USERS是資料庫預設的永久表空間。
EXAMPLE是資料庫測試用例所涉及的表的所屬表空間。
i7、select*fromdba_data_files;--檢視表空間的具體資訊
select*fromv$tablespace;--檢視表空間