本篇着重從數據庫的邏輯構成方面來說明oracle的體系結構,以及邏輯構成中所涉及的相關名詞的概念和相互間的關係。
1 名詞概念
數據庫
數據庫是由表空間組成的,我們可以創建數據庫併爲其指定各種表空間.
Schema
database objectscontainer, 是數據庫對象(如tables,views,stored procedures等)的邏輯集合。對於一個大型的企業應用,最好針對不同的目的,使用不同的schema,比如,把HR相關的tables放在HR schema,賬號相關的tables放在Accountingschema. 爲了區分各個集合,我們需要給這個集合起個名字,這些名字就是我們在EM方案下看到的許多類似用戶名的節點,這些類似用戶名的節點其實就是一個schema。一個用戶一般對應一個schema,該用戶的schema名等於用戶名,並作爲該用戶缺省schema。Oracle數據庫中不能直接新建一個schema,要想創建一個schema,只能通過創建一個用戶來解決,在創建一個用戶的同時爲這個用戶創建一個與用戶名同名的schema作爲該用戶的缺省schema。一個用戶有一個缺省的schema,其schema名就是用戶名。當然一個用戶還可以使用其他的schema,需要其它schema屬主的授權。當我們訪問一個表時,沒有指明該表屬於哪個schema,系統會自動給我們的表加上缺省的schema名,比如,訪問scott用戶的employee表,select * from emp,完整的寫法是 select * from scott.emp。一個數據庫對象的完整名稱是 schemaname.objectname,而不是user.objectname.
User
a user is a namedefined in the database that can connectto and access objects.
Schema 和 user 都是用於DBA管理數據庫安全的。
表空間
邏輯上用來放objects,物理上對應磁盤上的數據文件或裸設備。每個表空間可以容納許多表、索引、簇等,表空間。本質上是一個或者多個數據文件的集合。當表空間被使用完時,可以通過增加數據文件數量或者擴大已經存在的數據文件來擴展表空間。
數據文件:具體存儲數據的物理文件,是一個物理概念。一個數據文件只屬於一個表空間,一個表空間可以包含多個數據文件,
一個數據庫由多個表空間組成,一個表空間只屬於一個數據庫。
2 名詞之間的關係
關於上述名詞概念,有一個比較形象的解釋:
Database可以看做一個大倉庫,倉庫分了很多的房間,就是schema,table是schema房間中的一張牀,牀上可以放很多物品,就像table裏放置很多行和列一樣。數據庫中存儲數據的基本單元是table。User是每個schema的主人,user和schema一一對應,每個user沒有特別指定時只能使用自己房間(schema)的東西。如果一個user想使用其他房間(schema)的東西,得看那個房間(schema)的主人有沒有給你這個權限。或者倉庫老大(DBA)有沒有給你這個權限。如果你是倉庫的主人(DBA),你就有完全的操作權,如,扔掉不用的東西,也可以放置一些有用的東西到某個房間,還可以給User分配權限,也就是他倒某一個房間可以做什麼,是隻能看(Read-Only),還是可以像主人一樣有控制權(R/W),取決於這個user所對應的Role。
2.1 表空間和schema
Schema是數據庫對象的邏輯歸屬和分類,表空間是數據庫對象的物理和實際存放位置。
因此,schema和表空間之間沒有關係。一個schema裏的objects可以存儲在不同的表空間裏,一個表空間裏也可以存儲不同schema的objects。
2.2 User和schema
User 主要是用來連接和訪問數據庫,schema是數據庫對象的邏輯歸類劃分。Schema可以看做是user的別名,user其實也可以承擔對對象的邏輯歸類。所以用戶的默認schema是和user同名的。Schema的創建只能通過創建user來完成,當數據庫創建一個用戶後,這時還沒有schema存在。只有當這個用戶創建了屬於自己的第一個對象時,oracle爲這個用戶創建一個schema,來容納這個對象以及以後創建的對象。
2.3 表空間、數據文件、schema對象
這個圖說明的比較清晰明瞭:
3 Oracle一個數據庫的結構
實例->用戶->表(用戶屬於數據庫實例,表屬於某個用戶)
這個結構的創建過程如下:
--創建表空間
Create tablespcespace1
Logging
Datafile ‘D:\Oraclexe\app\datafile1.dbf’
Size 32m
Autoextend on
Next 32mmaxsieze 2048m
Extentmanagement local;
--創建用戶並指定表空間
Create USERsisi(用戶名) identity by 123456(密碼)
Defaulttablespace space1(表空間名)
Temporarytablespace temp(表空間名)
Quato (限額);
--爲用戶賦予權限
Grant connect,resource to sisi;
Grant createsession to sisi;
--登錄用戶
Sql>conn sisi/123456
--建立表
Create tableA(name varchar(100) primary key);
3.1 oracle表空間結構
在oracle數據庫中,所有數據從邏輯結構上看都存放在表空間,表空間下還有段、區、塊等邏輯結構,物理結構上就是由OS file組成。如下圖所示:
3.1.1 段(segment)
段,oracle數據庫中的分配單位,對象如表、索引等都是以段爲單位分配。當創建一個表時將創建一個表段,創建一個索引時就創建一個索引段。每一個消耗存儲空間的對象最終都被存儲到一個單一的段中。段與數據庫對象一一對應。段是從數據庫存儲角度來看的。一個段只能屬於一個表空間,當然一個表空間可以有多個段。段不直接和數據文件發生關係,一個段可以屬於多個數據文件,段可以指定擴展到哪個數據文件上面。
有回滾段、臨時段、聚簇段、索引段等。
一個段可以有多個區。
3.1.2 區(extent)
區,是數據文件中一個連續的分配空間,由塊組成,是爲數據一次性預留的一個較大的存儲空間,直到哪個區間被用滿,數據庫會繼續申請一個新的預留存儲空間,即新的區,一直到段的最大區間數(max extent)或沒有可用的磁盤空間可申請。Oracle建議把數據分佈在儘量少的區間上,減少oracle的管理與磁頭移動。
3.1.3 塊(block)
塊,Oracle最基本的存儲單位,是OS數據塊的整數倍。塊的大小在數據庫創建時已經固定下來,一般是2kb、4kb、8kb。數據庫中每個塊的大小都是相同的,而且所有的塊都有相同的格式,由【塊頭+表目錄+行目錄+空閒空間+數據空間】組成。
塊頭,包含着塊類型(表塊還是索引塊)、磁盤上塊的位置等信息
表目錄,如果有的話,包含此塊中存儲各行的表的信息(如果一個塊中存有多個表中的數據)。
行目錄,數據行的描述信息,是一個指針數組,指示了每一行在數據塊中的物理位置。
塊頭,表目錄,行目錄,統稱爲塊開銷,用來統計和管理塊。
已經存有數據的就是數據空間,暫時沒有的就是空閒空間。
3.2 系統默認創建的基本表空間
系統中默認創建的幾個表空間:
SYSTEM 主要存放數據字典和內部系統表 基表
SYSAUX
USERS
UNDOTBS1
EXAMPLE
TEMP
其中,系統必須表空間是SYSTEM,SYSAUX,TEMP,UNDO
3.3 表空間分類
永久表空間 存放永久性數據,如表,索引等
臨時表空間 保存數據排序,分組時產生的臨時數據,會在下次系統啓動時全被釋放
UNDO表空間 保存數據修改前的鏡像
UNDO表空間作用:
1) 回滾段的作用
數據庫進行更新插入刪除等操作的時候,新的數據被更新到原來的數據文件,而舊的數據就被放到回滾段中,如果數據需要回滾,那麼可以從回滾段將數據再複製到數據文件中。實現數據的回滾。在系統恢復時,回滾段可以用來回滾沒有被commit的數據,保證系統的一致性。
回滾段在什麼情況下都是大量的寫,少量讀,因此建議把回滾段單獨出來放在一個單獨設備,堅持磁盤IO爭用。
2) 回滾段工作方式
回滾段表空間可以劃分成多個回滾段
一個回滾段可以保存多個會話的數據
回滾段是一個圓形的數據模型
假設回滾段由4個區間組成,使用順序就是區間1->區間2->區間3->區間4->區間1。循環使用,當區間4到區間1時,區間1的會話還沒有結束,區間4用完後就不使用區間1,系統必須分配區間5,來繼續爲其它會話服務。
3) 一個Update的例子
A. 用戶提交一個update語句
B. Server process 檢查內存緩存,如果沒有該數據庫的緩存,從磁盤讀入
如果沒有內存的有效空間,DBWR被啓動將爲寫入磁盤的髒緩存寫入磁盤
如果有有效內存空間,則讀入
C. 在緩衝內更新數據
申請一個回滾段入口,將舊數據寫入回滾段
加鎖更新數據
同時將修改記錄在redo logbuffer中
4 參考資料
oracle中的數據庫、用戶、方案、表空間、表對象之間的關係
http://blog.csdn.net/blognkliming/article/details/7613189
http://www.cnblogs.com/cici-new/archive/2012/12/25/2831740.html
ORACLE 中SCHEMA的概念以及數據庫,表空間,數據文件等的區別
http://langgufu.iteye.com/blog/1469055
Tablespaces, Datafiles, and Control Files
oracle 體系結構
http://blog.csdn.net/wanghai__/article/details/4683983
ORACLE表空間管理維護
http://www.cnblogs.com/kerrycode/p/3418694.html