oracle 體系結構

110118382.png

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;--查看錶空間

20、段、區、數據庫、模式
i、段,ASSM自動段存儲管理
1)、段是構成表空間的邏輯存儲結構,段由一組區組成。
2)、按照段所存儲數據的特徵,將段分爲若干種類型,主要有數據段、索引段、回退段和臨時段。
ii、區
1)、區爲段分配空間,它由連續的數據塊組成。
2)、當段中的所有空間已完全使用時,系統自動爲該段分配一個新區。
3)、區不能跨數據文件存在,只能存在於一個數據文件中。
iii、數據庫
1)、數據塊是Oracle服務器所能分配、讀取或寫入的最小存儲單元。
2)、Oracle服務器以數據塊爲單位管理數據文件的存儲空間。
3)、showparameterdb_block_size;--查看數據塊大小
iiii、模式,等同於用戶
1)、模式是對用戶所創建的數據庫對象的總稱。
2)、模式對象包括表、視圖、索引、同義詞、序列、過程和程序包等

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