Oracle表空間介紹
Oracle培訓教程:表空間,在資料庫系統中,儲存空間是較為重要的資源,合理利用空間,不但能節省空間,還可以提高系統的效率和工作效能。Oracle可以存放海量資料,所有資料都在資料檔案中儲存。而資料檔案大小受作業系統限制,並且過大的資料檔案對資料的存取效能影響非常大。同時Oracle是跨平臺的資料庫,Oracle資料可以輕鬆的在不同平臺上移植,那麼如何才能提供統一存取格式的大容量呢?Oracle採用表空間來解決。
表空間只是一個邏輯概念,若干作業系統檔案(檔案可以不是很大)可以組成一個表空間。表空間統一管理空間中的資料檔案,一個數據檔案只能屬於一個表空間。一個數據庫空間由若干個表空間組成。如圖所示:
圖1 資料空間、表空間和資料檔案
Oracle中所有的資料(包括系統資料),全部儲存在表空間中,常見的表空間有:
·系統表空間:存放系統資料,系統表空間在資料庫建立時建立。表空間名稱為SYSTEM。存放資料字典和檢視以及資料庫結構等重要系統資料資訊,在執行時如果SYSTEM空間不足,對資料庫影響會比較大,雖然在系統執行過程中可以通過命令擴充空間,但還是會影響資料庫的效能,因此有必要在建立資料庫時適當的把資料檔案設定大一些。
·TMEP表空間:臨時表空間,安裝資料庫時建立,可以在執行時通過命令增大臨時表空間。臨時表空間的重要作用是資料排序。比如當用戶執行了諸如Order by等命令後,伺服器需要對所選取資料進行排序,如果資料很大,記憶體的排序區可能裝不下太大資料,就需要把一些中間的排序結果寫在硬碟的臨時表空間中。
·使用者表自定義空間:使用者可以通過CREATE TABLESPACE命令建立表空間。
建立表空間需要考慮資料庫對分割槽(Extent,一個Oracle分割槽是資料庫檔案中一段連續的空間,Oracle分割槽是Oracle管理中最小的單位)的管理,比如當一個表建立後先申請一個分割槽,在Insert執行過程中,如果分割槽資料已滿,需要重新申請另外的分割槽。如果一個數據庫中的分割槽大小不一,建立表空間時需要考慮一系列問題。因此在Oracle8i之後,建立表空間都推薦使用“本地管理表空間”,這種表空間中的分割槽是一個固定大小的值,建立表空間的語法是:
語法結構:建立表空間
CREATE TABLESPACE 空間名稱 DATAFILE '檔名1' SIZE 數字M [,'檔名2' SIZE 數字….] EXTENT MANAGEMENT LOCAL UNIFORM SIZE 數字M |
語法解析:
1. 檔名包括完整路徑和檔名,每個資料檔案定義了檔案的初始大小,初始大小一般以“M”為單位。一個表空間中可以有多個數據檔案。
2. EXTENT MANAGEMENT LOCAL指明表空間型別是:本地管理表空間。本地管理表空間要求Oracle中的資料分割槽(Extent)大小統一。
3. UNIFORM SIZE:指定每個分割槽的統一大小。
案例5:建立一個表空間,包含兩個資料檔案大小分別是10MB,5MB,要求extent的大小統一為1M。
程式碼演示:建立表空間
SQL> CREATE TABLESPACE MYSPACE 2 DATAFILE 'D:/A.ORA' SIZE 10M, 3 'D:/B.ORA' SIZE 5M 4 EXTENT MANAGEMENT LOCAL 5 UNIFORM SIZE 1M 6 / Tablespace created |
必須是管理員使用者才能建立表空間,當表空間的空間不足時可以使用ALTER TABLESPACE命令向表空間中追加資料檔案擴充表空間。
程式碼演示:擴充表空間
SQL> ALTER TABLESPACE MYSPACE 2 ADD DATAFILE 'D:/C.ORA' SIZE 10M 3 / Tablespace altered |
表空間可以在不使用時刪除,使用DROP TABLESPACE命令。
資料庫的所有資料全部在某一表空間中存放,在建立使用者時,可以為使用者指定某一表空間,那麼該使用者下的所有資料庫物件(比如表)預設都儲存在該空間中。
程式碼演示:為某一使用者指定預設表空間
SQL> CREATE USER ACONG IDENTIFIED BY ACONG 2 DEFAULT TABLESPACE MYSPACE 3 / User created |
在建立表時,表中資料存放在使用者的預設表空間中,也可以通過tablespace子句為表指定表中資料存放在其他表空間中。
程式碼演示:為表指定表空間
SQL> CREATE TABLE SCORES 2 ( 3 ID NUMBER , 4 TERM VARCHAR2(2), 5 STUID VARCHAR2(7) NOT NULL, 6 EXAMNO VARCHAR2(7) NOT NULL, 7 WRITTENSCORE NUMBER(4,1) NOT NULL, 8 LABSCORE NUMBER(4,1) NOT NULL 9 ) 10 TABLESPACE MYSPACE 11 / Table created |
建立索引時也可以為索引指定表空間。
程式碼演示:為索引指定表空間
SQL> CREATE INDEX UQ_ID ON SCORES(ID) 2 TABLESPACE MYSPACE; Index created |
表和索引一旦建立,表空間無法修改。