一、oracle內存由SGA+PGA所構成html
二、oracle數據庫體系結構
數據庫的體系結構是指數據庫的組成、工做過程與原理,以及數據在數據庫中的組織與管理機制。java
oracle工做原理:sql
1)、在數據庫服務器上啓動Oracle實例;
2)、應用程序在客戶端的用戶進程中運行,啓用Oracle網絡服務驅動器與服務器創建鏈接;
3)、服務器運行Oracle網絡服務驅動器,創建專用的服務器進程執行用戶進程;
4)、客戶端提交事務;
5)、服務器進程獲取sql語句並檢查共享池中是否有類似的sql語句,若是有,服務器進程再檢查用戶的訪問權限;不然分配新的sql共享區分析並執行sql語句;
6)、服務器從實際的數據文件或SGA中取得所需數據;
7)、服務器進程在SGA中更新數據,進程DBWN在特定條件下將更新過的數據塊寫回磁盤,進程LGWR在重作日誌文件中記錄事務;
8)、若是事務成功,服務器進程發送消息到應用程序中。數據庫
三、oracle服務器緩存
i、oracle服務器由oracle數據庫和oracle實例組成。
ii、oracle數據庫是一個數據的集合,存放在數據文件裏,該集合被視爲一個邏輯單元。
iii、oracle實例由管理數據庫的後臺進程和內存結構所構成。服務器
四、oracle實例
i、Oracle實例是內存結構和後臺進程的集合
ii、啓動Oracle實例的過程,即:分配內存、啓動後臺進程
iii、Oracle實例的內存包括SGA和PGA;
當啓動實例的時候分配SGA;
當服務器進程創建時分配PGA;
通常狀況下,SGA:PGA=8:1分配內存。網絡
iiii、Oracle實例的後臺進程包括SMON、PMON、DBWR、LGWR、ARC、CKPT等。session
五、SGA(System Global Area): 系統全局區
i0、數據庫信息存儲於SGA,由多個數據庫進程共享。
i一、SGA包括:共享池、數據緩衝區、日誌緩衝區、Large池、Java池、Stream池。
i二、共享池
1)、共享池是對SQL、PL/SQL程序進行語法分析、編譯、執行的內存區域。
如在執行SELECT * FROM emp語句時,會對sql語句進行語法分析->編譯->生成執行計劃->運行執行計劃等,這些操做都在共享池中完成;若是再次執行SELECT * FROM emp語句時,會在共享池中查找是否有相同的sql,若是存在則省去編譯、生成執行計劃操做步驟而是直接運行執行計劃,所以養成良好的編碼習慣對於提升oracle執行效率很是有幫助。
2)、共享池由庫緩存和數據字典緩存組成。
3)、共享池的大小直接影響數據庫的性能。oracle
i三、數據緩衝區性能
1)、用於存儲從磁盤數據文件中讀入的數據,全部用戶共享。
2)、服務器進程將讀入的數據保存在數據緩衝區中,當後續的請求須要這些數據時能夠在內存中找到,不須要再從磁盤讀取,提升了讀取速度。
3)、數據緩衝區的大小對數據庫的讀取速度有直接的影響。
4)、硬盤上的數據文件中的數據,如何返回給用戶的?
i、從硬盤取出來,直接返回給用戶,使得獲取數據的效率很是低。
ii、從硬盤取出來,放到數據緩衝區,從數據緩衝區中把數據返回給用戶。下次讀取一樣的數據的話,直接從數據緩衝區中獲取,不須要再從硬盤獲取。
i四、日誌緩衝區
1)、日誌記錄數據庫的全部修改信息,日誌信息首先產生於日誌緩衝區。
2)、當日志緩衝區的日誌數據達到必定數量時,由後臺進程將日誌數據寫入日誌文件中。
3)、相對來講,日誌緩衝區對數據庫的性能影響較小。
eg、UPDATE emp SET empno=7935 WHERE empno=7934;首先在日記緩衝區中被記錄,某個時候(三種狀況;1、日誌緩衝區中的記錄達到1M 2、每隔3秒 3、日誌緩衝區已經用了三分之一,知足其中任意一項就能夠)把日誌緩衝區中的這些記錄寫到在線日誌中去。
i五、Large池
爲了進行大的後臺進程操做而分配的內存空間,主要指備份恢復、大型IO操做、並行查詢等。
i六、Stream池
爲了stream應用而分配的內存空間,高級複製技術一部分。
i七、JAVA池
爲了java應用而分配的內存空間。
七、PGA(Process Global Area): 程序全局區
i0、程序全局區(PGA)包含單個服務器進程所需的數據和控制信息,好比每一個session傳入的SQL綁定變量、以及對該session進行控制的控制信息。若是該session進行了排序或hash鏈接操做,也會使用PGA中的內存。
i一、PGA是在用戶進程鏈接到數據庫並建立一個會話時自動分配的,保存每一個與Oracle數據庫鏈接的用戶進程所需的信息
i二、共享鏈接模式和專用鏈接模式,PGA的管理方式不一樣。
大多狀況下,採用專用鏈接模式。其產生的用戶進程和服務器進程後面講述
八、oracle進程:用戶進程、服務器進程(影子進程,相對用戶進程而言)、後臺進程
i、用戶進程是一個須要與oracle服務器進行交互的程序。當用戶運行一個應用程序準備向數據庫服務器發送請求時,即建立了用戶進程。用戶進程位於客戶端,服務器進程、後臺進程位於服務器端。
ii、服務器進程用於處理鏈接到該實例的用戶進程的請求。當用戶鏈接至oracle數據庫實例建立會話時,即產生服務器進程。
iii、後臺進程是Oracle數據庫爲了保持最佳系統性能和協調多個用戶請求而設置的。Oracle實例啓動時即建立一系列後臺進程。
十、用戶進程和服務器進程
i、對專用鏈接來講,用戶在客戶端啓動了一個應用程序,例如sql*plus,就是在客戶端啓動一個用戶進程;與oracle服務器端鏈接成功後,會在服務器端生成一個服務器進程,該服務器進程做爲用戶進程的代理進程,代替客戶端執行各類命令並把結果返回給客戶端。9i、10g、11g都使用專用鏈接。
ii、用戶進程一旦停止,服務器進程馬上停止。
iii、SGA對全部用戶共享,PGA不共享。
十一、會話
i0、會話是用戶與 Oracle 服務器的單個鏈接
i一、當用戶與服務器創建鏈接時建立會話
i二、當用戶與服務器斷開鏈接時關閉會話
i三、從v$session中查詢會話信息,SELECT * FROM v$session;
十二、後臺進程
i0、PMON 進程監控進程,監控用戶進程是否正常。
1)、清理出現故障的進程。
2)、釋放全部當前掛起的鎖定。
3)、釋放故障進程使用的資源。
i一、SMON 系統監控進程,實時監控整個oracle情況。
1)、在實例失敗以後,從新打開數據庫時自動恢復實例。
2)、整理數據文件的自由空間,將相鄰區域結合起來。
3)、釋放再也不使用的臨時段。
i二、DBWR 數據寫入進程
1)、管理數據緩衝區,將最近使用過的塊保留在內存中。
2)、將修改後的緩衝區數據寫入數據文件中。
i三、LGWR 日誌寫入進程
1)、負責將日誌緩衝區中的日誌數據寫入日誌文件。
2)、系統有多個日誌文件,該進程以循環的方式將數據寫入文件。
i四、CKPT檢查點進程
1)、爲了防止實例崩潰,爲了儘快進行實例恢復的進程。
2)、檢查點包括兩種:徹底檢查點、增量檢查點。
3)、徹底檢查點只有下面兩種狀況下被觸發:
1,用戶發出alter system checkpoint;
2,除了shutdown abort之外的其餘方式正常關閉數據庫。
3)、增量檢查點觸發狀況:
1,每隔三秒。
2,在線日誌切換。
DBWR、LGWR、CKPT之間如何協調工做的?
i五、查看進程信息
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%';
1三、9i中的自動PGA管理
i、前提是:必須設置初始化參數workarea_size_policy爲AUTO。
ii、自動PGA管理,DBA根據數據庫的負載狀況,估計全部的session大概須要消耗的PGA的總的大小,而後把該值設置成初始化參數pga_aggregate_target,Oracle就會自動調整每一個session的PGA的大小。
1四、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,用於自動統計信息收集。
1五、11g中的自動內存管理
i一、自動內存管理,即AMM,Automatic Memory Management。只爲Oracle的使用總體分配一個總的內存大小就能夠了,沒必要像10g那樣具體分配SGA和PGA的大小。
i二、初始化參數statistics_level爲typical或all,才能夠啓動AMM。
show parameter statistics_level; --查看AMM
show parameter memory; --查看整個oracle佔用了多大內存
alter system set memory_max_target=900m;--設置內存最大能夠達到多大
i三、新的初始化參數memory_target來定義了整個內存的大小,即SGA加上PGA的總的大小。
alter system set memory_target=500m; --memory_target設置的值要不大於memory_max_target
i四、新的初始化參數memory_max_target來定義了memory_target最大能夠達到的值。
alter system set memory_max_target=900m scope=spfile; --下次啓動生效,scope=spfile不能省略不然報錯
i五、注意:若是使用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;
i六、11g中的後臺進程MMAN,用於進行自動內存管理。
1六、oracle數據庫結構
i、Oracle數據庫由操做系統文件組成,這些文件爲數據庫信息提供實際物理存儲區。
ii、Oracle 數據庫包括邏輯結構和物理結構;
物理結構包含數據庫中的一組操做系統文件;
邏輯結構指數據庫建立以後造成的邏輯概念之間的關係。
1七、物理結構
物理組件就是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
注意:丟失這些文件,數據庫仍然能夠繼續運行,不須要進行介質恢復。
1八、邏輯結構
數據庫的邏輯結構是從邏輯的角度分析數據庫的組成。
Oracle 的邏輯組件包括:數據庫->表空間->段->區->數據庫->模式。
1九、表空間
i一、表空間是數據庫中最大的邏輯單位,一個 Oracle 數據庫至少包含一個表空間,就是名爲SYSTEM的系統表空間。
i二、每一個表空間是由一個或多個數據文件組成的,一個數據文件只能與一個表空間相關聯。
i三、表空間的大小等於構成該表空間的全部數據文件大小之和。
i四、建立表空間的語法是:
CREATE TABLESPACE tablespacename
DATAFILE 'filename' [SIZE integer [K|M]]
[AUTOEXTEND [OFF|ON]];
i五、默認表空間
1)、默認包含以下表空間(從v$tablespace中查看):SYSTEM、SYSAUX、TEMP、UNDOTBS一、USERS、EXAMPLE。
2)、SYSTEM是系統表空間,存放系統的最基本的信息,若是SYSTEM表空間壞掉,Oracle將沒法啓動。
3)、SYSAUX從10g中引入,做爲SYSTEM的輔助表空間,用以減小SYSTEM表空間的負荷 。之前其餘表空間中的一些組件,如今放到SYSAUX表空間中了。好比,之前SYSTEM表空間中LogMiner、之前SYSTEM表空間中Logical Standby、Spatial、之前DRSYS表空間中Oracle Text等。
i六、TEMP是臨時表空間,當排序不能在分配的空間中完成時,就會使用磁盤排序的方式,即在Oracle實例中的臨時表空間中進行。
UNDOTBS1是撤銷表空間,是UNDO類型的表空間,保存用戶進行DML操做中,修改前的數據。
USERS是數據庫默認的永久表空間。
EXAMPLE是數據庫測試用例所涉及的表的所屬表空間。
i七、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)、模式對象包括表、視圖、索引、同義詞、序列、過程和程序包等。
轉:http://www.cnblogs.com/linjiqin/archive/2012/03/02/2376647.html