2020年9月16日 星期三

5.3 Tablespace 介紹

Tablespace(表格空間) 是 Oracle 資料庫用來存放資料的一個虛擬空間,我們可以將 Tablespace 視為一個盒子,資料庫裡面可以建立多個盒子然後把資料分門別類的放在這裡面。 Tablespace 大致上可以分為兩種類型, Small File Tablespace 與 Big File Tablespace。


  • Small File Tablespace: 


表示一個 Tablespace 可以由一個或多個實體的 Data File 所組成,一個 Small File Tablespace 最多可以有 (2 的 10 次方) -1 個 Data File,而每個 Data File 最多可以容納 (2 的 22 次方) 個 Block , Block以預設大小 8k 來換算的話,一個 Data File 最大可以到 32G。早期由於單一檔案大小受到作業系統限制,只有一個檔案大小的 Tablespace 是不足以容納所有的資料,也因此 Oracle 讓 Tablespace 能夠由多個 Data File 來組成,藉以擴充 Tablesapce 的空間。


Small File Tablespace 的好處是,因為是由多個 Data File 所組成,所以可以把這些 Data File 分別存放在不同的磁碟上,這樣就可以達到 I/O 分散的目的;另外一個好處是,當其中一個 Data File 有所損壞時,這個時候只會造成存放在這個 Data File 上面的資料無法使用或查詢, Tablespace 裡面其餘的資料還是可以做使用,不會因為單一個 File 損壞而造成整個 Tablespace 損毀。而缺點是 DBA 必須時常監控 Tablespace 以及所屬的 Data File 使用率,如果空間不足的話必須手動再為它增加 Data File。


  • Big File Tablespace: 


從 Oracle 10g 開始出現的新功能,表示一個 Tablespace 只能有一個 Data File 所組成,而這個 Data File 最大可以容納 (2 的 32 次方) 個 Block ,以預設大小 8k 來換算的話,一個 Data File 最大可以到 32T 。這種類型的 Tablespace 最大的缺點當然是只有一個 Data File ,若此 File 損壞就會造成整個 Tablespace 無法使用,而過大的單一 Data File 也有可能造成備份的效能不好;然而它的好處當然是可以減少 DBA 的負擔,只要作業系統上的硬碟空間足夠,基本上不太需要去關注 Tablespace 的空間使用率。


至於選擇 Small File 或是 Big File 哪種類型的 Tablespace 比較好,這並沒有一定的標準,主要還是看 DBA 的管理習慣而定,有些人習慣使用 Small File Tablespace ,而有些人為了管理上的方便選擇了 Big File 。然而值得注意的是, Tablespace 在建立的當下就必須選擇是要使用 Small File 或是 Big File ,一旦建立了就無法更改這個屬性。


Tablespace 建立的預設選項都是 Small File ,例如建立一個名為 TBS1 、大小為 100M 的 Tablespace:

SQL> create tablespace tbs1 datafile '/u01/app/oradata/orcl/tbs1_01.dbf' size 100M;


當 Tablespace 空間不足時可以為它增加 Data File 或是先將原本的 File Resize 擴充:

SQL> alter database datafile '/u01/app/oradata/orcl/tbs1_01.dbf' resize 512M;

(將原本的 file resize)

SQL> alter tablespace tbs1 add datafile '/u01/app/oradata/orcl/tbs1_02.dbf' size 512M;

(為原本的 Tablespace 增加 File)


另外也可以為 Data File 設定是否自動增長的選項,例如先建立 Data File大小為 100M 的 Tablespace ,當空間不足時請以 50M 為單位自動增長至 512M :

SQL> create tablespace tbs2 datafile '/u01/app/oradata/orcl/tbs2_01.dbf' size 100M autoextend on next 50M maxsize 512M;


如果不設定 next 的話預設是以 100M 為單位增長,不設定 maxsize 的話以 Small File Tablespace 來說,最大為 32G 。


如果要建立 Big File Tablespace 的話,則在建立的同時必須加上 bigfile 關鍵字,例如建立一個名為 btbs1 的 Big File Tablespace:

SQL> create bigfile tablespace btbs1 datafile '/u01/app/oradata/orcl/btbs1.dbf' size 100M autoextend on;


Tablespace 以種類來區分的話可以分為永久(Permanent Tablespace) 、還原(Undo Tablespace) ,與暫存(Temporary Tablespace)。 


Permanent Tablespace 即是一般儲存資料的 Tablespace ,像是 System Tablespace 、 Users Tablespace ,或是其他使用者自行建立的 Tablespace 例如上述例子中的 tbs1 、 tbs2 、 btbs1 都是屬於 Permanent Tablespace。


Undo Tablespace 只提供資料庫裡面的 Rollback Segment 所使用,不能在上面建立其他物件。


Temporary Tablespace 提供 Global Temporary Table 或是 SQL 執行過程中的排序行為所使用。


建立 Undo Tablespace 必須加上 undo 關鍵字:

SQL> create undo tablespace undotbs1 datafile '/u01/app/oradata/orcl/undotbs1_01.dbf' size 100M;


建立 Temporary Tablespace 則是須使用 temporary 與 tempfile 關鍵字:

SQL> create temporary tablespace temp1 tempfile '/u01/app/oradata/orcl/temp1_01.dbf' size 100M;


在資料庫建立完成時,預設會產生這幾個 Tablespace:


1. SYSTEM: 用來存放資料庫系統物件,為 sys 與 system 使用者所使用。由於是存放系統物件,因此 SYSTEM Tablespace 絕對不可以損壞,一但有問題會造成整個資料庫無法使用。


2. SYSAUX: 用來存放 AWR 相關的資料,可以由 v$sysaux_occupants 來查詢 SYSAUX 存放了哪些項目。 AWR 為 Oracle 10g 開始才有的新功能, Oracle 10g 之前的版本不會有 SYSAUX Tablespace 。


3. UNDOTBS1: 為 Undo Tablespace ,也視為系統 Tablespace 的一部分,Undo Tablespace 損壞也有可能會造成資料庫無法正常運行。


4. TEMP: 為 Temporary Tablespace 。


5. USERS: 系統預設的 Permanent Tablespace 。


一般來說,使用者要建立屬於自己的系統物件時會再建立新的 Tablespace 客製化所使用,很少會使用預設的 USERS 來當作應用系統(application) 所使用的 Tablespace 。




沒有留言:

張貼留言