一、資料庫(Database)
資料庫是一個資料的集合,不僅是指實體上的資料,也指實體、存儲及程序對象的一個組合。Oracle是關系型資料庫管理系統(RDBMS)。
二、執行個體(Instance)
資料庫執行個體(也稱為伺服器Server)就是用來通路一個資料庫檔案集的一個存儲結構及背景程序的集合。它使一個單獨的資料庫可以被多個執行個體通路(也就是ORACLE并行伺服器-- OPS)。執行個體和資料庫的關系如下:
----------------------------------------------------------------------------
| 執行個體1 SGA+程序 | 執行個體2 SGA+程序 |
----------------------------------------------------------------------------
| 資料庫(一組資料檔案) |
----------------------------------------------------------------------------
決定執行個體的組成及大小的參數存儲在init<sid>.ora檔案中。
三、内部結構
表、列、資料類型(Table、Column、Datatype):Oracle中是以表的形式存儲資料的,它包含若幹個列;列是表的屬性的描述;列由資料類型和長度組成;Oracle中定義的資料類型主要有CHAR、VARCHAR2、NUMBER、DATE、LONG、LOB、BFILE等
限制條件(Constraint) :表中以及表間可以存在一些資料上的邏輯關系、限制,也就是限制。Oracle中的限制主要有主鍵(PK)、外鍵(FK)、檢查(CHECK)、唯一性(UNIQUE)等幾種;擁有限制的表中每條資料均必須符合限制條件。
抽象資料類型(Abstract Datatype):可以利用CREATE TYPE指令建立自定義的抽象資料類型。
分區(Partition):可以利用分區将大表分隔成若幹個小的存儲單元,邏輯上仍然是一個完整的獨立單一實體,以減小通路時資料的查找量,提高通路、存儲效率。
使用者(User):使用者不是一個實體結構,但是它與資料庫的對象擁有非常重要的關系--使用者擁有資料庫對象,以及對象的使用權。
模式(Schema):使用者帳号擁有的對象集合稱為模式。
索引(Index):資料庫中每行記錄的實體位置并不重要,Oracle為每條記錄用一個ROWID來辨別,ROWID記錄了記錄的準确位置。索引是供使用者快速查找到記錄的資料庫結構。ORACLE8中有簇索引、表索引、位圖索引三種索引形式。
簇(Cluster):經常被頻繁引用的表可以在實體位置上被存儲在一起,簇就是用來管理這種集中存儲的。集中存儲可以減少I/O次數,以達到性能的改善和提高。
散列簇(Hash Cluster):簇的另一種形式,這種簇中的資料要通過散列函數計算得出實體位置,它可以極大程度的提高等值查詢的效率。
視圖(View):可以了解為固化的查詢或者沒有資料存儲的表,它是一組表的查詢結果集合,對應用來說是獨立的結構,除沒有資料存儲以外,擁有和表同樣的屬性。
序列(Sequence):一個唯一數值的序列生成器,它每次被引用後,自動遞增。
過程、函數(Procedure、Function):編譯存儲在資料庫中的一個PL/SQL程式段,可以被引用。函數傳回調用者一個值,過程則不傳回任何值。
包(Package):函數、過程的集合。包中可以包含不同的元素,可以是公有的也可以是私有的。
觸發器(Trigger):觸發器是一些過程或PL/SQL程式段,當一個特定的事件發生時,就會自動引發這些過程的執行。
同義詞(Synonyms):在分布式資料庫環境中,要完全識别一個對象,必須指出對象的主機、屬主等資訊,為了簡化這一過程,可以對這些對象建立同義詞,引用這些同義詞時系統自動轉義成對原始對象的引用。
權限、角色(Privilege、Role):為了引用資料庫的對象,必須擁有這些對象的相應權限,角色是這些權限的集合,例如--DBA就是一個角色,它包括一組資料庫權限。
資料庫鍊路(Database Link):引用其他資料庫的資料時,需要指明詳細路徑,鍊路就是詳細路徑的識别名。
四、内部存儲結構
系統全局區(System Global Area,SGA):包括--資料塊緩沖存儲區(Data Block Buffer Area)、字典緩沖區(Dictionary Cache)、日志緩沖區(Redo Log Buffer)、SQL共享池(Shared SQL Pool)四部分。
正文區間(Context Area):每個使用者都擁有自己的私有SQL區域,儲存相關的SQL語句,直到語句相關的光标關閉為止。
程式全局區(Program Global Area,PGA):它是存儲區中被單個使用者程序所使用的區域,PGA不能共享。
五、背景程序(BACKGROUND PROCESSES)
系統監控(SMON):用以取消系統不再需要的事物對象以及清理資料庫。
程序監控(PMON):清除使用者失敗後的背景程序,并釋放程序所占用的資源。
資料庫寫入程序(DBWR):管理資料塊緩沖區及字典緩沖區的内容。
日志寫入程序(LGWR):将日志緩沖區的内容寫到日志檔案中。
檢查點程序(CKPT):用來減少執行個體恢複所需的時間。
歸檔程序(ARCH):負責在歸檔模式下,将日志備份到相關位置。
RECO程序:用于分布式資料庫中的失敗處理。
快照程序(SNPn):用來管理快照的重新整理。
背景程序(LCKn):當ORACLE以并行伺服器方式進行時,背景程序用來解決内部執行個體的鎖定問題。
Dnnn程序:在MTS模式下,用來減少多重連接配接所需的資訊源。
伺服器程序Sever(Snnn):用來管理需要專用伺服器的資料庫的連接配接。
六、外部結構
包括:日志檔案、控制檔案、跟蹤檔案與修改日志。
七、一個簡單資料庫的組成
一個或多個資料檔案
一個或多個控制檔案
兩個或多個聯機日志檔案
多個使用者/模式
一個或多個復原段
一個或多個表空間
資料字典表
使用者對象(表、視圖、索引等)
一個SGA區
SMON程序
PMON程序
DBWR程序
LGWR程序
與使用者程序相關的PGA區
一個執行個體在其生存期中最多隻能裝載和打開一個資料庫。要想再打開這個(或其他)資料庫,必須先丢棄這個執行個體,并建立一個新的執行個體。 重申一遍:執行個體是一組背景程序和共享記憶體。 資料庫是磁盤上存儲的資料集合。 執行個體“一生”隻能裝載并打開一個資料庫。 資料庫可以由一個或多個執行個體(使用 RAC)裝載和打開。 前面提到過,大多數情況下,執行個體和資料庫之間存在一種一對一的關系。可能正因如此,才導緻人們很容易将二者混淆。從大多數人的經驗看來,資料庫就是執行個體,執行個體就是資料庫。 不過,在許多測試環境中,情況并非如此。在我的磁盤上,可以有5個不同的資料庫。測試主機上任意時間點隻會運作一個 Oracle 執行個體,但是它通路的資料庫每天都可能不同(甚至每小時都不同),這取決于我的需求。隻需有不同的配置檔案,我就能裝載并打開其中任意一個資料庫。在這種情況下,任何時刻我都隻有一個“執行個體”,但有多個資料庫,在任意時間點上隻能通路其中的一個資料庫。是以,你現在應該知道,如果有人談到執行個體,他指的就是 Oracle 的程序和記憶體。提到資料庫時,則是說儲存資料的實體檔案。可以從多個執行個體通路一個資料庫,但是一個執行個體一次隻能通路一個資料庫。