數據庫存儲結構:分為物理存儲結構和邏輯存儲結構。
物理存儲結構:操作系統層面如何組織和管理數據
邏輯存儲結構:Oracle數據庫內部數據組織和管理數據,數據庫管理系統層面如何組織和管理數據
Oracle邏輯存儲結構 ? ?
數據庫的邏輯結構是從邏輯的角度分析數據庫的構成,即創建數據庫后形成的邏輯概念之間的關系。
邏輯存儲結構概述
概念
邏輯存儲結構是從邏輯的角度來分析數據庫的構成的,是數據庫創建后利用邏輯概念來描述Oracle數據庫內部數據的組織和管理形式。
在操作系統中,沒有數據庫邏輯存儲結構信息,而只有物理存儲結構信息。數據庫的邏輯存儲結構概念存儲在數據庫的數據字典中,可以通過數據字典查詢邏輯存儲結構信息。
邏輯結構單元類型
數據塊:BLOCK
區:EXTENT
段:SEGMENT
表空間:TABLESPACE?
數據庫邏輯和物理存儲對應關系
?
數據庫的存儲層次關系
?
數據塊(BLOCK)
數據塊的概念
最小的 I/O單元 ?? ? ? ?
數據塊是Oracle用來管理存儲空間的最基本單元,也是最小的邏輯存儲單元。Oracle數據庫在進行輸入輸出操作時,都是以塊為單位進行邏輯讀寫操作的。
包括一個或者多個OS BLOCK (操作系統數據塊)
分為標準塊和非標準塊
數據庫創建時,DB_BLOCK_SIZE參數設置標準塊大小8192B。
數據塊的大小由初始化參數DB_BLOCK_SIZE確定,在創建數據庫之后不可以修改。
塊大小的查看:
G:\app\oracle\product\12.2.0\dbhome_1\dbs\init.ora
操作系統路徑中Oraclehome下dbs文件夾下初始化參數文件中看到
show parameter db_block_size?
?數據庫塊結構
塊頭部包括標題塊頭、表目錄、行目錄三部分。
塊頭包含塊的一般屬性信息,如塊的物理地址、塊所屬段的類型等;
表目錄包含數據塊中保存的表的信息;
行目錄包含數據塊中的行地址等信息。
存儲區包括行數據區和空閑區兩部分。
行數據區是已經使用的空間,保存數據庫的對象數據; 空閑區是尚未使用的存儲空間,用于存放新的行或用來更新已存在的行。?
(盤)區
盤區是由一系列連續的數據塊構成的邏輯存儲單元,是存儲空間分配與回收的最小單位。
當創建一個數據庫對象時,Oracle為對象分配若干個區,以構成一個段來為對象提供初始的存儲空間。當段中已分配的區都寫滿后,Oracle會為段分配一個新區,以容納更多的數據。?
段
段的概述
段是由一個或多個連續或不連續的區組成的邏輯存儲單元。
數據庫模式對象在邏輯上是以段來占據表空間的大小。
段代表特定數據類型的數據存儲結構。
一個對象只擁有一個段,一個段至少包含一個區。
段不再是存儲空間的分配單位,而是一個獨立的邏輯存儲結構。段存于表空間中并且由盤區組成。?
段的類型:
數據段
索引段
臨時段
回滾段?
數據段
數據段用來存儲表或簇的數據,可以細分為普通表數據段、索引表數據段、分區表數據段及簇數據段四種。
索引段
用來存放索引信息,主要包括ROWID和索引鍵。 索引段與其相應的表段經常會被同時訪問,為了減少硬盤訪問的沖突,索引段與表段可以放到處于不同物理位置的表空間中。
臨時段
當用戶進行排序查詢時,如果在指定的內存無法完成排序,Oracle將自動從用戶默認的臨時表空間中指派臨時段進行排序。會話結束,數據將從臨時段中自動刪除。
回滾段
回滾段用于保存數據庫的回滾信息,包含當前未提交事務所修改的數據的原始版本。 一個事務只能使用一個回滾段存放它的回滾信息,但是一個回滾段可以存放多個事務的回滾信息。回滾段可以動態創建和撤銷。?
表空間
表空間是在Oracle中用戶可以使用的最大的邏輯存儲結構,用戶在數據庫中建立的所有內容都被存儲在表空間中。
Oracle數據庫在邏輯上可以劃分為一系列的邏輯空間,每一個邏輯空間就可以稱為一個表空間。
一個數據庫由有一個或多個表空間構成,不同表空間用于存放不同應用的數據,表空間大小決定了數據庫的大小。
一個表空間對應一個或多個數據文件,數據文件大小決定了表空間的大小。
一個數據文件只能從屬于一個表空間。
表空間是存儲模式對象的容器,一個數據庫對象只能存儲在一個表空間中(分區表和分區索引除外),但可以存儲在該表空間所對應的一個或多個數據文件中。
若表空間只有一個數據文件,則該表空間中所有對象都保存在該文件中;若表空間對應多個數據文件,則表空間中的對象可以分布于不同的數據文件中。?
數據庫、表空間、數據文件、數據庫對象之間的關系:
?
通過表空間,可以實現對數據庫存儲的管理:
控制整個數據庫占用空間的大小;
控制數據庫在磁盤上的分配,提高數據庫的I/O性能;
控制用戶所占用的存儲空間的大小。
表空間的分類
系統表空間
系統表空間——包括SYSTEM和SYSAUX SYSTEM 表空間,主要存儲:
數據庫的數據字典; PL/SQL程序的源代碼和解釋代碼,包括存儲過程、函數、包、觸發器等;
數據庫對象的定義,如表、視圖、序列、同義詞等。
SYSAUX表空間
SYSAUX表空間是Oracle 10g新增的輔助系統表空間,主要用于存儲數據庫組件等信息,以減小SYSTEM表空間的負荷。 在通常情況下,不允許刪除、重命名及傳輸SYSAUX表空間。?
非系統表空間
撤銷表空間
專門進行回滾信息的自動管理,由回滾段構成。一個數據庫可以有多個撤銷表空間,但每個數據庫實例只能使用一個。
由UNDO_TABLESPACE參數設置的撤銷表空間。 ?
初始化參數UNDO_MANAGEMENT=AUTO時,系統使用撤銷表空間自動進行回滾信息管理。
臨時表空間
專門進行臨時數據管理的表空間。 在數據庫實例運行過程中,執行排序等SQL語句時會產生大量的臨時數據,這些臨時數據將保存在數據庫臨時表空間中。 建議為數據庫單獨定義默認的臨時表空間。?
用戶表空間
保存用戶數據。
大文件表空間與小文件表空間
所謂大文件表空間(Bigfile Tablespace)是指一個表空間只包含一個大數據文件,該文件的最大尺寸為128 TB(數據塊大小為32 KB)或只32 TB(數據塊大小為8 KB)。
與大文件表空間相對應,系統默認創建的表空間稱為小文件表空間(Smallfile Tablespace),如SYSTEM表空間、SYSAUX表空間等。小文件表空間可以包含多達1024個數據文件。小文件表空間的總容量與大文件表空間的容量基本相似。
?表空間操作
創建表空間
例:為ORCL數據庫創建一個表空間
SQL> CREATE TABLESPACE ORCLTBS1 DATAFILE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ORCLTBS1_1.DBF' ? ? ?SIZE 50M;
例:為ORCL數據庫的ORCLTBS1表空間添加一個大小為10 MB的新數據文件。
SQL> ALTER TABLESPACE ORCLTBS1 ADD DATAFILE ? ? ?'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ORCLTBS1_2.DBF' ? ? ?SIZE 10M;
?修改表空間可用性
離線狀態的表空間是不能進行數據訪問的,所對應的所有數據文件也都處于脫機狀態。
一些表空間必須是在線狀態:
SYSTEM表空間
存放在線回退信息的撤銷表空間
臨時表空間
語法 ALTER TABLESPACE … ONLINE|OFFLINE 例:
SQL> ALTER TABLESPACE ORCLTBS1 OFFLINE;
SQL> ALTER TABLESPACE ORCLTBS1 ONLINE;
修改表空間讀寫性
語法:
ALTER TABLESPACE … READ ONLY|READ WRITE?
SQL> ALTER TABLESPACE ORCLTBS1 READ ONLY;
SQL> ALTER TABLESPACE ORCLTBS1 READ WRITE;
刪除表空間
語法 DROP TABLESPACE tablespace_name
說明:
如果表空間非空,應帶有子句INCLUDING CONTENTS
若要刪除操作系統下的數據文件,應帶有子句AND DATAFILES?