oracle資料庫的邏輯構成(表空間,schema,user,段,區,塊)
本篇著重從資料庫的邏輯構成方面來說明oracle的體系結構,以及邏輯構成中所涉及的相關名詞的概念和相互間的關係。
1 名詞概念
資料庫
資料庫是由表空間組成的,我們可以建立資料庫併為其指定各種表空間.
Schema
database objectscontainer, 是資料庫物件(如tables,views,stored procedures等)的邏輯集合。對於一個大型的企業應用,最好針對不同的目的,使用不同的schema,比如,把HR相關的tables放在HR schema,賬號相關的tables放在Accountingschema. 為了區分各個集合,我們需要給這個集合起個名字,這些名字就是我們在EM方案下看到的許多類似使用者名稱的節點,這些類似使用者名稱的節點其實就是一個schema。一個使用者一般對應一個schema
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中的資料庫、使用者、方案、表空間、表物件之間的關係
ORACLE 中SCHEMA的概念以及資料庫,表空間,資料檔案等的區別
Tablespaces, Datafiles, and Control Files
oracle 體系結構
ORACLE表空間管理維護