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(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)、模式對象包括表、視圖、索引、同義詞、序列、過程和程序包等。
轉:http://www.cnblogs.com/linjiqin/archive/2012/03/02/2376647.html
文章列表
留言列表