天天看點

oracle 資料庫和資料庫執行個體的差別

一、資料庫(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 的程序和記憶體。提到資料庫時,則是說儲存資料的實體檔案。可以從多個執行個體通路一個資料庫,但是一個執行個體一次隻能通路一個資料庫。