表空間屬性:
一個資料庫可以包含多個表空間,一個表空間只能屬於一個資料庫;
一個表空間包含多個資料檔案,一個資料檔案只能屬於一個表空間。
表這空間可以劃分成更細的邏輯儲存單元
Oracle 資料庫的儲存結構:
從邏輯的角度來看, 一個資料庫( database )下面可以分多個表空間( tablespace );一個表空間下面又可以分多個段( segment ),一個資料表要佔一個段( segment );一個索引也要佔一個段( segment )。
一個段(segment)由多個區間(extent)組成,那麼一個區間由一組連續的資料塊(data block)組成。這連續的資料塊是在邏輯上是連續的,有可能在物理磁碟上是分散。
那麼從物理的角度上看,一個表空間由多個資料檔案組成,資料檔案是存在磁碟上的檔案。這些檔案是由 oracle 資料庫作業系統的 block 組成的。
Segment (段):段是指佔用資料檔案空間的通稱,或資料庫物件使用的空間的集合;段可以有表段、索引段、回滾段、臨時段和快取記憶體段等。
Extent (區間):分配給物件(如表)的任何連續塊叫區間;區間也叫擴充套件,因為當它用完已經分配的區間後,再有新的記錄插入就必須在分配新的區間(即擴充套件一些塊);一旦區間分配給某個物件(表、索引及簇),則該區間就不能再分配給其它的物件。
檢視錶空間:
SQL> select * from v$tablespace; TS# NAME INC BIG FLA ENC ---------- ------------------------------ --- --- --- --- 0 SYSTEM YES NO YES 1 SYSAUX YES NO YES 2 UNDOTBS1 YES NO YES 4 USERS YES NO YES 3 TEMP NO NO YES 6 EXAMPLE YES NO YES 7 ITPUX YES NO YES 7 rows selected.
檢視每個表空間有哪些資料檔案
SQL> select file_name,tablespace_name from dba_data_files; FILE_NAME TABLESPACE_NAME -------------------------------------------------- ------------------------------ /oracle/app/oracle/oradata/orcl/users01.dbf USERS /oracle/app/oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 /oracle/app/oracle/oradata/orcl/sysaux01.dbf SYSAUX /oracle/app/oracle/oradata/orcl/system01.dbf SYSTEM /oracle/app/oracle/oradata/orcl/example01.dbf EXAMPLE /oracle/app/oracle/oradata/orcl/itpux.dbf ITPUX 6 rows selected.
建立一個表空間:
SQL> create tablespace itpux datafile '/oracle/app/oracle/oradata/orcl/itpux.dbf' size 20m;
表空間根據對區間(extents)的管理分為兩種型別
字典管理表空間(Dictionary-managed tablespaces)
在表空間裡,有的區間被佔用了,有的沒被佔用,這些資料是放在資料字典裡的。當你對這個表空間進行分配或釋放的時候,資料檔案裡相關的表就會做修改。
本地管理表空間(locally managed tablespace)
本地管理表空間不是在資料詞典裡儲存表空間的,由自由區管理的表空間。用點陣圖來自由的管理區間。一個區間對一個位,如果這個位是 1 表示已經被佔用,0 表示未被佔用。詞典管理空間表示“中央集權治”,本地管理表空間表示“省市自治區”,一個 databases 表示中國,tablespaces 表示一個省或直轄市。詞典管理統一由中央調配。而本地管理表示有高度的自治權利,自已各種資源的分配不用上報中央。
本地管理優點
1. 本地化管理的表空間避免了遞迴的空間管理操作。而這種情況在資料字典管理的表空間是經常出現的,當表空間裡的區的使用狀況發生改變時,資料字典的表的資訊發生改變,從而同時也使用了在系統表空間裡的回滾段。
2. 本地化管理的表空間避免了在資料字典相應表裡面寫入空閒空間、已使用空間的資訊,從而減少了資料字典表的競爭,提高了空間管理的併發性。
3. 區的本地化管理自動跟蹤表空間裡的空閒塊,減少了手工合併自由空間的需要。
4. 表空間裡的區的大小可以選擇由 Oracle 系統來決定,或者由資料庫管理員指定一個統一的大小,避免了字典表空間一直頭疼的碎片問題。
5. 從由資料字典來管理空閒塊改為由資料檔案的頭部記錄來管理空閒塊,這樣避免產生回滾資訊,不再使用系統表空間裡的回滾段。因為由資料字典來管理的話,它會把相關資訊記在資料字典的表裡,從而產生回滾資訊。
由於這種表空間的以上特性,所以它支援在一個表空間裡邊進行更多的併發操作,並減少了對資料字典的依賴。
資料庫中預配置的表空間
01、SYSTEM 表空間
Oracle 伺服器使用 SYSTEM 表空間管理資料庫。這個表空間包含的資料字典和表中包含關於資料庫的管理資訊。上述資訊均包含在 SYS 方案中,只有 SYS 使用者或者擁有所需許可權的其它管理使用者才可訪問這些資訊。
02、SYSAUX 表空間
這是 SYSTEM 表空間的輔助表空間。Oracle DB 早期版本中某些使用 SYSTEM 表空間儲存系統表空間的元件和產品,現在改為使用 SYSAUX 表空間。每個 Oracle Database 10g(或更高版本)資料庫都必須擁有 SYSAUX 表空間。
如果 SYSAUX 表空間不可用時, 資料庫的核心功能還是可以繼續執行的,只是一些存放在 SYSAUX 表空間裡的功能會有限制
我們不能使用 alter tablespace 來修改這個表空間的屬性,同樣也不能 drop 和 rename SYSAUX 表空間。
03、TEMP:如果執行的 SQL 語句需要建立臨時段(如大規模排序或建立索引),則需要使用臨時表空間,臨時表空間主要用途是在資料庫進行排序運算、管理索引、訪問檢視等操作時提供臨時的運算空間,當運算完成之後系統會自動清理。Oracle 的臨時表空間建立之後基本不佔用表空間。
正常來說,在完成 Select 語句、 create index 等一些使用 TEMP 表空間的排序操作後, Oracle 是會自動釋放掉臨時段的。
注意這裡的釋放,僅僅是將這些空間標記為空閒,並可重用,真正佔用的磁碟空間並沒有釋放。 所以 Temp 表空間可能會越來越大。排序是很耗資源的, Temp 表空間滿了,關鍵是優化你的語句,儘量使排序減少才是上策.
建立臨時表空間:
SQL>create temporary tablespace temp datafile '/oracle/product/oradata/itpuxdb/itpux02.dbf' size 20m extent management local uniform size 4m;
04、UNDOTBS1:這是資料庫伺服器用於儲存還原資訊的還原表空間。如果資料庫使用“自動還原管理”,那麼資料庫在任何指定時間只能使用一個還原表空間。此表空間是在建立資料庫時建立的。
Undo 型別的表空間,當你對一張表或一條記錄進行修改的時候,它會對修改之前的資訊進行儲存,這樣可以保證資料的回滾。Undo 只包含 undo 型別的物件,不能包含任何其他物件,只適合於資料檔案和區間管理。
建立 undo 型別的表空間:
SQL>create undo tablespace undo1 datafile '/oracle/product/oradata/itpuxdb/itpux01.dbf' size 20m;
05、USERS:此表空間用於儲存使用者物件和資料。如果在建立使用者時未指定預設的表空間,則 USERS 表空間將成為該使用者建立的所有物件的預設表空間。對於 SYS 和 SYSTEM 使用者,預設的永久表空間是 SYSTEM。
06、EXAMPLE:此表空間包含建立資料庫時可以安裝的示例方案。這些示例方案為各種示例提供了一個通用平臺。在 Oracle 文件和課件中包含了建立在這些示例方案基礎上的示例。
注:為簡化管理,通常為索引使用單獨的表空間。
刪除表空間:
刪除表空間,使用命令 drop tablespace ‘表空間名’ 但是有 3 個選項需要注意:
INCLUDING CONTENTS:指刪除表空間中的 segments;
INCLUDING CONTENTS AND DATAFILES:指刪除 segments 和 datafiles;
CASCADE CONSTRAINTS:刪除所有與該空間相關的完整性約束條件。
例:
DROP TABLESPACE ITPUX ‘表空間名’ CONTENTS AND DATAFILES CASCADE CONSTRAINTS;