1. 程式人生 > >Oracle表空間介紹

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

表和索引一旦建立,表空間無法修改。