我們知道Oracle數(shù)據(jù)庫真正存放數(shù)據(jù)的是數(shù)據(jù)文件(Data File)嚣艇,oracle表空間(tablespace)實際上是一個邏輯的概念离熏,在物理上是并不存在的婿屹,那么把一組data files捻在一起就成為一個表空間。
表空間屬性:
一個數(shù)據(jù)庫可以包含多個表空間袋马,一個表空間只能屬于一個數(shù)據(jù)庫
一個表空間包含多個數(shù)據(jù)文件,一個數(shù)據(jù)文件只能屬于一個表空間
表空間可以劃分成更細的邏輯存儲單元:
Oracle數(shù)據(jù)庫的存儲空間結構:
從邏輯的角度來看屹逛,一個數(shù)據(jù)庫(database)下面可以分多個表空間(tablespace)深啤;一個表空間下面有可以分多個段(segment);一個數(shù)據(jù)表要占一個段(segment)路星,一個索引也要占一個段(segment)溯街。一個段(segment)由多個區(qū)間(extent)組成诱桂,那么一個區(qū)間又由一組連續(xù)的數(shù)據(jù)塊(data block)組成,這連續(xù)的數(shù)據(jù)塊是在邏輯上是連續(xù)的呈昔,有可能是物理邏輯上是分散
那么從物理的角度上看挥等,一個表空間由多個數(shù)據(jù)文件組成,數(shù)據(jù)文件是實實在在存在的磁盤文件堤尾,這些文件是由oracle數(shù)據(jù)庫操作系統(tǒng)的block組成的
Segment(段):段是指占用數(shù)據(jù)文件空間的通稱肝劲,或數(shù)據(jù)庫對象使用的空間的稽核;段可以由表段郭宝、索引段辞槐、回滾段、臨時段粘室、和高速緩存段等榄檬。
Extent(區(qū)間):分配給對象的任何連續(xù)塊就叫區(qū)間;區(qū)間也叫擴展衔统,因為當它用完已經(jīng)分配的區(qū)間后鹿榜,再有新的記錄插入就必須在分配新的區(qū)間(即擴展一些塊);一旦區(qū)間分配某個對象(表锦爵,索引或簇)舱殿,則該區(qū)間就不能再分配給其它的對象
1,查看表空間的名稱及大小
1
2
3
4
select?t.tablespace_name, round(sum(bytes / (1024 * 1024)), 0) ts_size
from?dba_tablespaces t, dba_data_files d
where?t.tablespace_name = d.tablespace_name
group?by?t.tablespace_name
2险掀、查看表空間物理文件的名稱及大小
select tablespace_name,file_id,file_name,round(bytes/(1024*1024),0) total_spacefrom dba_data_filesorderby tablespace_name;select tablespace_name,file_id,file_name,round(bytes/(1024*1024),0) total_spacefrom dba_temp_filesorderbytablespace_name;
3沪袭、查看表空間的使用情況
select sum(bytes) / (1024 * 1024) as free_space, tablespace_name
from dba_free_space
group by tablespace_name;
SELECT * from DBA_TEMP_FREE_SPACE;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT?UPPER(F.TABLESPACE_NAME)?"表空間名",
D.TOT_GROOTTE_MB?"表空間大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES?"已使用空間(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
2),
'990.99')?"使用比",
F.TOTAL_BYTES?"空閑空間(M)",
F.MAX_BYTES?"最大塊(M)"
FROM?(SELECT?TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM?SYS.DBA_FREE_SPACE
GROUP?BY?TABLESPACE_NAME) F,
(SELECT?DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM?SYS.DBA_DATA_FILES DD
GROUP?BY?DD.TABLESPACE_NAME) D
WHERE?D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER?BY?4?DESC;
4、查看/修改Database的Default Temporary Tablespace
SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE
PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name;
5迷郑,--查看表空間是否具有自動擴展的能力??
1
2
3
4
5
6
7
8
9
SELECT?T.TABLESPACE_NAME,
D.FILE_NAME
D.AUTOEXTENSIBLE,
D.BYTES,
D.MAXBYTES,
D.STATUS
FROM?DBA_TABLESPACES T, DBA_DATA_FILES D
WHERE?T.TABLESPACE_NAME = D.TABLESPACE_NAME
ORDER?BY?TABLESPACE_NAME, FILE_NAME;
當數(shù)據(jù)庫剛建立起來枝恋,系統(tǒng)會建立一個叫做SYSTEM的系統(tǒng)的TableSpace,存放SYS,SYSTEM等User重要的系統(tǒng)數(shù)據(jù)(ex:數(shù)據(jù)字典與預存儲程序等)建立oracle User時嗡害,不指定預設的TableSpace焚碌,則此User則會以System TableSpace 作為預設的TableSpace,這造成管理上的混亂與嚴重的效能問題霸妹,這是必須注意的
TableSpace的類型:Permanent十电、Undo、Temporary
Permanent TableSpace:創(chuàng)建給AP使用的都是叹螟。里面的對象的生命周期不會隨著交易或者用戶的session結束而消失
Undo TableSpace:是兄用的特殊的tablespace鹃骂,用來取代過去的rollback segement的機制,主要的功能是提供用戶修改數(shù)據(jù)未commit之前的read consistency的功能以及rollback交易的功能罢绽。也因為undo tablespace主要是取代過去的rollback segement的機制畏线,所以不能存放其他種類的segement。只能是local managed良价。
創(chuàng)建undo?類型的表空間:
1create?undo tablespace? undo1 datafile?'/oracle/product/oradata/ora10/paul01.dbf'?size?20m;
Temporary Tablespace:
Temporary Tablespace也是系統(tǒng)用的特殊的Tablespace寝殴。當使用者需要做排序時蒿叠,有時就會使用Temporary Tablespace,因此里面的Segement的生命周期都很短蚣常,可能交易結束或者User的Session結束就會消失市咽。每個系統(tǒng)都必須要有一個預設的Temporary Tablespace(Default Temporary Tablespace),The DEFAULT TEMPORARY TABLESPACE clause of the CREATE DATABASE statement creates a default temporary tablespace for the database. 如果沒有Default Temporary Tablespace抵蚊,Create User的時候又忘了指定使用哪個Temporary Tablespace施绎,會以SYSTEM tablespace來當作Temporary Tablespace
以下列出幾個Temporary Tablespace的特性:
?????? 1. Temporary Tablespace是NOLOGGING模式,因此若數(shù)據(jù)庫損毀贞绳,做Recovery不需要恢復Temporary Tablespace谷醉。
?????? 2. Temporary最好是使用Local managed Tablespace
?????? 3. 若使用local managed模式,UNIFORM. SIZE參數(shù)最好是Sort_Area_Size的參數(shù)熔酷,這樣效能比較好孤紧。
?????? 4. Uniform. size預設1024K,而Sort_area_size預設是512K
?????? 5. Temporary Tablespace不能使用local managed的AUTOALLOCATE參數(shù)拒秘。
創(chuàng)建臨時表空間:
createtemporarytablespacetempdatafile'/oracle/product/oradata/ora10/paul01.dbf'size 20m? extent management local uniform size 4m;
TableSpace的Extent空間管理:Local Managed與Dictionary Managed
Local Managed與Dictionary Managed最主要的分別号显,在于空間管理方式的不同。Local managed的管理方式是讓每個TableSpace自己利用bitmaps去管理他自己的空間躺酒,而Dictionary Managed則是利用SYSTEM TableSpace的數(shù)據(jù)字典來做空間管理押蚤。這兩者最大的不同在于Local managed大大的改善了Oracle做空間管理(例如:產(chǎn)生新的Exten或釋放Extent...等)時,搶奪SYSTEM TableSpace資源的問題羹应。所以Oracle從8i以后已經(jīng)朝Local managed的方向去走了揽碘,所以我們應該盡量使用Local managed的方式才對
Local managed tablespace:
1. Local managed使用bitmaps做空間管理。
2. bitmaps中每個bit代表一個data block或者一堆相鄰的data block(extent)
3. 從10g開始园匹,SYSTEM Tablespace預設使用local managed-->Oracle建議使用local managed的證據(jù)雳刺。
4. 假如SYSTEM TableSpace是local managed,那么其他TableSpace必須是local managed裸违。
5. 若沒指定使用local managed或者dictionary managed掖桦,則預設使用local managed。
6. 使用local managed可以增進效能供汛,因為減少了SYSTEM TableSpace的效能競爭枪汪。
7. 使用local managed則不需要做空間縫合(loalescing),因為相鄰的不同大小的extent怔昨,辨識extent使用狀態(tài)的bits也在一起雀久,Oracle可以直接使用這些相鄰的extent。不需要先進行縫合才可以使用趁舀。這也可以增進部份效能赖捌。
local managed的extent空間管理(Extent Management):AUTOALLOCATE與UNIFORM
AUTOALLOCATE與UNIFORM這兩個參數(shù),是用來設定Local managed的extent大小的參數(shù)矮烹。AUTOALLOCATE是讓Oracle自己來決定extent的大性奖印奋隶;而UNIFORM則是強制規(guī)定TableSpace中extent的為固定的大小。通常若明確的知道extent必須多大悦荒,才會使用UNIFORM,使用UNIFORM的好處是每個extent的大小都相同嘹吨,不會產(chǎn)生空間破碎的問題搬味。但是如果無法預知extent必須多大,使用AUTOALLOCATE會比較好蟀拷,讓Oracle自己決定使用extent的大小碰纬,可以比較符合實際的需求,因此會比較節(jié)省空間问芬,但是這可能會產(chǎn)生部分空間破碎的問題悦析。使用AUTOEXTENT,Oracle會使用的extent大小為64k、1M此衅、8M强戴、64M。根據(jù)系統(tǒng)上使用的結果挡鞍,99.95%的extent都是使用64k骑歹、只有少部分使用1M的extent,所以其實破碎的情況不嚴重墨微,使用AUTOALLOCATE在系統(tǒng)上其實就夠用了道媚。想知道你的TableSpace所使用的Extent有幾種,
請用下列的語法:
1
2
3
4
Select?bytes,count(*)?from?dba_extents?where?tablespace_name='your_tablespace_name'?group?by?bytes;
Select?tablespace_name,bytes,?count(*)
from?dba_extents
group?by?bytes,tablespace_name;
Local managed中的Segment的空間管理(Segment Space Management ):AUTO與MANUAL
Tablespace中的Segment的空間管理上翘县,可以設置的參數(shù)為AUTO與MANUAL最域。MANUAL是使用我們熟悉的PCTUSED、FREELISTS锈麸、FREELIST GROUPS的方式來管理Segment中的data block镀脂;而AUTO則是使用bitmaps來管理data block。使用AUTO來管理的話掐隐,以往create tablespace或create table時設定的storage的參數(shù)設定都不需要再設定了滩愁,因為data block的管理已經(jīng)是bitmaps了一死,不再是free list了。如果沒有特別的需求話,使用AUTO會比使用MANUAL有更好的空間利用率典蜕,與效能上的提升。
1词裤、創(chuàng)建表空間
創(chuàng)建表空間的完整命令:
1
2
3
4
5
6
7
8
9
10
11
Create?[undo] tablespace <ts_name>
datafile <file_spec1> [,<file_spec2>]
mininum extent <m> k|m
blocksize <n> [k]
logging clause
force?logging
default?storage_clause
online | offline
permanent |?temporary
extent_manager_clause
segment_manager_clause
解析:1)症杏、undo指定系統(tǒng)將創(chuàng)建一個回滾表空間
2)、tablespace指定表空間名稱
3)伪节、datafile指定數(shù)據(jù)文件的路徑光羞、名稱绩鸣、大小及自增長狀況:具體形如'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF'size 50M autoextendonnext 10M maxsize 500M,
也可以指定on為off纱兑,就沒有后面的遞增和最大尺寸了呀闻,也可以在maxsize后面指定最大尺寸unlimited說明表空間無限大。
4)潜慎、mininum extent<m>k|m指出在表空間的extent的最小值捡多,這個參數(shù)可以減少空間碎片,保證在表空間的extent是這個數(shù)值的整數(shù)倍;
5)铐炫、blocksize<n>[k]設置塊的大小垒手,如果要設置這個參數(shù),必須設置成db_block_size的整數(shù)倍倒信;
6)科贬、logging cluse指示這個表空間上所有用戶對象的日志屬性,缺省是logging鳖悠;
7)榜掌、force logging指示表空間進入強制日志模式。此時系統(tǒng)將記錄表空間上對象的所有改變乘综,除了臨時段的改變唐责。這個參數(shù)高于logging參數(shù)中的nologging選項;
8)瘾带、default storage_clause聲明缺省的存儲子句鼠哥;
9)、online|offline指定表空間狀態(tài)看政;
10)朴恳、permanent| temporary指出表空間的屬性,是永久表空間還是臨時表空間允蚣。永久表空間存放的是永久對象于颖,
臨時表空間存放的是session生命期中存在的臨時對象。這個參數(shù)生成的臨時表空間創(chuàng)建后一直都是字典管理嚷兔,不能使用extent management local選項森渐。
如果要創(chuàng)建本地管理表空間,必須使用create temporary tablespace冒晰。聲明了這個參數(shù)就不能聲明block size同衣。
11)、extent_manager_clause說明表空間如何管理extent壶运。一旦聲明了這個子句耐齐,就只能通過移植的方式改變這些參數(shù)。
如果希望表空間本地管理的話,聲明local選項埠况。本地管理表空間是通過位圖管理的耸携。Autoallocate說明表空間自動分配extent,用戶不能指定extent的大小辕翰。
只有9.0以上的版本具有這個功能夺衍。Uniform說明表空間的范圍的固定大小,缺省是1M喜命。不能將本地管理的數(shù)據(jù)庫的SYSTEM表空間設置成字典管理刷后。
ORACLE推薦使用本地管理表空間。如果沒有設置這個子句渊抄,oracle會進行默認設置。如果初始化參數(shù)compatible小于9.0.0丧裁,那么系統(tǒng)創(chuàng)建字典管理表空間护桦,如果大于9.0.0,那么按如下設置:
如果沒有指定default storage_clause煎娇,oracle創(chuàng)建一個自動分配的本地管理表空間二庵;否則如果指定了mininum extent,
那么oracle判斷mininum extent缓呛、initial催享、next是否相等,以及pctincrease是否為0哟绊,
如果滿足這2個條件因妙,oracle吃醋昂就一個本地管理表空間,extent size是initial票髓,
如果不滿足攀涵,那么oracle將創(chuàng)建一個自動分配的本地管理表空間;
如果沒有指定mininum extent洽沟,那么oracle判斷initial和next是否相等以故,以及pctincrease是否為0,
如果滿足這2個條件裆操,那么oracle創(chuàng)建一個本地管理表空間并制定uniform怒详,否則oracle將創(chuàng)建一個自動分配的本地管理表空間。
(本地管理表空間只能存儲永久對象踪区。如果你聲明了local昆烁,則不能聲明default storage_clause,mininum extent缎岗,temporary)善玫;
12)、segment_management_clause : segmentspacemanagement auto。
2茅郎、表空間的狀態(tài):
Tablespace的狀態(tài)有3種:ONLINE蜗元、OFFLINE、READ ONLY系冗。
ONLINE是正常工作的狀態(tài)奕扣,OFFLINE狀態(tài)下,是不允許訪問數(shù)據(jù)的掌敬,
SYSTEM tablespace和DEFAULT temp tablespace是不能被OFFLINE的惯豆,且?guī)в衋ctive undo segments的tablespace也不能被OFFLINE。
切換ONLINE和OFFLINE狀態(tài)的命令是alter tablespace <ts_name> offline/online奔害。當狀態(tài)變成READ-ONLY時楷兽,會產(chǎn)生一個checkpoint,此時數(shù)據(jù)只能讀不能寫华临,但是可以drop對象芯杀,相關命令是alter tablespace <ts_name> read only和alter tablespace <ts_name> read write。
3雅潭、表空間的存儲設置
修改tablespace和datafiles的存儲設置揭厚。這項工作是指修改tablespace的大小和datafile的存放位置。
在修改tablespace的大小之前扶供,我們需要先知道tablespac的當前存儲情況筛圆。可以用下面的SQL語句實現(xiàn):
1
2
3
4
5
6
7
8
9
10
11
12
SELECT?a.tablespace_name,
a.bytes bytes_used,
b.largest,
round(((a.bytes - b.bytes) / a.bytes) * 100, 2) percent_used
FROM?(SELECT?tablespace_name,?SUM(bytes) bytes
FROM?Dba_Data_Files
GROUP?BY?tablespace_name) a,
(SELECT?tablespace_name,?SUM(bytes) bytes,?MAX(bytes) largest
FROM?dba_free_space
GROUP?BY?tablespace_name) b
WHERE?a.tablespace_name = b.tablespace_name
ORDER?BY?((a.bytes - b.bytes) / a.bytes)?DESC;
上面這條SQL語句中椿浓,有2條子查詢太援,第一條取得的是表空間的總字節(jié)數(shù),第二條取得的是表空間中余下的字節(jié)數(shù)扳碍,最終得到的結果是已經(jīng)使用的字節(jié)數(shù)和百分比粉寞。
修改tablespace的大小,主要是通過datafile的大小來實現(xiàn)的左腔,修改datafile的大小又有3種方法:
1)唧垦、使數(shù)據(jù)文件自增長;
2)液样、改變數(shù)據(jù)文件大姓窳痢;
3)鞭莽、添加數(shù)據(jù)文件坊秸。
使數(shù)據(jù)文件自增長:表DBA_DATA_FILES中有一個字段AUTOEXTENSIBLE與這個方法對應,它指示數(shù)據(jù)文件是否自增長澎怒,也就是數(shù)據(jù)文件不能滿足存儲需求時褒搔,是否自動增加大小來滿足需求。先運行下列命令創(chuàng)建一個datafile大小為5M的表空間—TEST:create tablespace test datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' size 5M;這個時候,AUTOEXTENSIBLE是no星瘾,也就是數(shù)據(jù)文件的大小是固定的走孽,不會自增長(當然,我們也可以在創(chuàng)建命令中加入指令設置自增長)琳状。下面我們手動來修改數(shù)據(jù)文件為自增長:alter database datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' autoextend on next 5M maxsize 50M;這條命令將TEST.DBF數(shù)據(jù)文件設置為按5M大小進行自增長磕瓷,最大為50M。(臨時表空間用alter database tempfile...念逞,下同)
改變數(shù)據(jù)文件大欣场:以前面的數(shù)據(jù)文件為例,我想將數(shù)據(jù)文件設置為100M大小翎承,可以執(zhí)行命令:
1alter?database?datafile?'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF'?resize 100M;
添加數(shù)據(jù)文件:這應該是最好的一種方式硕盹,便于管理。以TEST表空間為例叨咖,添加數(shù)據(jù)文件的命令如下:
altertablespace testadddatafile'E:\oracle\product\10.2.0\oradata\orcl\TEST01.DBF'size 5M autoextendonnext5M maxsize 50M;
這條命令就直接指定了數(shù)據(jù)文件自增長瘩例。
除了修改表空間的大小,存儲設置中還可以進行的一項工作就是移動數(shù)據(jù)文件芒澜。
移動數(shù)據(jù)文件有2種方法,一種是使用alter tablespace命令创淡,一種是使用alter database命令痴晦。
使用alter tablespace移動數(shù)據(jù)文件前,需要先將表空間OFFLINE琳彩,然后目標數(shù)據(jù)文件必須存在(也就是將需要移動的數(shù)據(jù)文件復制到目的地)誊酌。以將數(shù)據(jù)文件TEST01.DBF移動到上一層目錄為例。先執(zhí)行命令:alter tablespace test offline;然后將TEST01.DBF復制到上一級目錄露乏,再執(zhí)行命令:
1alter?tablespace test rename datafile E:\oracle\product\10.2.0\oradata\orcl\TEST01.DBF' to 'E:\oracle\product\10.2.0\oradata\TEST01.DBF';
然后再將表空間ONLINE就可以了:alter tablespace test online;碧浊。
使用alter database移動數(shù)據(jù)文件時,同樣瘟仿,目標數(shù)據(jù)文件必須存在(原文件的副本)箱锐,且數(shù)據(jù)庫需要處于MOUNTED狀態(tài)。
1
2
3
4
5
6
7
第一種方法劳较,已經(jīng)將數(shù)據(jù)文件移動到了父一級目錄驹止,下面再將它移回來。先關閉數(shù)據(jù)庫:
shutdown immediate;
然后啟動數(shù)據(jù)庫观蜗,
啟動選項為mount:startup mount臊恋;
然后執(zhí)行移動命令:
alter?database?rename file?'E:\oracle\product\10.2.0\oradata\TEST01.DBF'?to?'E:\oracle\product\10.2.0\oradata\orcl\TEST01.DBF';
再打開數(shù)據(jù)庫:alter?database?open
報錯了:
ORA-01113:文件7需要介質恢復
ORA-01110:數(shù)據(jù)文件7:’E:ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF’,細節(jié)還不明白墓捻,只知道數(shù)據(jù)庫認為這個數(shù)據(jù)文件收到破壞抖仅,需要使用備份、日志信息來恢復。這本來是個比較嚴重的問題撤卢,但是在這個實例中环凿,還是很好解決的,執(zhí)行命令:
recover datafile ’E:ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF’凸丸。提示完成介質恢復拷邢,再打開數(shù)據(jù)庫:alter database open;一切就正常了屎慢。
4瞭稼、刪除表空間
刪除表空間,使用命令drop tablespace <ts_name>腻惠。但是有3個選項需要注意:
INCLUDING CONTENTS:指示刪除表空間中的segments环肘;
INCLUDING CONTENTS AND DATAFILES:指示刪除segments和datafiles;
CASCADE CONSTRAINTS:刪除所有與該空間相關的完整性約束條件集灌。
Drop tablespace test INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
需要注意的是SYSTEM表空間以及具有active segments的表空間是無法刪除的悔雹。
a)TableSpace管理準則
1、使用多個TableSpace
* 用戶數(shù)據(jù)與數(shù)據(jù)字典數(shù)據(jù)分離欣喧,減少競爭
* 應用程序之間的數(shù)據(jù)分離腌零,防止某個TableSpace脫機后對多個程序造成影響
* 不同磁盤驅動器上存儲數(shù)據(jù),減少I/O競爭
* 回滾段數(shù)據(jù)與用戶數(shù)據(jù)分離唆阿,防止單磁盤故障造成數(shù)據(jù)永久丟失
* 可以控制單個TableSpace脫機益涧,提供更高的整體可用性
* 為特定類型數(shù)據(jù)庫使用保留TableSpace,可優(yōu)化TableSpace的使用
* 可以備份單獨的TableSpace
2驯鳖、指定表空間默認的存儲參數(shù)
為TableSpace設置合適的參數(shù)闲询,下文中詳細介紹。
3浅辙、為用戶指定表空間限額
可以有效控制TableSpace的大小扭弧,限制用戶權限防止發(fā)生意外。
b)創(chuàng)建TableSpace
1记舆、創(chuàng)建本地管理TableSpace
Oracle創(chuàng)建的TableSpace默認均是本地管理的鸽捻,明確的表述應該是:
在CREATE TABLESPACE 語句中EXTENT MANAGEMENT 子句中指定LOCAL。然后可以用AUTOALLOCATE 選項(默認)來使Oracle自動管理盤區(qū)
1
2
CREATE?TABLESPACE lmtbsb DATAFILE?'/u02/oracle/data/lmtbsb01.dbf'?SIZE?50M
EXTENT MANAGEMENT?LOCAL?AUTOALLOCATE;
也可以使用一個指定大小(UNIFORM SIZE)的同意盤區(qū)來管理該TableSpace
1
2
CREATE?TABLESPACE lmtbsb DATAFILE?'/u02/oracle/data/lmtbsb01.dbf'?SIZE?50M
EXTENT MANAGEMENT?LOCAL?UNIFORM?SIZE?128K;
如果未指定盤區(qū)大小泽腮,則默認為1M泊愧,說明數(shù)據(jù)文件至少要大于1MB
注:如果TableSpace被期望用于包含需要不同盤區(qū)大小和擁有很多盤區(qū)的大小變動的對象,那選擇AUTOALLOCATE是最好的選擇盛正。AUTOALLOCATE是一種管理TableSpace的簡便方法删咱,只是有可能會對一些空間造成浪費。如果需要準確控制未用空間豪筝,并能夠精確預計為一個或多個對象要非配的空間和盤區(qū)大小痰滋,那就可以使用UNIFORM摘能。
2、在本地管理TableSpace中指定段空間管理
可使用SEGMENT SPACE MANAGEMENT子句來設置端控件的管理模式敲街,有以下幾種模式:
MANUAL(默認):使用段中管理空閑空間的空閑列表团搞。
AUTO:使用位圖來管理段中的空閑空間。又稱為自動段空間管理多艇。
AUTO立功了一種更加簡單逻恐、有效的管理方法,完全消除了為表空間中創(chuàng)建的段指定和調整PCTUSED峻黍、FREELISTS复隆、FREELISTS GROUPS屬性的任何必要。
1
2
CREATE?TABLESPACE lmtbsb DATAFILE?'/u02/oracle/data/lmtbsb01.dbf'?SIZE?50M
EXTENT MANAGEMENT?LOCAL?SEGMENT?SPACE?MANAGEMENT AUTO;
注:LOB類型不能指定自動段空間管理姆涩。
3挽拂、修改本地管理TableSpace
* 不能講本地管理TableSpace改為本地管理的temp TableSpace
* 不能改變TableSpace的段空間管理辦法
* 本地管理TableSpace沒有必要合并空閑盤區(qū)
* 可以添加數(shù)據(jù)文件
* 可以改變TableSpace狀態(tài)(ONLINE/OFFLINE)
* 修改TableSpace為只讀or只寫
* rename數(shù)據(jù)文件
* 啟用/禁用該TableSpace數(shù)據(jù)文件的自動盤區(qū)大小
4、創(chuàng)建字典管理的TableSpace
1
2
3
4
5
6
7
8
9
CREATE?TABLESPACE tbsb
DATAFILE?'/u02/oracle/data/tbsb01.dbf'?SIZE?50M
EXTENT MANAGEMENT DICTIONARY
DEFAULT?STORAGE (
INITIAL 50K
NEXT?50K
MINEXTENTS 2
MAXEXTENTS 50
PCTINCREASE 0);
使用ALTER TABLESPACE語句可以進行以下操作:
* 添加一個新的文件
* 改變默認的存儲參數(shù)
* 合并TableSpace的空閑空間
* 可以改變TableSpace狀態(tài)(ONLINE/OFFLINE)
* 修改TableSpace為只讀or只寫
* rename數(shù)據(jù)文件
* 啟用/禁用該TableSpace數(shù)據(jù)文件的自動盤區(qū)大小
5骨饿、臨時表空間
臨時表空間主要用于提高多個排序操作的并發(fā)能力亏栈、減小開銷,或避免Oracle空間管理操作在一起進行宏赘。臨時表空間創(chuàng)建之后绒北,可以被多個用戶共享。
一個給定實例和表空間的所有排序操作共享一個單一的排序段察署。即排序段為一個給定表空間的每個執(zhí)行排序操作的實例而存在闷游。
排序段由使用臨時表空間用于排序的第一個語句創(chuàng)建,并在關閉時釋放箕母,一個盤區(qū)不能被多個事務共享储藐。
可以使用V$SORT_SEGMENT視圖來查看臨時表空間排序段的空間分配和回收情況
用V$SORT_USAGE視圖查看這些段的當前排序用戶
注:臨時表空間中不能創(chuàng)建明確對象俱济。
6嘶是、創(chuàng)建本地管理的臨時表空間
1
2
CREATE?TEMPORARY?TABLESPACE lmtemp TEMPFILE?'/u02/oracle/data/lmtemp01.dbf'?SIZE?20M REUSE
EXTENT MANAGEMENT?LOCAL?UNIFORM?SIZE?16M;
注1:臨時數(shù)據(jù)文件信息查詢與數(shù)據(jù)文件不同,需要查詢V$TEMPFILE和DBA_TEMP_FILES蛛碌,但結構與V$DATAFILE和DBA_DATA_FILES類似聂喇。
注2:臨時表空間在初次使用時才分配空間,可以更快創(chuàng)建和修改大小蔚携,但要注意磁盤大小希太。
7、本地管理臨時表空間的修改
1
2
3
4
5
6
7
8
9
10
11
12
13
* 添加臨時文件
ALTER?TABLESPACE lmtemp?ADD?TEMPFILE?'/u02/oracle/data/lmtemp02.dbf'?SIZE?20M REUSE;
* 改變臨時文件狀態(tài)
ALTER?DATABASE?TEMPFILE?'/u02/oracle/data/lmtemp02.dbf'?ONLINE|OFFLINE;
* 更改臨時文件大小
ALTER?DATABASE?TEMPFILE?'/u02/oracle/data/lmtemp02.dbf'?RESIZE 4M;
* 取消臨時文件并刪除相應操作系統(tǒng)文件
ALTER?DATABASE?TEMPFILE?'/u02/oracle/data/lmtemp02.dbf'?DROP
INCLUDING DATAFILES;
8酝蜒、創(chuàng)建字典管理的臨時表空間
1
2
3
4
5
6
7
8
9
CREATE?TABLESPACE sort
DATAFILE?'/u02/oracle/data/sort01.dbf'?SIZE?50M
DEFAULT?STORAGE (
INITIAL 2M
NEXT?2M
MINEXTENTS 1
PCTINCREASE 0)
EXTENT MANAGEMENT DICTIONARY
TEMPORARY;
注1:不能以這種方式創(chuàng)建EXTENT MANAGEMENT LOCAL的臨時表空間誊辉。
注2:可以使用ALTER TABLESPACE tbsa TEMPORARY;語句將一個現(xiàn)有的字典管理永久表空間改為臨時表空間。