四、修改表空間
不論是字典管理表空間還是本地管理表空間,在表空間被創建之后都可以進行修改。可以使用ALTER TABALESPACE來修改表空間。相應的,用戶

必須擁有ALTER TABLESPACE或ALTER DATABASE系統權限才能夠修改表空間。

(一)擴展表空間
表空間在物理上是由保存在磁盤上的數據文件組成的。創建數據文件時會指定大小,因此表空間是有大小的。為了給用戶提供更大的表空間,

以便使其可以繼續增加數據,就必須能夠擴展表空間,即增加更多存儲空間。通常擴展表空間的方法有添加數據文件、改變數據文件的大小、

允許數據文件自動擴展這三種方式。

(1)添加數據文件
因為表空間的大小實際上就是它所包含的各個數據文件的大小和,所以為表空間增加新的數據文件是最常用的擴展表空間的辦法。
注意:不能為大文件表空間增加第二個數據文件。
ALTER TABLESPACE mytbs01 ADD DATAFILE 'e:\mytbs01_2.dbf' SIZE 3M;
與普通表空間不同,如果要為臨時表空間添加新的臨時數據文件,就必須使用ALTER TABLESPACE...ADD TEMPFILE語句。
ALTER TABLESPACE mytmptbs01 ADD TEMPFILE 'e:\mytmptbs01_2.dbf' SIZE 3M;

(2)改變數據文件的大小
通過增加表空間中已有數據文件的大小,也可以增加表空間的存儲空間。
ALTER DATABASE DATAFILE 'e:\mytbs01_2.dbf' RESIZE 4M;
與普通表空間不同,如果要改變臨時表空間的臨時文件的大小,就必須使用ALTER DATABASE TEMPFILE...RESIZE語句。
當數據文件中的可用空間未使用完時,允許減小它的大小,即進行壓縮。

(3)允許數據文件自動擴展
如果在創建表空間或為表空間增加數據文件時,沒有在數據文件子句中指定AUTOEXTEND選項,則該數據文件的大小是不會自動擴展或增加的。

為了是數據文件可以自動擴展,就必須指定AUTOEXTEND ON選項。在指定了AUTOEXTEND ON選項后,當表空間被填滿時,數據文件就會自動擴展

,從而就間接的增加了表空間的存儲空間。
ALTER DATABASE DATAFILE 'e:\mytbs01_2.dbf' AUTOEXTEND ON NEXT 1M MAXSIZE 20M;

(二)修改屬性、狀態
(1)修改表空間的可用性
新創建的表空間都處于聯機(ONLINE)狀態。此時該表空間是可以被訪問的。但當表空間處于脫機(OFFLINE)狀態時,該表空間就不能被SQL語句

訪問了。因此,表空間是否聯機,表明了表空間是否可用。
修改表空間可用性的語法是:
ALTER TABLESPACE ONLINE|OFFLINE [NORMAL|TEMPORARY|IMMEDIATE|FOR RECOVER];

使表空間脫機
為了提高數據文件的I/O性能,可能需要移動特定表空間的數據文件。為了確保表空間中數據文件的一致性,在移動數據文件之前,需要將該表

空間修改為脫機狀態,以防止其中的數據文件被修改。
SYSTEM,SYSAUX,TEMP,UNDOTBS1表空間是不能被脫機的,因為ORACLE要隨時使用這幾個表空間。
當表空間修改為脫機狀態后,與其相關的數據文件的SCN值和內容都不會發生任何變化。
ALTER TABLESPACE mytbs01 OFFLINE;
當表空間處于脫機狀態時,就不能訪問該表空間了,否則會有錯誤的提示。
ALTER TABLESPACE mytbs01 ONLINE;
ALTER TABLESPACE mytbs01 OFFLINE TEMPORARY;
ALTER TABLESPACE mytbs01 ONLINE;
要在ARCHIVELOG模式下執行立即脫機模式。

使表空間聯機
完成其他對表空間的維護操作后,應該立即將表空間轉變為ONLINE狀態,以便該表空間可以被訪問。
ALTER TABLESPACE mytbs01 ONLINE;

(2)修改表空間的可讀寫性
修改表空間的可讀寫包括使表空間只讀和使表空間可讀寫。

