四、修改表空間
不論是字典管理表空間還是本地管理表空間,在表空間被創(chuàng)建之后都可以進(jìn)行修改。可以使用ALTER TABALESPACE來修改表空間。相應(yīng)的,用戶
必須擁有ALTER TABLESPACE或ALTER DATABASE系統(tǒng)權(quán)限才能夠修改表空間。
(一)擴(kuò)展表空間
表空間在物理上是由保存在磁盤上的數(shù)據(jù)文件組成的。創(chuàng)建數(shù)據(jù)文件時(shí)會(huì)指定大小,因此表空間是有大小的。為了給用戶提供更大的表空間,
以便使其可以繼續(xù)增加數(shù)據(jù),就必須能夠擴(kuò)展表空間,即增加更多存儲(chǔ)空間。通常擴(kuò)展表空間的方法有添加數(shù)據(jù)文件、改變數(shù)據(jù)文件的大小、
允許數(shù)據(jù)文件自動(dòng)擴(kuò)展這三種方式。
(1)添加數(shù)據(jù)文件
因?yàn)楸砜臻g的大小實(shí)際上就是它所包含的各個(gè)數(shù)據(jù)文件的大小和,所以為表空間增加新的數(shù)據(jù)文件是最常用的擴(kuò)展表空間的辦法。
注意:不能為大文件表空間增加第二個(gè)數(shù)據(jù)文件。
ALTER TABLESPACE mytbs01 ADD DATAFILE 'e:\mytbs01_2.dbf' SIZE 3M;
與普通表空間不同,如果要為臨時(shí)表空間添加新的臨時(shí)數(shù)據(jù)文件,就必須使用ALTER TABLESPACE...ADD TEMPFILE語句。
ALTER TABLESPACE mytmptbs01 ADD TEMPFILE 'e:\mytmptbs01_2.dbf' SIZE 3M;
(2)改變數(shù)據(jù)文件的大小
通過增加表空間中已有數(shù)據(jù)文件的大小,也可以增加表空間的存儲(chǔ)空間。
ALTER DATABASE DATAFILE 'e:\mytbs01_2.dbf' RESIZE 4M;
與普通表空間不同,如果要改變臨時(shí)表空間的臨時(shí)文件的大小,就必須使用ALTER DATABASE TEMPFILE...RESIZE語句。
當(dāng)數(shù)據(jù)文件中的可用空間未使用完時(shí),允許減小它的大小,即進(jìn)行壓縮。
(3)允許數(shù)據(jù)文件自動(dòng)擴(kuò)展
如果在創(chuàng)建表空間或?yàn)楸砜臻g增加數(shù)據(jù)文件時(shí),沒有在數(shù)據(jù)文件子句中指定AUTOEXTEND選項(xiàng),則該數(shù)據(jù)文件的大小是不會(huì)自動(dòng)擴(kuò)展或增加的。
為了是數(shù)據(jù)文件可以自動(dòng)擴(kuò)展,就必須指定AUTOEXTEND ON選項(xiàng)。在指定了AUTOEXTEND ON選項(xiàng)后,當(dāng)表空間被填滿時(shí),數(shù)據(jù)文件就會(huì)自動(dòng)擴(kuò)展
,從而就間接的增加了表空間的存儲(chǔ)空間。
ALTER DATABASE DATAFILE 'e:\mytbs01_2.dbf' AUTOEXTEND ON NEXT 1M MAXSIZE
20M;
(二)修改屬性、狀態(tài)
(1)修改表空間的可用性
新創(chuàng)建的表空間都處于聯(lián)機(jī)(ONLINE)狀態(tài)。此時(shí)該表空間是可以被訪問的。但當(dāng)表空間處于脫機(jī)(OFFLINE)狀態(tài)時(shí),該表空間就不能被SQL語句
訪問了。因此,表空間是否聯(lián)機(jī),表明了表空間是否可用。
修改表空間可用性的語法是:
ALTER TABLESPACE ONLINE|OFFLINE [NORMAL|TEMPORARY|IMMEDIATE|FOR
RECOVER];
使表空間脫機(jī)
為了提高數(shù)據(jù)文件的I/O性能,可能需要移動(dòng)特定表空間的數(shù)據(jù)文件。為了確保表空間中數(shù)據(jù)文件的一致性,在移動(dòng)數(shù)據(jù)文件之前,需要將該表
空間修改為脫機(jī)狀態(tài),以防止其中的數(shù)據(jù)文件被修改。
SYSTEM,SYSAUX,TEMP,UNDOTBS1表空間是不能被脫機(jī)的,因?yàn)镺RACLE要隨時(shí)使用這幾個(gè)表空間。
當(dāng)表空間修改為脫機(jī)狀態(tài)后,與其相關(guān)的數(shù)據(jù)文件的SCN值和內(nèi)容都不會(huì)發(fā)生任何變化。
ALTER TABLESPACE mytbs01 OFFLINE;
當(dāng)表空間處于脫機(jī)狀態(tài)時(shí),就不能訪問該表空間了,否則會(huì)有錯(cuò)誤的提示。
ALTER TABLESPACE mytbs01 ONLINE;
ALTER TABLESPACE mytbs01 OFFLINE TEMPORARY;
ALTER TABLESPACE mytbs01 ONLINE;
要在ARCHIVELOG模式下執(zhí)行立即脫機(jī)模式。
使表空間聯(lián)機(jī)
完成其他對(duì)表空間的維護(hù)操作后,應(yīng)該立即將表空間轉(zhuǎn)變?yōu)镺NLINE狀態(tài),以便該表空間可以被訪問。
ALTER TABLESPACE mytbs01 ONLINE;
(2)修改表空間的可讀寫性
修改表空間的可讀寫包括使表空間只讀和使表空間可讀寫。
使表空間只讀
如果表空間值用于存放靜態(tài)數(shù)據(jù),或者要將表空間移動(dòng)到其他數(shù)據(jù)庫,就應(yīng)該先將表空間修改為只讀狀態(tài)。
SYSTEM,SYSAUX,TEMP,UNDOTBS1這幾個(gè)表空間不能被只讀,因?yàn)镺RACLE要隨時(shí)向這幾個(gè)表空間寫入數(shù)據(jù)。
將表空間吸怪為只讀狀態(tài)后,與其相關(guān)的數(shù)據(jù)文件中的SCN值和內(nèi)容都不會(huì)發(fā)生任何變化。
ALTER TABLESPACE mytbs01 READ ONLY;
當(dāng)表空間處于READ ONLY狀態(tài)時(shí),就不能對(duì)該表空間操作了,否則會(huì)有錯(cuò)誤提示。
當(dāng)表空間處于只讀狀態(tài)時(shí),仍然允許執(zhí)行DROP 操作刪除該表空間上的對(duì)象。
DROP TABLE personal CASCADE CONSTRAINTS;
表空間的可讀寫狀態(tài)在脫機(jī)之后仍然保留,換句話說就是練級(jí)后的其可讀寫性仍然存在。
如果表空間處于脫機(jī)狀態(tài),就不能修改它的可讀寫狀態(tài),否則將會(huì)有錯(cuò)誤提示信息。
使表空間可讀寫
正常情況下,表空間是可讀寫的,即可以在該表空間上執(zhí)行正常的DDL和DML操作。
ALTER TABLESPACE mytbs01 READ WRITE;
(3)修改表空間的備份模式
如果執(zhí)行非RMAN(RON-RECOVERY MANAGER)聯(lián)機(jī)備份,即在ARCHIVELOG模式下的熱備份,則需要修改表空間的備份模式。
首先執(zhí)行ALTER TABLESPACE tablespace_name BEGIN
BACKUP語句,將表空間tablespace_name設(shè)置成備份模式,類似于系統(tǒng)給需要備份的表空
間加鎖,防止在備份過程中用戶對(duì)此表空間進(jìn)行操作。當(dāng)表空間處于備份模式時(shí),數(shù)據(jù)庫繼續(xù)寫數(shù)據(jù)到數(shù)據(jù)文件(當(dāng)檢查點(diǎn)出現(xiàn)時(shí)),但這些檢
查點(diǎn)的出現(xiàn)不被記錄到數(shù)據(jù)文件的頭部塊中。這就告訴數(shù)據(jù)庫,圖過數(shù)據(jù)庫例程被突然中斷,就可能需要恢復(fù)。如果有必要,一些附加的信息
會(huì)被寫入重做日志文件,以便有助于恢復(fù)。
然后使用一些操作系統(tǒng)的命令程序,將該表空間中的各個(gè)數(shù)據(jù)文件都備份到某些文件夾中或存儲(chǔ)設(shè)備上。
最后執(zhí)行ALTER TABLESPACE tablespace_name END
BACKUP語句,將表空間tablespace_name設(shè)置成結(jié)束備份模式,類似于系統(tǒng)給正在備份的表
空間解鎖,以便用戶對(duì)此空間進(jìn)行操作。如果忘記了將表空間設(shè)置成結(jié)束備份模式,則下一次啟動(dòng)數(shù)據(jù)庫時(shí),數(shù)據(jù)庫將會(huì)看到控制文件中的檢
查點(diǎn)號(hào)晚于數(shù)據(jù)文件頭部塊中的檢查好,并提示一個(gè)需要進(jìn)行介質(zhì)恢復(fù)的信息。
(4)修改表空間的名稱
通過使用ALTER TABLESPACE的RENAME選項(xiàng),DBA就可以修改表空間的名稱。在ORACLE
9I之前,移動(dòng)表空間時(shí),如果在目標(biāo)數(shù)據(jù)庫中存在同名表
空間,那么該表空間將不能被移動(dòng)到目標(biāo)數(shù)據(jù)庫;而在ORACLE 10G中,如果目標(biāo)數(shù)據(jù)庫存在同名表空間,可以先使用ALTER TABLESPACE命令修
改源數(shù)據(jù)庫或目標(biāo)數(shù)據(jù)庫的相應(yīng)表空間名,然后再移動(dòng)表空間。
SYSTEM,SYSAUX,TEMP,UNDOTBS1表空間的名稱不能被移動(dòng)。
ALTER TABLESPACE mytbs01 RENAME TO mytbs01_new;
當(dāng)表空間或其任何數(shù)據(jù)文件愛你處于OFFLINE狀態(tài)時(shí),不能修改表空間的名稱。
(5)設(shè)置、查詢默認(rèn)表空間
在創(chuàng)建數(shù)據(jù)庫用戶時(shí),如果沒有用DEFAULT TABLESPACE選項(xiàng)指定默認(rèn)表空間,則使用數(shù)據(jù)庫的默認(rèn)表空間。如果沒有用DEFAULT
TEMPORARY
TABLESPACE選項(xiàng)指定臨時(shí)表空間,則使用數(shù)據(jù)庫的默認(rèn)臨時(shí)表空間。在ORACLE 10G中,初始的默認(rèn)臨時(shí)表空間是TEMP,而默認(rèn)表空間隨用戶的
不同而不同。
設(shè)置數(shù)據(jù)庫默認(rèn)表空間
可以使用ALTER DATABASE DEFAULT TABLESPACE語句,修改數(shù)據(jù)庫的默認(rèn)表空間。
ALTER DATABASE DEFAULT TABLESPACE mytbs01;
設(shè)置數(shù)據(jù)庫默認(rèn)臨時(shí)表空間
可以使用ALTER DATABASE DEFAULT TEMPORARY TABLESPACE語句,修改數(shù)據(jù)庫的默認(rèn)臨時(shí)表空間按。
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE mytmptbs01;
查詢數(shù)據(jù)庫的默認(rèn)表空間
可以使用以下語句查詢當(dāng)前數(shù)據(jù)庫的默認(rèn)表空間。
SELECT username,default_tablespace,temporary_tablespae FROM DBA_UERS;
永久表空間與臨時(shí)表空間是有區(qū)別的,所以如果就愛你個(gè)一個(gè)永久表空間設(shè)置為數(shù)據(jù)庫的臨時(shí)表空間就會(huì)有錯(cuò)誤提示。