Oracle體系結構簡介:
1、存儲結構,包括控制文件、數據文件、日志文件等文件。
2、內存結構,包括系統全局區(SGA)和程序全局區(PGA)。
3、進程結構,包括前台進程、後台進程。
Oracle的存儲結構分為物理結構(主要描述Oracle數據的外部存儲結構,即在操作系統中如何組織、管理數據。)和邏輯結構(邏輯存儲結構主要描述Oracle數據庫的內部存儲結構,即從技術概念上描述Oracle數據庫中如何組織、管理數據)。
物理結構由主要文件和其他文件構成而主要文件由數據文件、日志文件、控制文件三部分構成
數據文件,就是物理存儲Oracle數據庫數據的文件。具有以下幾個特點:
1、每一個數據文件只與一個數據庫相關聯。
2、一個表空間可以包含一個或多個數據文件,也就是說表空間的大小是它所包含數據文件的總和。
3、一個數據文件只能屬於一個表空間。
日志文件分為重做日志文件和歸檔日志文件。重做日志文件用於記錄數據庫變化,是用戶的事務處理日志,歸檔日志是非活動重做日志的備份。
控制文件是Oracle服務器在啟動期間用來標識物理文件和數據庫結構的二進制文件。控制文件主要記錄數據文件的位置以及大小,以及重做日志文件的位置及大小,並記錄數據庫名稱以及創建時間和日志序列號。
其他文件包括:參數文件、臨沭文件、預先分配文件。
參數文件是用於在啟動實例的時候配置數據庫的文件。參數文件的默認位置為ORACLE_HOME目錄下database目錄下。參數文件有兩種,第一種是當建立數據庫的時候就可以運行的初始化文件,規定數據庫中所使用的各種設置值,文本參數文件的名稱格式為inti<SID>.ora。另一種參數文件是服務器參數文件,服務器參數文件名稱格式為SPFILE<SID>.ora,它可以管理數據庫參數和值。參數文件中參數的數據包括:整型、字符型、邏輯型。
邏輯存儲結
Oracle數據庫的邏輯存儲結構由一個或0個表空間組成,一個表空間(tablespace)由一組段組成,一個段(segment)由一組區組成,一個區(extent)由一批數據庫塊組成,一個數據庫塊(block)對應一個或多個物理塊。
表空間:是最大的邏輯存儲結構,它對應一個或多個數據文件,表空間的大小是它所對應的數據文件大小的總和。
表空間特性:
1、控制數據庫數據磁盤分配。
2、限制用戶在表空間中可以使用的磁盤空間大小。
3、表空間有online、offline、readonly、readwrite屬性,也就是說我們可以修改表空間的屬性,來設置這個表空間是否可以被訪問。4、完成部分數據的備份與恢復。
5、表空間通過數據文件來擴大,表空間的大小等於構成該表空間的所有數據文件的大小之和。
修改表空間的屬性:alter tablespace表空間名稱屬性
查詢表空間狀態:select tablespace_name,status fromdba_tablespaces;
Example實例表空間,他用來存放我們在安裝Oracle的時候創建的實例用戶模式的數據信息。
SYSAUS表空間:他用於減少系統負荷,提高系統作業效率。
SYSTEM表空間:存放關於表空間名稱,控制文件、數據文件等管理信息。
UNDOTBS重做表空間:用於存放UNDO數據。
USERS用戶表空間:用戶表空間永久存放用戶對象和私有信息,也被稱為數據表空間。
塊:是數據庫中使用的I/O最小單元,又稱邏輯塊或ORACLE塊
塊的大小有參數DB_BLOCK_SIZE確定,塊的大小是操作系統塊大小的整數倍。數據塊的結構包括塊頭和存儲區兩部分,塊頭中包括數據塊標題、表目錄、行目錄等信息。存儲區中包括空閒區和行數據區。
數據塊標題:在標題中存儲著數據類型以及塊的物理位置等信息。表目錄:在一個數據塊中可以存儲多個表的數據。表目錄用於記錄數據塊中存儲了那些表。行目錄:用於記錄數據塊中各行的物理地址。
空閒區:當第一次分配數據塊的時候,他只有空閒區,沒有數據行。隨著行被插入,空閒區會越來越小。
行數據區:這是數據塊中存儲實際行的地方。
盤區:Oracle邏輯存儲中最小的單位是塊,盤區是由連續的數據塊集合構成的,而盤區構成了段,段又構成了表空間,表空間構成了數據庫。盤區數量和盤區大小可以在正在建立的對象的storage子句中規定。
initial.設置為對象建立地第一個盤區的大小,next.是隨後盤區的大小,minextents.這是立即分配的盤區數量。maxextents這是能夠為這個表建立的盤區的最大數量,它可以是一個數值或者unlimited就是無限制的盤區數量。
段:是表空間中一個指定類型的邏輯結構,它由一個或多個區組成,段將占用並增長存儲空間。
段的四種類型:數據段(data segment)存儲表中的所有數據;索引段(index segment):存儲表上最佳查詢的所有索引數據;臨時段(Temporary segment):存儲表排序操作期間建立的臨時表的數據。回滾段(rollback segment):存儲修改之前的位置和值,是Oracle的撤銷機制。
Oracle內存結構:分為SGA(System Global Area)系統全局區,PGA(Program Global Area)程序全局區,和UGA(User Global Area)用戶全局區。
SGA是全部用戶都可以訪問的實例的共享內存區域。用於存放數據庫數據和控制信息,以實現對數據庫數據的管理和操作。系統全局區包含的數據:緩存數據塊,在數據庫上執行的SQL語句,用戶執行的存儲過程、函數和觸發器等。SGA由DB高速緩存、共享池、重做日志緩存、大型池。
數據高速緩存database buffercache(DBC),DBC的作用:保存最近從數據文件中讀取的數據塊,其中的數據被所有用戶共享。
影響DBC的兩個參數(主要影響讀取效率):DB_BLOCK_SIZE緩沖區數據塊大小,DB_BLOCK_BUFFERS緩沖區數據塊個數。
DBC工作原理:在我們初次訪問數據時Oracle將讀取磁盤上的數據文件,將數據放入數據高速緩沖,在處理數據。如果數據已經位於數據高速緩存中,Oracle就可以直接操作數據。
共享池:保存了最近執行的SQL語句、PL/SQL程序和數據字典信息,是對SQL語句和PL/SQL程序進行語法分析、編譯、執行的內存區。
庫緩存區(library cache)包括:解析用戶進程提交的SQL語句或PL/SQL程序和保存最近解析過的SQL語句或PL/SQL程序。
數據字典區(dictionary cache)用於存放數據字典信息行。
重做日志高速緩存:用於存儲重做記錄的緩存。重做記錄並不是直接寫入磁盤的重做日志文件,而是先寫入重做日志緩存,當重做日志緩存中的重做記錄達到一定數量時,由lgwr(日志寫入進程)寫入重做日志(先內存後磁盤)
大型池:用於需要大內存操作提供相對獨立的內存空間,以便提高性能。
需要大型池的操作:數據庫備份和恢復,用於共享服務進程的會話內存(例如大量排序的SQL語句),並行化的數據庫操作等。
PGA是一類沒有共享的內存,它專用於特定的服務器進程,並且只能夠由這個進程訪問。
程序全局區由排序區,會話區,游標區,堆棧區組成
排序區:保存執行orderby、group by等包含排序操作的SQL語句時產生的臨時數據。會話區保存會話所具有的權限、角色、性能統計信息。游標區保存執行帶有游標(cursor)的PL/SQL語句時產生的臨時數據。堆棧區保存會話中的綁定變量、會話變量以及SQL語句運行時的內存結構信息。
PGA與SGA的區別:SGA系統全局去是對系統內的所有進程都是共享的,PGA是為了某個用戶進程所服務的。
Oracle進程結構:他的實例有兩種類型:單進程實例和多進程實例。
操作系統會使用多個進程來執行oracle的不同部分,並且對於每一個連接的用戶都有一個進程。oracle進程可分為兩種:用戶進程和Oracle進程,Oracle進程可以分為服務器進程和後台進程。
用戶進程:當用戶運行應用程序時,操作系統會為用戶運行的應用創建一個進程,那麼這個進程就是我們所說的用戶進程。用戶進程是一個需要和服務器交互的程序,當應用程序向數據庫服務器發送請求時,即創建用戶進程。
服務器進程:用於處理連接到該實例的用戶進程的請求。
當應用程序和ORACLE服務器在同一台機器上運行而不通過網絡來鏈接時,服務器一般將用戶進程和它相應的服務器進程組合成單個的進程,可以降低系統開銷。當不在同一台機器時,服務器進程將執行以下任務:1、對應用程序所發出的SQL語句進行語法分析和執行。2、從磁盤中讀入必要的數據塊到SGA的共享數據庫緩沖區。3、將結果返回給應用程序處理。
後台進程:是在實例啟動時啟動,啟動ORACLE數據庫的實例時會自動啟動後台進程。後台進程是為所有數據庫用戶異步完成各種任務。
主要的後台進程有:PMON,進程監控進程;SMON,系統監控進程;DBWR,數據庫寫入進程;LGWR,日志寫入進程;ARCH,歸檔進程;CKPT,檢查點;CJQO,作業隊列協調器;RECO,恢復進程。
PMON主要職責:1、監控服務器進程,以確保能夠銷毀發生損壞或者出現故障的進程,釋放他們的資源。2、在主機操作系統上使用Oracle監聽器注冊數據庫服務器。
SMON主要職責:1、在出現實例故障的情況下,SMON負責重新啟動系統,執行崩潰恢復。2、將會清除已經分配但還沒有釋放的臨時段。3、會在表空間管理中執行盤區結合。
DBWR主要職責:1、該進程將緩存區用戶所用的數據寫入數據文件。2、使用戶進程總是可以得到未使用的緩沖區。
LGWR主要職責:是向在線重做日志文件中記錄所用數據庫的已提交事務處理。日志寫入進程會在以下四種情況執行寫入操作:1、事務處理提交。2、重做日志緩存已經填充了1/3。3、重做日志緩存中的數據量達到了1M。4、每隔3秒時間。
ARCH主要職責:將重做日志的事物變化寫入歸檔日志。
CKPT主要職責:該進程在檢查點出現時,對全部數據文件的標題進行修改。
在通常情況下,檢查點進程是不啟動的它的工作由日志寫入進程LGWR執行,然而,如果檢查點明顯的降低系統性能時,CKPT進程就會運行,將原來由LGWR進行執行的檢查點的工作分離出來,由CKPT進程實現。
CJQ O主要職責:在Oracle中規劃將要在數據庫後台運行的進程或者作業。
RECO主要職責:在分布式數據庫環境中恢復進程自動恢復那些失敗的分布式事務。
實例和數據庫,實例是進程+內存結構,數據庫:數據文件+重做文件+控制文件+臨時文件。區別:Oracle實例是SGA和一組後台進程的組合。Oracle數據庫是指運城數據庫所需要的所有數據文件,Oracle服務啟動時先啟動實例,然後才裝載數據庫文件,也就是裝載數據庫。
用戶和模式和角色,Oracle中的用戶是用於登錄Oracle的命名賬號,用戶可以擁有自己的數據庫對象。模式是對用戶所創建的數據庫對象的總稱,在Oracle中任何數據庫對象都屬於一個特定用戶,一個用戶以及其所擁有的對象稱為模式。用戶和模式是一一對應的。角色,是一組相關權限的命名集合。使用角色的最主要的目的是建行權限管理。
數據字典和表,表時數據庫中用來存儲數據的對象,包含了行和列。列用來存儲表中特定數據行的數據屬性,行包含了在表定義中定義的列值。數據字典是用來記錄數據庫的系統信息;用戶不能修改數據字典的信息。數據表用來記錄用戶數據;數據表由用戶穿件可以被用戶修改。