一、Oracle 邏輯結構簡介
oracle的邏輯結構包括資料表空間(tablespace),段(segment),資料區塊(data block)以及模式對象(schema)。
oracle資料庫在邏輯上是由多個表間組成的,資料表空間中儲存的對象叫段,比如資料區段,索引段,和回退段。段由區組成,區是磁碟分配的最小單位。段的增大是通過增加區的個數來實現的。每個區的大小是資料區塊大小的整數倍,區的大小可以不相同;資料區塊是資料庫中最小的I/O單位,同時也是記憶體資料緩衝區的單位,及資料檔案儲存空間單位。塊的大小由參數DB_BLOCK_SIZE設定,其值應設定為作業系統塊大小的整數倍。
資料表空間在物理上包含一個或多個資料檔案。而資料檔案大小是塊大小的整數倍;
二、資料表空間
資料表空間是Oracle資料庫最大的邏輯結構,一個Oracle資料庫在邏輯上由多個資料表空間組成,一個資料表空間只隸屬於一個資料庫。Oracle中有一個稱為SYSTEM的資料表空間,這個資料表空間是在建立或安裝資料庫時自動建立的。主要用於儲存系統的資料字典,過程,函數,觸發器等;也可以儲存使用者的表,索引等。
前面我們說過要查詢資料表空間可以通過
SQL>select * form dba_data_files;
要查詢資料表空間的空閑資訊可以通過
SQL>select * from dba_free_space;
資料表空間有線上(online)或離線(offline)之說,一旦我們將資料表空間設定成離線的狀態,則所有對該資料表空間內對象的修改將無法同步到資料檔案中。我們可以將除SYSTEM和RBS資料表空間之外的其它資料表空間設定成離線狀態。命令如下:
SQL>alter tablespace *** offline;
如果我們想限制某個使用者能夠使用的資料表空間的大小,則我們可以通過命令:
SQL>alter user *** quota ***m on ***
這表示我們要限制某個指定使用者的資料表空間使用限額為***M,on之後的參數就是要限制的資料表空間
暫存資料表空間用於為使用者排序的ORDER BY語句使用。建立資料庫時可以指定資料庫的預設暫存資料表空間。在建立使用者的時候可以指定使用者的預設暫存資料表空間。例如下句就指定temp為使用者的暫存資料表空間。
SQL>CREATE USER *** IDENTIFIED BY **** TEMPORARY TABLESPACE temp;
三、段
Oracle中的段可以分成4種類型:資料區段、索引段、復原段、臨時段。
資料區段用來儲存使用者的資料,每個表都有一個對應的復原段,其名稱和資料表的名字相同。我們可以用下列的SQL語句來查詢使用者的資料區段資訊:
SQL>select * from user_extents;
索引段用來儲存系統、使用者的索引資訊:
SQL>select * from all_indexs / user_indexs;
復原段用來儲存使用者資料修改前的值,回退段與事務是一對多的關係,一個事務只能使用一個回退段,而一個回退段可存放一個或多個事務的回退資料。
臨時段用於order by語句的排序以及一些匯總。
四、區
區是磁碟空間分配的最小單位。磁碟按區劃分,每次至少分配一個區。區儲存於段中,它由連續的資料區塊組成。
區的分配過程中,每次至分配5個區。如果所剩的空閑空間不夠5個區,就會出現錯誤:ORA-01653。
可以通過字典dba_tablespaces查詢資料表空間中區的資訊。可以通過字典user_tables查詢段中區的資訊。可以通過字典user_extents查詢區的分配狀況。
SQL>select * from dba_tablespaces;
通過這個查詢我們可以看到各個資料表空間的:
·BLOCK_SIZE :資料區塊的大小
·INITIAL_EXTENT :初始化時分配的區的大小,其值為BLOCK_SIZE的整數倍
·NEXT_EXTENT:當初始化時分配的區不夠時,下一次擴充的區的大小
·MIN_EXTENTS:區大小的下限
·MAX_EXTENTS:區大小的上限
我們可以通過以下SQL語句分別查詢資料表空間、段、區中區的分配資訊
SQL>select * from dba_tablespaces;
SQL>select table_name, tablespace_name, min_extents, max_extents from user_tables;
SQL>select * from user_extents;
五、資料區塊
資料區塊是資料中中最小的資料群組織單位與管理單位,是資料檔案磁碟儲存空間單位,也是資料庫I/O 的最小單位,資料區塊大小由DB_BLOCK_SIZE參數決定,不同的oracle版本DB_BLOCK_SIZE的預設值是不同的。
六、模式對象(Schema Object)
Oracle 模式對象包括了表,索引,約束,過程,函數,觸發器等等應用結構。我們可以通過以下語句查詢資料表空間或目前使用者下的所有schema對象:
SQL>select * from dba_source;
SQL>select * from user_source;