1. 程式人生 > >ORACLE 體系結構

ORACLE 體系結構

默認 告警 再次 ava shared 檢查 從數據 物理結構 增量

本文內容來自王二暖11G視頻講解

技術分享

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(System Global Area): 系統全局區
i0、數據庫信息存儲於SGA,由多個數據庫進程共享。
i1、SGA包括:共享池、數據緩沖區、日誌緩沖區、Large池、Java池、Stream池。
i2、共享池
1)、共享池是對SQL、PL/SQL程序進行語法分析、編譯、執行的內存區域。
如在執行SELECT * FROM emp語句時,會對sql語句進行語法分析->編譯->生成執行計劃->運行執行計劃等,這些操作都在共享池中完成;如果再次執行SELECT * FROM emp語句時,會在共享池中查找是否有相同的sql,如果存在則省去編譯、生成執行計劃操作步驟而是直接運行執行計劃,因此養成良好的編碼習慣對於提高oracle執行效率非常有幫助。
2)、共享池由庫緩存和數據字典緩存組成。
3)、共享池的大小直接影響數據庫的性能。


i3、數據緩沖區

1)、用於存儲從磁盤數據文件中讀入的數據,所有用戶共享。
2)、服務器進程將讀入的數據保存在數據緩沖區中,當後續的請求需要這些數據時可以在內存中找到,不需要再從磁盤讀取,提高了讀取速度。
3)、數據緩沖區的大小對數據庫的讀取速度有直接的影響。
4)、硬盤上的數據文件中的數據,如何返回給用戶的?
i、從硬盤取出來,直接返回給用戶,使得獲取數據的效率非常低。
ii、從硬盤取出來,放到數據緩沖區,從數據緩沖區中把數據返回給用戶。下次讀取同樣的數據的話,直接從數據緩沖區中獲取,不需要再從硬盤獲取。

i4、日誌緩沖區
1)、日誌記錄數據庫的所有修改信息,日誌信息首先產生於日誌緩沖區。
2)、當日誌緩沖區的日誌數據達到一定數量時,由後臺進程將日誌數據寫入日誌文件中。
3)、相對來說,日誌緩沖區對數據庫的性能影響較小。
eg、UPDATE emp SET empno=7935 WHERE empno=7934;首先在日記緩沖區中被記錄,某個時候(三種情況;一、日誌緩沖區中的記錄達到1M 二、每隔3秒 三、日誌緩沖區已經用了三分之一,滿足其中任意一項就可以)把日誌緩沖區中的這些記錄寫到在線日誌中去。


i5、Large池
為了進行大的後臺進程操作而分配的內存空間,主要指備份恢復、大型IO操作、並行查詢等。


i6、Stream池
為了stream應用而分配的內存空間,高級復制技術一部分。


i7、JAVA池
為了java應用而分配的內存空間。

7、PGA(Process Global Area): 程序全局區
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 * FROM v$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,用戶發出alter system checkpoint;
2,除了shutdown abort以外的其他方式正常關閉數據庫。
3)、增量檢查點觸發情況:
1,每隔三秒。
2,在線日誌切換。
DBWR、LGWR、CKPT之間如何協調工作的?
i5、查看進程信息
1)、從v$process中查詢啟動的後臺進程信息
2)、查看啟動了幾個DBWR進程
select * from v$process where program like ‘%DBW%‘;
查看DBWR進程個數: show parameter db_wr,DBWR進程個數跟臟數據的產生有一定的影響。
修改DBWR進程個數:
alter system set db_writer_processes=3 scope=memory; --會報"無法修改指定的初始化參數"錯誤
alter system set db_writer_processes=3 scope=spfile;--修改成功,下次啟動時才生效
3)、查看啟動了幾個ARC進程
select * from v$process where program like ‘%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,Automatic Shared Memory Management。只為SGA分配一個總的大小就可以了,不必像9i那樣具體分配SGA中的每一個部分的大小。
ii、在設置初始化參數statistics_level為typical或all,才可以啟動ASMM。然後可以使用10g提供的一個新的初始化參數sga_target來定義了整個SGA的大小。
iii、為此,10g有一個新的後臺進程MMAN,即memory manager,用於進行自動SGA管理。
iiii、註意另一個後臺進程MMON,即memory monitor,用於自動統計信息收集。

15、11g中的自動內存管理
i1、自動內存管理,即AMM,Automatic Memory Management。只為Oracle的使用整體分配一個總的內存大小就可以了,不必像10g那樣具體分配SGA和PGA的大小。
i2、初始化參數statistics_level為typical或all,才可以啟動AMM。
show parameter statistics_level; --查看AMM
show parameter memory; --查看整個oracle占用了多大內存
alter system set memory_max_target=900m;--設置內存最大可以達到多大
i3、新的初始化參數memory_target來定義了整個內存的大小,即SGA加上PGA的總的大小。
alter system set memory_target=500m; --memory_target設置的值要不大於memory_max_target
i4、新的初始化參數memory_max_target來定義了memory_target最大可以達到的值。
alter system set memory_max_target=900m scope=spfile; --下次啟動生效,scope=spfile不能省略否則報錯
i5、註意:如果使用AMM,則sga_target和pga_aggregate_target的值應該設置成0。
show parameter sga_target;
show parameter page_aggregate_target;
alter system set sga_target=0m;
alter system set pag_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文件。
查看是否有歸檔日誌:archive log list。
ORACLE_HOME: D:\dev\oracle\product\10.2.0\db_1
註意:丟失這些文件,數據庫仍然可以繼續運行,不需要進行介質恢復。

18、邏輯結構
數據庫的邏輯結構是從邏輯的角度分析數據庫的組成。
Oracle 的邏輯組件包括:數據庫->表空間->段->區->數據庫->模式。

19、表空間
i1、表空間是數據庫中最大的邏輯單位,一個 Oracle 數據庫至少包含一個表空間,就是名為SYSTEM的系統表空間。
i2、每個表空間是由一個或多個數據文件組成的,一個數據文件只能與一個表空間相關聯。
i3、表空間的大小等於構成該表空間的所有數據文件大小之和。
i4、創建表空間的語法是:
CREATE TABLESPACE tablespacename
DATAFILE ‘filename‘ [SIZE integer [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表空間中Logical Standby、Spatial、以前DRSYS表空間中Oracle Text等。
i6、TEMP是臨時表空間,當排序不能在分配的空間中完成時,就會使用磁盤排序的方式,即在Oracle實例中的臨時表空間中進行。
UNDOTBS1是撤銷表空間,是UNDO類型的表空間,保存用戶進行DML操作中,修改前的數據。
USERS是數據庫默認的永久表空間。
EXAMPLE是數據庫測試用例所涉及的表的所屬表空間。
i7、select * from dba_data_files;--查看表空間的具體信息
select * from v$tablespace;--查看表空間

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

ORACLE 體系結構