使表空間只讀
如果表空間值用于存放靜態數據,或者要將表空間移動到其他數據庫,就應該先將表空間修改為只讀狀態。
SYSTEM,SYSAUX,TEMP,UNDOTBS1這幾個表空間不能被只讀,因為ORACLE要隨時向這幾個表空間寫入數據。
將表空間吸怪為只讀狀態后,與其相關的數據文件中的SCN值和內容都不會發生任何變化。
ALTER TABLESPACE mytbs01 READ ONLY;
當表空間處于READ ONLY狀態時,就不能對該表空間操作了,否則會有錯誤提示。
當表空間處于只讀狀態時,仍然允許執行DROP 操作刪除該表空間上的對象。
DROP TABLE personal CASCADE CONSTRAINTS;
表空間的可讀寫狀態在脫機之后仍然保留,換句話說就是練級后的其可讀寫性仍然存在。
如果表空間處于脫機狀態,就不能修改它的可讀寫狀態,否則將會有錯誤提示信息。

使表空間可讀寫
正常情況下,表空間是可讀寫的,即可以在該表空間上執行正常的DDL和DML操作。
ALTER TABLESPACE mytbs01 READ WRITE;

(3)修改表空間的備份模式
如果執行非RMAN(RON-RECOVERY MANAGER)聯機備份,即在ARCHIVELOG模式下的熱備份,則需要修改表空間的備份模式。
首先執行ALTER TABLESPACE tablespace_name BEGIN BACKUP語句,將表空間tablespace_name設置成備份模式,類似于系統給需要備份的表空

間加鎖,防止在備份過程中用戶對此表空間進行操作。當表空間處于備份模式時,數據庫繼續寫數據到數據文件(當檢查點出現時),但這些檢

查點的出現不被記錄到數據文件的頭部塊中。這就告訴數據庫,圖過數據庫例程被突然中斷,就可能需要恢復。如果有必要,一些附加的信息

會被寫入重做日志文件,以便有助于恢復。
然后使用一些操作系統的命令程序,將該表空間中的各個數據文件都備份到某些文件夾中或存儲設備上。
最后執行ALTER TABLESPACE tablespace_name END BACKUP語句,將表空間tablespace_name設置成結束備份模式,類似于系統給正在備份的表

空間解鎖,以便用戶對此空間進行操作。如果忘記了將表空間設置成結束備份模式,則下一次啟動數據庫時,數據庫將會看到控制文件中的檢

查點號晚于數據文件頭部塊中的檢查好,并提示一個需要進行介質恢復的信息。

(4)修改表空間的名稱
通過使用ALTER TABLESPACE的RENAME選項,DBA就可以修改表空間的名稱。在ORACLE 9I之前,移動表空間時,如果在目標數據庫中存在同名表

空間,那么該表空間將不能被移動到目標數據庫;而在ORACLE 10G中,如果目標數據庫存在同名表空間,可以先使用ALTER TABLESPACE命令修

改源數據庫或目標數據庫的相應表空間名,然后再移動表空間。
SYSTEM,SYSAUX,TEMP,UNDOTBS1表空間的名稱不能被移動。
ALTER TABLESPACE mytbs01 RENAME TO mytbs01_new;
當表空間或其任何數據文件愛你處于OFFLINE狀態時,不能修改表空間的名稱。

(5)設置、查詢默認表空間
在創建數據庫用戶時,如果沒有用DEFAULT TABLESPACE選項指定默認表空間,則使用數據庫的默認表空間。如果沒有用DEFAULT TEMPORARY

TABLESPACE選項指定臨時表空間,則使用數據庫的默認臨時表空間。在ORACLE 10G中,初始的默認臨時表空間是TEMP,而默認表空間隨用戶的

不同而不同。

設置數據庫默認表空間
可以使用ALTER DATABASE DEFAULT TABLESPACE語句,修改數據庫的默認表空間。
ALTER DATABASE DEFAULT TABLESPACE mytbs01;

設置數據庫默認臨時表空間
可以使用ALTER DATABASE DEFAULT TEMPORARY TABLESPACE語句,修改數據庫的默認臨時表空間按。
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE mytmptbs01;

查詢數據庫的默認表空間
可以使用以下語句查詢當前數據庫的默認表空間。
SELECT username,default_tablespace,temporary_tablespae FROM DBA_UERS;
永久表空間與臨時表空間是有區別的,所以如果就愛你個一個永久表空間設置為數據庫的臨時表空間就會有錯誤提示。