創(chuàng)建表空間的步驟因操作系統(tǒng)帶的不同而不同。然而,在所有的情況中,用戶都應(yīng)該事先通過操作系統(tǒng)的功能創(chuàng)建一個目錄結(jié)構(gòu),以便將新表
空間的數(shù)據(jù)文件(一個表空間必須要有一個數(shù)據(jù)文件)分配到相應(yīng)的目錄中。在大多數(shù)操作系統(tǒng)中,當(dāng)通過添加數(shù)據(jù)文件來創(chuàng)建一個新表空間或
修改一個表空間時,應(yīng)該指出大小和完全限定的文件名(即包括目錄結(jié)構(gòu)和文件的擴(kuò)展名)。在每一種情況中,都由ORACLE按所指定的信息來自
動創(chuàng)建和格式化數(shù)據(jù)文件。
與表空間對應(yīng)的物理結(jié)構(gòu)是數(shù)據(jù)文件。在創(chuàng)建表空間的過程中要指定它所使用的數(shù)據(jù)文件的位置和文件名。實際上,在表空間的創(chuàng)建中,
ORACLE會完成以下幾個工作:
1.在數(shù)據(jù)字典和控制文件中記錄該新創(chuàng)建的表空間;
2.在操作系統(tǒng)中按指定的位置和文件名創(chuàng)建指定大小的操作系統(tǒng)文件,作為該表空間對應(yīng)的數(shù)據(jù)文件;
3.在預(yù)警文件中記錄創(chuàng)建表空間的信息。
CREATE TABLESPACE 創(chuàng)建(永久)表空間
CREATE BIGFILE TABLESPACE 創(chuàng)建大文件表空間
CREATE TEMPORARY TABLESPACE 創(chuàng)建臨時表空間
CREATE UNDO TABLESPACE 創(chuàng)建撤銷表空間
用戶必須擁有CREATE
TABLESPACE系統(tǒng)權(quán)限才能創(chuàng)建表空間。臨時表空間和撤銷表空間都是特殊表空間,他們與一般表空間不同的是,用戶并不
能在其中創(chuàng)建方案對象,因此,需要在CREATE語句中添加TEMPORARY和UNDO關(guān)鍵詞。
在ORACLE 8I以前,所有的表空間都創(chuàng)建為字典管理。從ORACLE 8I開始,用戶能夠創(chuàng)建本地管理的表空間,他們使用位圖代替了數(shù)據(jù)字典表開
跟蹤已用的和空閑的空間。因為本地管理的表空間有更好的性能,而且更加容易管理,所以,從ORACLE 9I開始,創(chuàng)建(永久)表空間都是本地管
理的。
創(chuàng)建表空間的語法是:
CREATE [SMALLFILE|BIGFILE] [PERMANENT|TEMPORARY|UNDO] TABLESPACE
DATAFILE|TEMPFILE datafile_clause[,datafile_clause]
[EXTENT MANAGEMENT LOCAL]
[AUTOALLOCATE|UNIFORM SIZE integer [K|M]]
[SEGMENT SPACE MANAGEMENT AUTO|MANUAL]
[BLOCKSIZE integer[K|M]]
[MININUM EXTENT integer [K|M]]
[LOGGING|NOLOGGING]
[ONLINE|OFFLINE [NORMAL|TEMPORARY|IMMEDIATE]];
其中,datafile_clause子句(數(shù)據(jù)文件子句)的語法是:
'path_filename_suffix' SIZE integer [K|M]
[REUSE]
[AUTOEXTEND OFF|ON]
[NEXT integer [K|M]]
[MAXSIZE UNLIMITED | integer [K|M]]
在datafile_clause子句中指定數(shù)據(jù)文件時,不能使用相對路徑,只能使用絕對路徑。并且,如果沒有提供文件名的后綴,則無后綴。
(一)創(chuàng)建(永久)表空間
如果不指定PERMANENT,TEMPORARY,UNDO選項,或指定了PERMANENT選項,則創(chuàng)建的是永久表空間,即永久保存其中的數(shù)據(jù)庫對象
的數(shù)據(jù)。
有三種創(chuàng)建(永久)表空間的方法:
(1)使用AUTOALLOCATE區(qū)分配方式
如果DBA能夠預(yù)測到表空間中存放的度喜愛那個所需要的區(qū)大小會有很大不同,則使用AUTOALLOCATE區(qū)分配方式是比較好的選擇。在這種方式下
,ORACLE將自動按表空間中不同對象的大小分配相應(yīng)大小的區(qū)(有一個表大小與區(qū)大小的對應(yīng)關(guān)系,最小的區(qū)為64KB)。
AUTOALLOCATE區(qū)分配方
式的缺點(diǎn)是在表空間中可能會造成一些磁盤空間的浪費(fèi),但是這一點(diǎn)代價相對DBA工作量的減少來說是值得的。
CREATE TABLESPACE mytbs01 DATAFILE 'e:\mytbs01.dbf' SIZE 2M
AUTOALLOCATE;
(2)使用UNIFORM區(qū)分配方式
如果DBA能夠預(yù)測到表空間中存放的大部分對象都要求使用相同大小的區(qū),那么,使用UNIFORM區(qū)分配方式是比較好的選擇。在這種情況下,
ORACLE將為表空間中所有對象都分配指定的相同
大小的區(qū)(默認(rèn)大小是1MB)。UNIFORM區(qū)分配方式的優(yōu)點(diǎn)是在表空間中不會產(chǎn)生磁盤碎片,節(jié)約
磁盤空間。
CREATE TABLESPACE mytbs02 DATAFILE 'e:\mytbs02_1.dbf' SIZE 1M,
'e:\mytbs02_2' SIZE 2M UNIFORM SIZE 128K;
(3)在數(shù)據(jù)字典子句中指定數(shù)據(jù)文件的擴(kuò)展方式
可以在數(shù)據(jù)文件子句中指定數(shù)據(jù)文件的擴(kuò)展方式。
CREATE TABLESPACE mytbs03 DATAFILE 'e:\mytbs03_1.dbf' SIZE 1M AUTOEXTEND
ON NEXT 2M MAXSIZE 11M;
但是此時就不能再指定表空間的區(qū)分配方式了,否則會有錯誤提示。
(4)使用AUTO段管理方式
可以使用SEGMENT SPACE
MANAGEMENT子句來指定表空間的段管理方式,即管理段中已用數(shù)據(jù)塊和空閑數(shù)據(jù)塊的方式。雖然ORACLE極力推薦為本
地管理的永久表空間使用AUTO段管理方式,但在ORACLE 10G中如果不使用SEGMENT SPACE
MANAGEMENT子句指定AUTO,則使用MANUAL段管理方式。
CREATE TABLESPACE mytbs04 DATAFILE 'e:\mytbs04_1.dbf' SIZE 3M REUSE
UNIFORM SEGMENT SPACE MANAGEMENT AUTO;
(5)使用BLOCKSIZE選項和創(chuàng)建非標(biāo)準(zhǔn)塊表空間
有時候要求數(shù)據(jù)庫支持多個塊大小的表空間(大表的數(shù)據(jù)存放在大塊的表空間上更有效),即必須創(chuàng)建有不同于初始化參數(shù)DB_BLOCK_SIZE指定的
標(biāo)準(zhǔn)的ORACLE塊大小的表空間,此時就可以使用這個選項。這個選項只適用于永久表空間。
例如現(xiàn)在DB_BLOCK_SIZE參數(shù)的值是8K,則可以創(chuàng)建BLOCKSIZE選項是8K的表空間(如果不用BLOCKSIZE選項指定塊的大小,就
采用DB_BLOCK_SIZE
參數(shù)指定的大小)。
CREATE TABLESPACE mytbs05 DATAFILE 'e:\mytbs05_1.dbf' SIZE 3M REUSE
BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO;
但可能不能創(chuàng)建BLOCKSIZE參數(shù)值為16K的表空間,否則會有錯誤提示:
CRAETE TABLESPACE mytbs06 DATAFILE 'e:\mytbs06_1.dbf' SIZE 3M REUSE
BLOCKSIZE 16K SEGMENT SPACE MANAGEMENT AUTO;
如果要為不同的表空間指定不同的塊大小,就需要先修改初始化參數(shù)文件中的數(shù)據(jù)高速緩存區(qū)參數(shù)
(DB_2K_CACHE_SIZE,DB_4K_CACHE_SIZE,DB_8K_CACHE_SIZE,
DB_16K_CACHE_SIZE,DB_32K_CACHE_SIZE)才行
(二)創(chuàng)建大文件表空間
大文件表空間是ORACLE 10G數(shù)據(jù)庫的新特性,而且僅在本地管理的表空間中才支持大文件表空間。這種表空間只能包括一個數(shù)據(jù)文件,該數(shù)據(jù)
文件可以包含4G個塊。能顯著提高ORACLE數(shù)據(jù)庫的存儲能力并減少數(shù)據(jù)文件的個數(shù)。
CREATE BIGFILE TABLESPACE mybigtbs01 DATAFILE 'e:\mybigtbs01_1.dbf' SIZE
2M SEGMENT SPACE MANAGEMENT AUTO;
在創(chuàng)建大文件表空間時可以指定區(qū)分配方式,但不能將段管理方式指定為MANUAL方式。
CREATE BIGFILE TABLESPACE mybigtbs02 DATAFILE 'e:\mybigtbs02_1.dbf' SIZE
2M UNIFORM SIZE 128K;
但是
CREATE BIGFILE TABLESPACE mybigtbs03 DATAFILE 'e:\mybigtbs03_1.dbf' SIZE
2M SEGMENT SPACE MANAGEMENT MANUAL;就會出現(xiàn)錯誤提示
。
(三)創(chuàng)建臨時表空間
如果指定了TEMPORARY選項,則創(chuàng)建的就是臨時表空間,即ORACLE會用這種表空間來創(chuàng)建臨時段,以便排序操作時使用。這個臨時段是全體用戶
共享的,即使排序操作結(jié)束了,ORACLE也不會釋放這個臨時段。這可以提高排序操作較多的應(yīng)用系統(tǒng)的執(zhí)行性能,因為ORACLE不必每次遇到一
個排序操作就分配一個臨時段,可以采用以下方法創(chuàng)建臨時表空間:
(1)創(chuàng)建臨時表空間
如果在數(shù)據(jù)庫運(yùn)行過程中經(jīng)常有大量排序工作要做,為了提高排序性能就應(yīng)該建立多個鏈?zhǔn)奖砜臻g。
CREATE SMALLFILE TEMPORARY TABLESPACE mytmptbs01 TEMPFILE
'e:\mytmptbs01_1.dbf' SIZE 4M UNIFORM SIZE 64K;
必須用關(guān)鍵字TEMPFILE代替DATAFILE。另外,臨時表空間使用臨時文件而不是數(shù)據(jù)文件來創(chuàng)建。臨時文件只能與臨時表空間一起使用,不需要
備份,也不會把數(shù)據(jù)修改記錄到重做日志中。
在創(chuàng)建臨時表空間時,區(qū)分配方式不能指定為AUTOALLOCATE方式,否則會出現(xiàn)錯誤提示。
(2)創(chuàng)建大文件臨時表空間
從ORACLE 10G開始,允許使用CREATE BIGFILE TEMPORARY
TABLESPACE命令來創(chuàng)建只包含一個臨時文件的大文件臨時表空間。
CREATE BIGFILE TEMPORARY TABLESPACE mybigtmptbs02 TEMPFILE
'e:\mybigtmptbs02_1.dbf' SIZE 4M UNIFORM SIZE 64K;
在創(chuàng)建臨時表空間時,段管理方式不能指定為AUTO方式,否則會出現(xiàn)錯誤提示。
(四)創(chuàng)建撤銷表空間
撤銷表空間(UNDO TABLESPACE)用戶存儲撤銷段,該表空間只能使用本地管理方式。
當(dāng)執(zhí)行CREATE
DATABASE語句創(chuàng)建數(shù)據(jù)庫時,可以創(chuàng)建UNDO表空間,并且DBA可以使用該UNDO表空間來管理UNDO數(shù)據(jù)。創(chuàng)建數(shù)據(jù)庫后,可以使用
CREATE UNDO TABLESPACE命令來創(chuàng)建UNDO表空間。
CREATE UNDO TABLESPACE myundotbs01 DATAFILE 'e:\myundotbs01_1.dbf' SIZE
4M; AUTOALLOCATE;
CREATE UNDO TABLESPACE myundotbs02 DATAFILE 'e:\myundotbs02_1.dbf' SIZE
4M AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED;
創(chuàng)建UNDO表空間時不能指定統(tǒng)一區(qū)大小的選項,否則會有錯誤提示。
如果想使用UNDO表空間的管理功能,就需要在初始化參數(shù)文件中設(shè)置如下參數(shù):
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
其中,undo_management參數(shù)必須設(shè)置成AUTO,否則將使用回退表空間(ROLLBACK
TABLESPACE);undo_tablespace參數(shù)用于指定要使用哪個UNDO
表空間。
很顯然可以創(chuàng)建多個UNDO表空間,但一次只能使用一個UNDO表空間。
可以用以下的語句修改初始化參數(shù)文件,就愛你個當(dāng)前使用的UNDO表空間切換到另一個UNDO表空間。
ALTER SYSTEM SET undo_tablespace='new_undo_tablespace' SCOPE=SPFILE;
當(dāng)一個UNDO表空間切換到另一個UNDO表空間之后,就可以在前一個UNDO表空間中的活躍事務(wù)全部完成后刪除就的表空間。
可以修改UNDO表空間,如同增加一個數(shù)據(jù)文件、重新命名表空間、聯(lián)機(jī)/脫機(jī)數(shù)據(jù)文件、備份表空間等。與其他表空間一樣,正在使用的UNDO表
空間是不允許被刪除的,即只有在其中已經(jīng)沒有未提交的事務(wù)時才能將其刪除。
可以用V$TRANSACTION視圖來檢查其中是否還有未提交的事務(wù)。