Oracle資料庫的下一層邏輯結構並非資料表,而是表空間。每個資料表都屬於唯一的表空間。
1、Oracle表空間
與資料表相同,Oracle表空間是一個邏輯物件,而非物理物件,是資料庫的組成部分。當使用SQL語句對資料庫進行操作時,操作的都是邏輯物件,而非直接操作物理檔案。一個資料庫可以有多個表空間,一個表空間可以有多個資料表。
Oracle表空間的Oracle資料庫高效能的保證,對於訪問頻繁的資料表,可以將其放入單獨的表空間中,並儲存與高效能磁碟;將其他訪問較少的資料表規劃於單獨的表空間,並儲存與效能相對較低的磁碟,以實現合理利用伺服器資源,最大限度提供資料庫效能。另外一種應用場景為將更新頻繁的資料表規劃於單獨的表空間,而很少更新的資料表規劃於其他的表空間,在備份資料庫時,可以針對不同表空間指定不同的備份週期,在最大程度減小備份資料庫佔用的系統資源。
不同的表空間對應著不同的物理檔案,當某個表空間物理檔案損壞時,不會影響其他表空間的正常使用,提高了資料庫的安全性。另外可以將資料庫實際資料與日誌規劃為不同的表空間,並儲存與不同的磁碟。即使資料庫所在磁碟出現問題,還可以利用另一磁碟的日誌檔案恢復資料庫,從而降低了資料丟失的風險。
1.1、建立Oracle表空間
Oracle表空間是一個邏輯概念,建立時需要指定物理檔案,即為實際資料分配磁碟空間。表空間的物理檔案為資料檔案(datafile),同時指定資料檔案初始大小。
1>、建立基本表空間
CREATE TABLESPACE MEMBER DATAFILE 'F:\DATABASE\ORADATA\MEMBER_DATA.DBF' SIZE 20M
資料檔案的初始大小是必須引數,其完整鷺江必須包含在單引號中。
2>、指定資料檔案的可擴充套件性
當儲存在某個資料檔案中的資料量超過了其初始大小時,資料檔案可以進行自動擴充套件,使用autoextend選項。
CREATE TABLESPACE MEMBER DATAFILE 'F:\DATABASE\ORADATA\MEMBER_DATA.DBF' SIZE 20M AUTOEXTEND ON
autoextend選項值為“on”,表空間的資料檔案可以自動擴充套件。若設定為“off”,則關閉自動擴充套件功能。
3>、指定資料檔案的增長幅度
資料檔案自動增長時,每次預設增長64K。當某個表空間資料更新很快,資料量的增長很快時,就會頻繁地要求增加資料檔案的大小。此時需要為每次的增長幅度設定一個合理的值,避免頻繁執行增加資料檔案大小的動作,影響資料庫效能。
設定自動增長幅度使用next選項。
CREATE TABLESPACE MEMBER DATAFILE 'F:\DATABASE\ORADATA\MEMBER_DATA.DBF' SIZE 20M AUTOEXTEND ON NEXT 5M
4>、指定資料檔案的最大尺寸
資料檔案可以自動增長,但是無限制的增長往往帶來風險。除非特殊需要,應為每個表空間的資料檔案設定最大尺寸。
為資料檔案設定最大尺寸使用maxsize選項。
CREATE TABLESPACE MEMBER DATAFILE 'F:\DATABASE\ORADATA\MEMBER_DATA.DBF' SIZE 20M AUTOEXTEND ON NEXT 5M MAXSIZE 500M
如果不限制資料檔案的最大尺寸,使用unlimited來代替實際值。
CREATE TABLESPACE MEMBER DATAFILE 'F:\DATABASE\ORADATA\MEMBER_DATA.DBF' SIZE 20M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
5>、檢視錶空間是否建立成功
表空間成功建立之後,會在資料庫系統表中新增相應的記錄,並且建立相應的物理檔案。可以通過查詢檢視dba_data_files中的記錄和實際資料檔案存在性,來判斷表空間是否建立成功。
檢視錶空間資訊的SQL語句:
select file_name,tablespace_name from dba_data_files order by file_name
6>、為一個表空間建立多個資料檔案
一個表空間可以有多個資料檔案,為一個表空間建立多個資料檔案需要指定多個資料檔案的完整路徑和詳細的選項引數。各資料檔案引數之間使用逗號(“,”)分隔。
CREATE TABLESPACE MEMBER DATAFILE 'F:\DATABASE\ORADATA\MEMBER_DATA_01.DBF' SIZE 20M,'F:\DATABASE\ORADATA\MEMBER_DATA_02.DBF' SIZE 10M
1.2、檢視錶空間
可以通過查詢檢視dba_tablespaces和檢視dba_data_files來獲得資料庫的表空間資訊。dba_tablespaces可以用來檢視所有表空間的基本資訊,dba_data_files可以用來檢視相關資料檔案的資訊。
select tablespace_name,status,allocation_type from dba_tablespaces
1.3、修改資料庫預設表空間
預設表空間是相對使用者來說的,每個使用者登入Oracle時,都有一個預設的工作空間。當進行與表空間相關操作時,如果為顯示指定表空間,則該操作將作用於使用者的預設表空間。
查詢每個使用者的預設表空間:
select user_id,username,default_tablespace from dba_users
修改資料庫預設表空間的SQL語句:
alter database default tablespace MEMBER
1.4、修改表空間名稱
修改表空間名稱使用rename to命令,不能對資料的系統表空間進行重新命名。
ALTER TABLESPACE MEMBER01 RENAME TO MEMBER02
1.5、刪除表空間
如果某個表空間沒有存在的必要,可以執行刪除表空間命令,以釋放磁碟空間。刪除表空間的命令為drop tablespace。刪除表空間有兩種方式,一是僅僅刪除其在資料庫中的記錄,另一種是將記錄和資料檔案一起刪除。
1>、僅刪除其在資料庫中記錄的SQL語句
DROP TABLESPACE MEMBER01
2>、刪除表空間及其資料檔案的SQL語句
including contents and datafiles表明當刪除該表空間時,應將資料檔案一併刪除。
DROP TABLESPACE MEMBER01 INCLUDING CONTENTS AND DATAFILES
2、建立Oracle資料表
利用SQL語句檢視資料表所屬的表空間:
select table_name,tablespace_name from user_tables
DESCRIBE T_USER
3、修改Oracle資料表結構
1>、使用rename選項修改列名
ALTER TABLE T_USER RENAME COLUMN USER_EMAIL TO EMAIL
2>、使用modify選項修改列的屬性
ALTER TALBE T_USER MODIFY (USER_NAME VARCHAR2(15))
一次修改多個屬性
ALTER TALBE T_USER MODIFY (USER_NAME VARCHAR2(15), EMAIL VARCHAR2(30))
3>、新增列
ALTER TABLE T_USER ADD (REMARK VARCHAR2(50))
4>、刪除列
ALTER TABLE T_USER DROP COLUMN REMARK
5>、修改表名
ALTER TABLE T_USER RENAME TO T_USERS
4、刪除資料表
DROP TABLE T_USERS
DROP TABLE T_USERS CASCADE CONSTRAINS
有時某些資料表的列被其他表引用,如外來鍵引用時,直接使用DROP TABLE將無法刪除該表,此時需要使用CASCADE CONSTRAINS選項,CASCADE CONSTRAINS表示刪除表時,將一起作用於約束。