表空間(TABLESPACE)是ORACLE數(shù)據(jù)庫中最大的邏輯結(jié)構(gòu)栅炒。ORACLE數(shù)據(jù)庫是由一個(gè)或多個(gè)表空間組成的波俄。它在物理上與磁盤上的數(shù)據(jù)文件相對(duì)應(yīng)(一個(gè)表空間由一個(gè)或多個(gè)數(shù)據(jù)文件組成,但一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間)热幔。從物理上說數(shù)據(jù)庫的數(shù)據(jù)被存放在數(shù)據(jù)文件中锈至,而從邏輯上說是被存放在表空間中的部脚。?
數(shù)據(jù)庫的邏輯配置實(shí)際上就是指表空間的配置。
一两残、表空間概述?
表空間是ORACLE數(shù)據(jù)庫中最大的邏輯結(jié)構(gòu)永毅。數(shù)據(jù)庫的所有對(duì)象和方案都被邏輯的保存在表空間中。
(一)表空間的特性與作用?
數(shù)據(jù)庫管理系統(tǒng)(DBMS)是建立在操作系統(tǒng)(OS)基礎(chǔ)上的磕昼,它的數(shù)據(jù)也必須存儲(chǔ)在各個(gè)文件中卷雕,如數(shù)據(jù)文件、重做日志文件票从、歸檔日志文件等漫雕。?
表不是文件,表不是空間峰鄙。?
表空間是組織結(jié)構(gòu)和分配空間的邏輯結(jié)構(gòu)浸间。除了數(shù)據(jù)文件之外,控制文件吟榴、重做日志文件魁蒜、歸檔日志文件等其他文件都不屬于任何表空間。?
表空間的特性如下:?
1.一個(gè)數(shù)據(jù)庫可以有多個(gè)表空間吩翻《悼矗可以在數(shù)據(jù)庫中創(chuàng)建、刪除表空間狭瞎;?
2.一個(gè)表空間只屬于一個(gè)數(shù)據(jù)庫细移;?
3.一個(gè)表空間必須要有一個(gè)數(shù)據(jù)文件;?
4.一個(gè)表空間的大小等于其中所有數(shù)據(jù)文件的大小之和熊锭。數(shù)據(jù)庫的大小等于其中所有表空間的大小之和弧轧;?
5.表空間可以被聯(lián)機(jī)和脫機(jī)。SYSTEM表空間不能被脫機(jī)碗殷;?
6.表空間可以在讀寫精绎、只讀狀態(tài)之間切換;?
7.每個(gè)表空間由一個(gè)或多個(gè)物理存在的操作系統(tǒng)的數(shù)據(jù)文件組成锌妻。這種數(shù)據(jù)文件可以具有固定的大小代乃,或允許其自動(dòng)變大》麓猓可以在表空間中添加襟己、刪除數(shù)據(jù)文件引谜;?
8.方案對(duì)象、表擎浴、索引的數(shù)據(jù)都被存儲(chǔ)在表空間的數(shù)據(jù)文件中员咽。一個(gè)數(shù)據(jù)文件存儲(chǔ)不下,就存儲(chǔ)在另一個(gè)數(shù)據(jù)文件中贮预,只要該數(shù)據(jù)文件是本表空間中的就可以贝室;?
9.一個(gè)用戶默認(rèn)使用一個(gè)表空間,但他的不同方案對(duì)象的數(shù)據(jù)可以被存儲(chǔ)在不同表空間中仿吞;?
10.一個(gè)用戶使用的表空間的數(shù)量是有一定配額的滑频,不能超出這個(gè)配額;?
11.可以根據(jù)使用目的唤冈,創(chuàng)建不同類型的表空間峡迷,如永久表空間、臨時(shí)表空間你虹、撤銷表空間绘搞、大表空間等。不同類型的表空間的格式傅物、使用方式及目的是不同的夯辖。
表空間的作用:?
1.控制數(shù)據(jù)庫所占用的磁盤空間;?
2.控制用戶所占用的表空間配額董饰,也就等于控制用戶所占用的配額空間蒿褂;?
3.通過將不同表的數(shù)據(jù)、分區(qū)表中不同分區(qū)的數(shù)據(jù)放置到不同的表空間中卒暂,可以提高數(shù)據(jù)庫的I/O性能啄栓,并有利于進(jìn)行部分備份和恢復(fù)等管理工作;?
4.能夠?qū)⒁粋€(gè)表的數(shù)據(jù)和這個(gè)表的索引數(shù)據(jù)分別防止到不同的表空間中也祠,同樣可以提高數(shù)據(jù)庫的I/O性能谴供;?
5.可以將表空間設(shè)置成只讀狀態(tài)而保持大量的靜態(tài)數(shù)據(jù)。
(二)表空間的類型?
一個(gè)數(shù)據(jù)庫通常有SYSTEM,SYSAUX,TEMP三個(gè)默認(rèn)表空間齿坷,一個(gè)或多個(gè)臨時(shí)表空間,而且還有一個(gè)撤銷表空間和幾個(gè)應(yīng)用程序?qū)S玫膽?yīng)用表空間数焊。?
這些表空間可以劃分為系統(tǒng)表空間和非系統(tǒng)表空間兩類永淌。?
系統(tǒng)數(shù)據(jù)(數(shù)組字典表及其數(shù)據(jù)) 系統(tǒng)表空間?
用戶數(shù)據(jù)(表、索引) 大表空間佩耳、小表空間?
臨時(shí)數(shù)據(jù) 臨時(shí)表空間?
撤銷數(shù)據(jù) 撤銷表空間
(1)系統(tǒng)表空間?
系統(tǒng)表空間包括SYSTEM表空間和SYSAUX表空間遂蛀,其余的表空間就是非系統(tǒng)表空間。系統(tǒng)表空間在所有數(shù)據(jù)庫中都是必須的干厚。一般存放到ORACLE的數(shù)據(jù)字典及其數(shù)據(jù)李滴。
(2)臨時(shí)表空間?
撤了撤銷(UNDO)表空間螃宙、相對(duì)于臨時(shí)(TEMPORARY)空間而言,其他表空間就是永久(PERMANENT)表空間所坯。?
當(dāng)執(zhí)行排序(ORDER BY)谆扎、分組匯總(GROUP BY)、索引(CREATE INDEX)等功能的SQL語句時(shí)芹助,會(huì)產(chǎn)生大量的臨時(shí)數(shù)據(jù)堂湖。服務(wù)器進(jìn)程首先將臨時(shí)數(shù)據(jù)存放到內(nèi)存結(jié)構(gòu)的PGA區(qū)的排序區(qū)中,當(dāng)排序區(qū)不夠用時(shí)状土,服務(wù)器進(jìn)程就會(huì)在臨時(shí)表空間中建立臨時(shí)段无蜂,并將這些臨時(shí)數(shù)據(jù)存放到臨時(shí)段中。?
如果在創(chuàng)建用戶時(shí)沒有為用戶指定一個(gè)臨時(shí)表空間蒙谓,那么就會(huì)使用SYSTEM表空間來說創(chuàng)建臨時(shí)段斥季,存放臨時(shí)數(shù)據(jù)。這樣做的結(jié)果是:?
1.占用了SYSTEM表空間的存儲(chǔ)空間累驮,使可用的存儲(chǔ)空間下降酣倾;?
2.頻繁的分配和釋放臨時(shí)段,會(huì)在SYSTEM表空間中產(chǎn)生大量的存儲(chǔ)碎片慰照,使磁盤的讀取效率下降灶挟。
如果在數(shù)據(jù)運(yùn)行過程中,經(jīng)常有大量的并發(fā)排序毒租,那么為了避免在SYSTEM表空間中存儲(chǔ)臨時(shí)數(shù)據(jù)稚铣,數(shù)據(jù)庫管理員應(yīng)該在數(shù)據(jù)庫中創(chuàng)建一個(gè)專門的用來存儲(chǔ)臨時(shí)數(shù)據(jù)的臨時(shí)表空間。?
臨時(shí)表空間對(duì)應(yīng)的是臨時(shí)文件墅垮,它與數(shù)據(jù)文件是有區(qū)別的惕医。數(shù)據(jù)文件在創(chuàng)建時(shí)就被完全分配和初始化,而臨時(shí)文件不一定保證被分配到指定的磁盤空間。如:在UNIX操作系統(tǒng)中孵运,將不實(shí)際分配臨時(shí)文件的磁盤空間捉撮,而是知道某個(gè)操作需要臨時(shí)表空間時(shí)才為臨時(shí)文件分配磁盤空間。這種延遲式的分配方法允許臨時(shí)文件被快速創(chuàng)建峡钓,但如果沒有預(yù)留出實(shí)際運(yùn)行時(shí)所需的磁盤空間,就可能在運(yùn)行時(shí)發(fā)生問題若河。?
臨時(shí)表空間可以被所有用戶共享使用能岩,如TEMP表空間可以被所有用戶共享使用。在ORACLE 8I中可以使用其他表空間作為臨時(shí)表空間萧福,而在ORACLE 9I中就開始引入默認(rèn)臨時(shí)表空間(DEFAULT TEMPORARY TABLESPACE)的設(shè)計(jì)了拉鹃,使用戶不能使用其他表空間作為臨時(shí)表空間。?
某個(gè)用戶使用哪個(gè)臨時(shí)表空間應(yīng)該是在創(chuàng)建該用戶時(shí)指定的。數(shù)據(jù)庫的默認(rèn)臨時(shí)表空間是在創(chuàng)建(CREATE DATABASE)數(shù)據(jù)庫時(shí)膏燕,由DEFAULT TEMPORARY TABLESPACE子句來指定的钥屈。?
在臨時(shí)表空間中,同一個(gè)例程的所有SQL語句的排序操作將共享使用一個(gè)排序段(SORT SEGMENT)坝辫。排序段在執(zhí)行第一條排序操作的SQL語句時(shí)被創(chuàng)建篷就,在例程關(guān)閉時(shí)被釋放》埽可以通過動(dòng)態(tài)性能視圖V$SORT_SEGMENT來查詢排序段的使用情況腻脏,通過動(dòng)態(tài)性能視圖V$SORT_USAGE來查詢使用排序段的會(huì)話和用戶信息。
(3)撤銷表空間?
在ORACLE 9I以前银锻,對(duì)于回退段(ROLLBACK SEGMENT)的設(shè)置與管理是一項(xiàng)十分復(fù)雜的工作永品。從ORACLE 9I開始,引入了一個(gè)全新的概念击纬,即自動(dòng)撤銷管理(AUTOMATIC UNDO MANAGEMENT)鼎姐,用撤銷(UNDO)表空間取代已經(jīng)使用了20年的回退段。實(shí)際上是將回退段(撤銷段)放入了撤銷表空間更振,而由例程自動(dòng)處理撤銷表空間中的回退段炕桨。使用自動(dòng)撤銷管理方式后,不僅可以減輕DBA的工作負(fù)擔(dān)肯腕,而且還可以獲得較好的回退性能献宫。通過查詢數(shù)據(jù)字典視圖DBA_ROLLBACK_SEGS,可以得到撤銷表空間中回退段的信息实撒。?
撤銷表空間存儲(chǔ)撤銷段姊途,撤銷段主要用于入下目的:?
1.用一條ROLLBACK語句明確的回退一個(gè)事務(wù);?
2.隱含的回退一個(gè)事務(wù)知态;?
3.重構(gòu)數(shù)據(jù)的一個(gè)讀一致圖像捷兰;?
4.從邏輯錯(cuò)誤中恢復(fù)。
在ORACLE中可以創(chuàng)建多個(gè)撤銷表空間负敏,但同一時(shí)刻值允許激活一個(gè)撤銷表空間贡茅。在初始化參數(shù)文件中用UNDO_TABLESPACE指出要激活的撤銷表空間。撤銷表空間的組織與管理由ORACLE內(nèi)部自動(dòng)完成其做。當(dāng)回退段不足時(shí)顶考,一個(gè)事務(wù)可以使用多個(gè)回退段,不會(huì)中止事務(wù)的運(yùn)行妖泄。數(shù)據(jù)庫管理員只需了解撤銷表空間是否有足夠的空間驹沿,而不必為每個(gè)事務(wù)設(shè)置回退段。
(4)大文件表空間與小文件表空間?
大文件(BIGFILE)表空間是ORACLE 10G新引進(jìn)的表空間浮庐。大文件表空間只能放置一個(gè)數(shù)據(jù)文件(或臨時(shí)文件)。但其數(shù)據(jù)文件可以包括4G個(gè)數(shù)據(jù)塊。?
大文件表空間都是為超大型數(shù)據(jù)庫設(shè)計(jì)的审残。如果一個(gè)超大型數(shù)據(jù)庫具有上千個(gè)數(shù)據(jù)文件的話梭域,更新數(shù)據(jù)文件頭部信息的操作就會(huì)花費(fèi)很長時(shí)間。如果使用了 大文件表空間搅轿,就可以使用大數(shù)據(jù)文件來減少數(shù)據(jù)文件的數(shù)量病涨,使更新數(shù)據(jù)文件頭部信息的操作更快一些。?
要想創(chuàng)建一個(gè)大文件表空間璧坟,可以使用CREATE語句中的使用的BIGFILE關(guān)鍵字既穆。CREATE BIGFILE TABLESPACE mybigtbs01 DATAFILE 'e:/mybigtbs01_1.dbf' SIZE 20G SEGMENT SPACE MANAGEMENT AUTO;?
小文件(SMALLFILE)表空間是以前ORACLE表空間的新命名。在小文件表空間中可以放置多個(gè)數(shù)據(jù)文件雀鹃。一個(gè)數(shù)據(jù)庫可以放置多達(dá)64K個(gè)數(shù)據(jù)文件幻工。?
SYSTEM和SYSAUX表空間總是被創(chuàng)建為小文件表空間。?
想要?jiǎng)?chuàng)建一個(gè)小文件表空間黎茎,可以在CREATE語句中使用SMALLFILE關(guān)鍵字(或者不適用此類關(guān)鍵字)囊颅。CREATE SMALLFILE TEMPORARY TABLESPACE mytmptbs01 TEMPFILE 'e:/mytmptbs01_1.dbf' SIZE 4M UNIFORM SIZE 64K;
(三)表空間的區(qū)、段管理方式?
ORACLE 10G的表空間是按照區(qū)和段空間進(jìn)行管理的傅瞻。?
(1)區(qū)管理方式?
針對(duì)區(qū)的分配方式不同踢代,表空間有兩種管理方式。ORACLE各個(gè)版本所支持的管理方式如下:?
字典管理方式 ORACLE 7,ORACLE 8,ORACLE 8I,ORACLE 9I;?
本地管理方式 ORACLE 8I,ORACLE 9I,ORACLE 10G;
字典管理方式(DICTIONARY-MANAGED TABLESPACE,DMT)?
字典管理方式是傳統(tǒng)的管理方式嗅骄,是為了與早期版本兼容而保留的區(qū)管理方式胳挎。在字典管理方式下,使用數(shù)據(jù)字典來管理存儲(chǔ)空間的分配溺森。?
當(dāng)在表空間中分配新的區(qū)慕爬,或回收已分配的區(qū)時(shí),ORACLE將對(duì)數(shù)據(jù)字典中的相關(guān)“基礎(chǔ)表”進(jìn)行查詢儿惫、更新澡罚,并且在這一過程中,使用單線程搜索方法肾请,速度較慢留搔。另外,對(duì)表的更新操作會(huì)產(chǎn)生會(huì)退信息和重做信息铛铁,因此隔显,在分配區(qū)或回收區(qū)時(shí),會(huì)在數(shù)據(jù)庫中產(chǎn)生會(huì)退信息和重做信息饵逐。這是字典管理方式的特點(diǎn)括眠,也是它的缺點(diǎn)。?
在創(chuàng)建字典管理方式的表空間時(shí)倍权,可以在DEFAULT STORAGE子句中設(shè)置INITIAL,NEXT,MINEXTENTS,MAXENTENTS,PCTINCREASE等參數(shù)來為區(qū)設(shè)置存儲(chǔ)管理方式掷豺,以指定表空間中區(qū)的默認(rèn)分配方式捞烟。這樣,如果在這種表空間中創(chuàng)建表当船、索引等方案對(duì)象時(shí)题画,沒有使用DEFAULT STORAGE子句,他們就會(huì)自動(dòng)繼承表空間的存儲(chǔ)參數(shù)設(shè)置德频。?
如果其他表空間要采用字典管理方式苍息,則要求SYSTEM表空間也必須采用字典管理方式,并且必須在CREATE TABLESPACE語句中顯示的使用EXTENT MANAGEMENT DICTIONARY子句進(jìn)行申明壹置。字典管理方式是被淘汰的表空間管理方式竞思,從ORACLE 9I開始不再支持這種方式。
本地管理方式(LOCAL-MANAGED TABLESPACE,LMT)?
本地管理方式是一種新的钞护、改進(jìn)的管理方式盖喷。從ORACLE 9I開始,創(chuàng)建表空間時(shí)默認(rèn)使用本地管理方式患亿。?
本地管理方式下传蹈,表空間中分配與區(qū)回收的管理信息都被存儲(chǔ)在表空間的數(shù)據(jù)文件中,而與數(shù)據(jù)字典無關(guān)步藕。表空間會(huì)在每個(gè)數(shù)據(jù)文件中維護(hù)一個(gè)"位圖(BITMAP)"結(jié)構(gòu)惦界,用于記錄表空間中所有區(qū)的分配情況。?
ORACLE為每個(gè)可能的區(qū)都保留了一位咙冗。該位為1或0沾歪,表示該區(qū)正在使用或空閑。位圖圖像消耗64KB的表空間雾消。當(dāng)在表空間中分配的區(qū)灾搏,或回收已分配的區(qū)時(shí),ORACLE將對(duì)數(shù)據(jù)文件中的"位圖"進(jìn)行更新立润。因此這種更新不是對(duì)表的更新操作狂窑,所以不會(huì)產(chǎn)生回退信息和重做信息。?
與字典管理方式相比桑腮,本地管理方式具有如下的好處:?
1.因?yàn)榭臻g的分配和回收不需要對(duì)數(shù)據(jù)庫進(jìn)行訪問泉哈,而只是簡單的改變數(shù)據(jù)文件中的位圖,所以能夠提高空間存儲(chǔ)管理的速度和并發(fā)性破讨;?
2.能夠避免在字典管理方式中空間分配期間可能出現(xiàn)的遞歸現(xiàn)象丛晦,所以提高了空間存儲(chǔ)管理的性能。?
3.允許將數(shù)據(jù)庫作為只讀的備用數(shù)據(jù)庫(STANDBY DATABASE)提陶。由于不會(huì)產(chǎn)生會(huì)退信息和重做信息烫沙,所以不會(huì)向數(shù)據(jù)庫中寫信息,這樣就可以將整個(gè)數(shù)據(jù)庫設(shè)置為只讀狀態(tài)隙笆。這種數(shù)據(jù)庫可以作為備用數(shù)據(jù)庫锌蓄。?
4.簡化了空間分配升筏,以為當(dāng)指定了AUTOALLOCATE子句時(shí),ORACLE會(huì)自動(dòng)選擇合適的區(qū)大小瘸爽,不再需要用戶進(jìn)行任何干預(yù)仰冠;?
5.減少用戶對(duì)數(shù)據(jù)庫字典的依賴,因?yàn)楸匾男畔⒍急淮鎯?chǔ)在數(shù)據(jù)文件的位圖中了蝶糯,而不是保存在數(shù)據(jù)字典中;?
6.不存在磁盤碎片問題辆沦。使用位圖的方法去查詢空閑空間昼捍,相鄰的空閑塊被視為一個(gè)大的空閑塊,從設(shè)計(jì)上保證自動(dòng)合并磁盤碎片肢扯,碎片產(chǎn)生后由系統(tǒng)自動(dòng)消除妒茬;?
7.DBMS_SPACE_ADMIN包對(duì)本地管理的表空間提供維護(hù)過程。
在字典管理方式下蔚晨,如果對(duì)某個(gè)表進(jìn)行了更新乍钻,這時(shí)會(huì)產(chǎn)生存儲(chǔ)管理操作,而該存儲(chǔ)管理操作肯定會(huì)產(chǎn)生回退信息和重做信息铭腕,導(dǎo)致對(duì)回退段和重做日志文件進(jìn)行讀寫银择,從而又產(chǎn)生存儲(chǔ)管理操作,形成了遞歸現(xiàn)象累舷。?
在字典管理方式下浩考,如果查詢操作包含排序,則數(shù)據(jù)庫需要為排序分配臨時(shí)段被盈,這會(huì)引起存儲(chǔ)空間的分配操作析孽,也就會(huì)對(duì)數(shù)據(jù)字典進(jìn)行更新,所以數(shù)據(jù)庫必須處于讀寫狀態(tài)只怎,而不能處于只讀狀態(tài)袜瞬。
在本地管理方式下,可以用以下兩個(gè)選項(xiàng)來指定表空間的區(qū)的分配方式:?
1. 統(tǒng)一(UNIFORM):統(tǒng)一分配身堡,指定表空間中所有區(qū)的大小都相同邓尤。區(qū)的大小的默認(rèn)值是1MB,也可以指定這個(gè)大小盾沫。但不能在撤銷表空間中使用這個(gè)選項(xiàng)裁赠;?
2.自動(dòng)(AUTOALLOCATE或SYSTEM)自動(dòng)分配,指定由ORACLE系統(tǒng)來自動(dòng)管理區(qū)的大小赴精,這是默認(rèn)的設(shè)置佩捞。
在自動(dòng)去的分配方式下,區(qū)的大小隨表的大小自動(dòng)動(dòng)態(tài)改變蕾哟,他們之間的對(duì)應(yīng)關(guān)系如下:?
表大小???????????????????? 區(qū)大小?
64KB(或前16個(gè)區(qū))?????????? 64KB?
1MB(接下來的63個(gè)區(qū))??????? 1MB?
64MB(接下來的120個(gè)區(qū))????? 8MB?
1000MB(以后的區(qū))?????????? 64MB
當(dāng)表的大小不超過64KB時(shí)一忱,表空每個(gè)區(qū)的大小為64K莲蜘;?
當(dāng)表的大小不達(dá)到1MB時(shí),表中每個(gè)區(qū)的大小為1MB帘营;?
當(dāng)表的大小超過64MB且小于1000MB時(shí)票渠,區(qū)的大小都是8MB;當(dāng)表的大小達(dá)到1000MB時(shí)芬迄,區(qū)的大小為64MB问顷。?
也就是ishuo,這個(gè)算法只能使小表取小區(qū)禀梳,大表取大區(qū)杜窄,避免大表擁有過多的區(qū)。所以算途,自動(dòng)選項(xiàng)最適合于由小表和大表構(gòu)成的一個(gè)多用途的數(shù)據(jù)庫系統(tǒng)塞耕。但是,對(duì)于數(shù)據(jù)超過1GB的大表嘴瓤,系統(tǒng)在分配磁盤空間時(shí)一次分配64MB扫外,如果所插入的數(shù)據(jù)沒有達(dá)到64MB,則可能造成空間的浪費(fèi)廓脆。?
通常筛谚,使用自動(dòng)是最佳的選擇。
(2)段空間管理方式?
在本地管理方式的表空間中停忿,除了可以用UNIFORM和AUTOALLOCATE來指定區(qū)的分配方式之外刻获,還可以指定段空間的管理方式。段空間管理方式主要是指ORACLE用來管理段中已用數(shù)據(jù)塊和空閑數(shù)據(jù)塊的機(jī)制瞎嬉。?
在本地管理方式下蝎毡,可以用如下兩個(gè)關(guān)鍵字來指定表空間的段空間管理方式:?
1.MANUAL(手動(dòng))方式,這時(shí)ORACLE將使用空閑列表(FREE LIST)來管理段的空閑數(shù)據(jù)塊氧枣。這是為了與以前的版本相兼容而保留的沐兵。?
2.AUTO(自動(dòng))方式,這時(shí)ORACLE將使用位圖(BITMAP)來管理段的已用數(shù)據(jù)塊和空閑數(shù)據(jù)塊便监。即扎谎,通過位圖中單元的取值來判斷段匯總的數(shù)據(jù)塊是否可用。?
空閑列表(FREELIST)是傳統(tǒng)的段空間管理方式烧董,段中所有的空閑數(shù)據(jù)塊都被放入一個(gè)空閑列表中毁靶,在需要存儲(chǔ)空間時(shí)據(jù)在該列表中進(jìn)行搜索。與空閑列表相比逊移,使用位圖的自動(dòng)方式能夠提供更好的存儲(chǔ)利用率预吆。因?yàn)樵谧詣?dòng)方式下,用戶不需要在創(chuàng)建方案對(duì)象時(shí)通過指定PCTFREE,PCTUSED,FREELIST,FREELIST GROUP等參數(shù)來為段設(shè)置存儲(chǔ)管理方式胳泉,即使設(shè)置了拐叉,也將會(huì)被忽略岩遗。?
當(dāng)SYSTEM表空間的區(qū)管理方式是本地管理方式時(shí)則不可能創(chuàng)建字典管理的表空間,但可以創(chuàng)建本地管理的表空間凤瘦。?
另外宿礁,創(chuàng)建表空間這種修改數(shù)據(jù)庫物理結(jié)構(gòu)的信息會(huì)同時(shí)被記錄到預(yù)警日志文件中。
(四)表空間的狀態(tài)?
處于不同狀態(tài)的表空間蔬芥,其使用方式有所不同梆靖。?
SYSTEM表空間不能被設(shè)置為只讀狀態(tài)或脫機(jī)狀態(tài),因?yàn)樵跀?shù)據(jù)庫進(jìn)行過程中始終會(huì)使用到SYSTEM表空間中的數(shù)據(jù)笔诵。?
(1)讀寫狀態(tài)?
讀寫(READ-WRITE)?
默認(rèn)情況下所有的表空間都是讀寫狀態(tài)的涤姊。任何具有表空間配額并且具有適當(dāng)權(quán)限的用戶都可以讀寫該表空間中的數(shù)據(jù)。?
只讀(READ-ONLY)?
如果將表空間設(shè)置為只讀狀態(tài)嗤放,則任何用戶都無法向表空間中寫入數(shù)據(jù),也無法修改表空間中已有的數(shù)據(jù)壁酬。這種限制與用戶的權(quán)限無關(guān)次酌。將表空間設(shè)置為只讀狀態(tài)的主要目的是,避免對(duì)數(shù)據(jù)庫進(jìn)行修改舆乔。使用戶只能查詢其中的數(shù)據(jù)岳服,而不能修改其中的數(shù)據(jù)。同時(shí)希俩,由于只讀表空間中的數(shù)據(jù)不會(huì)被修改吊宋,因此DBA只需將只讀表空間備份一次即可,不必再次對(duì)這個(gè)表空間進(jìn)行備份颜武。如果數(shù)據(jù)庫中保存大量的不允許用戶修改璃搜、但又允許用戶訪問的數(shù)據(jù)。
(2)脫機(jī)狀態(tài)?
通過將某個(gè)表空間設(shè)置為脫機(jī)狀態(tài)鳞上,以使該表空間暫時(shí)不讓用戶訪問这吻。?
脫機(jī)模式有以下4種:?
1.正常(NORMAL):默認(rèn)的脫機(jī)模式。?
2.臨時(shí)(TEMPORARY):?
3.立即(IMMEDIATE):?
4.用于恢復(fù)(FOR RECOVER):
二篙议、管理表空間的準(zhǔn)則
(一)確定表空間的大小
(1)確定表的大小
(2)確定表空間的大小
(二)表空間的配置
(1)表空間的層次結(jié)構(gòu)
(2)表空間的分配
(三)為用戶設(shè)置表空間配額和臨時(shí)表空間
三唾糯、創(chuàng)建表空間?
創(chuàng)建表空間的步驟因操作系統(tǒng)帶的不同而不同。然而鬼贱,在所有的情況中移怯,用戶都應(yīng)該事先通過操作系統(tǒng)的功能創(chuàng)建一個(gè)目錄結(jié)構(gòu),以便將新表
空間的數(shù)據(jù)文件(一個(gè)表空間必須要有一個(gè)數(shù)據(jù)文件)分配到相應(yīng)的目錄中这难。在大多數(shù)操作系統(tǒng)中舟误,當(dāng)通過添加數(shù)據(jù)文件來創(chuàng)建一個(gè)新表空間或
修改一個(gè)表空間時(shí),應(yīng)該指出大小和完全限定的文件名(即包括目錄結(jié)構(gòu)和文件的擴(kuò)展名)姻乓。在每一種情況中脐帝,都由ORACLE按所指定的信息來自
動(dòng)創(chuàng)建和格式化數(shù)據(jù)文件同云。?
與表空間對(duì)應(yīng)的物理結(jié)構(gòu)是數(shù)據(jù)文件。在創(chuàng)建表空間的過程中要指定它所使用的數(shù)據(jù)文件的位置和文件名堵腹。實(shí)際上炸站,在表空間的創(chuàng)建中,
ORACLE會(huì)完成以下幾個(gè)工作:?
1.在數(shù)據(jù)字典和控制文件中記錄該新創(chuàng)建的表空間疚顷;?
2.在操作系統(tǒng)中按指定的位置和文件名創(chuàng)建指定大小的操作系統(tǒng)文件旱易,作為該表空間對(duì)應(yīng)的數(shù)據(jù)文件;?
3.在預(yù)警文件中記錄創(chuàng)建表空間的信息腿堤。
CREATE TABLESPACE 創(chuàng)建(永久)表空間?
CREATE BIGFILE TABLESPACE 創(chuàng)建大文件表空間?
CREATE TEMPORARY TABLESPACE 創(chuàng)建臨時(shí)表空間?
CREATE UNDO TABLESPACE 創(chuàng)建撤銷表空間
用戶必須擁有CREATE TABLESPACE系統(tǒng)權(quán)限才能創(chuàng)建表空間阀坏。臨時(shí)表空間和撤銷表空間都是特殊表空間,他們與一般表空間不同的是笆檀,用戶并不
能在其中創(chuàng)建方案對(duì)象忌堂,因此,需要在CREATE語句中添加TEMPORARY和UNDO關(guān)鍵詞酗洒。?
在ORACLE 8I以前士修,所有的表空間都創(chuàng)建為字典管理。從ORACLE 8I開始樱衷,用戶能夠創(chuàng)建本地管理的表空間棋嘲,他們使用位圖代替了數(shù)據(jù)字典表開
跟蹤已用的和空閑的空間。因?yàn)楸镜毓芾淼谋砜臻g有更好的性能矩桂,而且更加容易管理沸移,所以,從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ù)文件時(shí)癞蚕,不能使用相對(duì)路徑笆制,只能使用絕對(duì)路徑。并且涣达,如果沒有提供文件名的后綴在辆,則無后綴。
(一)創(chuàng)建(永久)表空間?
如果不指定PERMANENT,TEMPORARY,UNDO選項(xiàng)度苔,或指定了PERMANENT選項(xiàng)匆篓,則創(chuàng)建的是永久表空間,即永久保存其中的數(shù)據(jù)庫對(duì)象的數(shù)據(jù)寇窑。
#######################################################
#######################################################
創(chuàng)建(永久)表空間,不自動(dòng)擴(kuò)展
CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M
手動(dòng)使其不自動(dòng)擴(kuò)展
ALTER DATABASE DATAFILE 'D:/ORACLE/ORADATA/YKYY/DRSYS01.DBF' AUTOEXTEND OFF
修改數(shù)據(jù)文件大小:
ALTER DATABASE DATAFILE 'D:/ORACLE/ORADATA/YKYY/USERS01.DBF' RESIZE 5120M
增加數(shù)據(jù)文件
ALTER TABLESPACE USERS ADD DATAFILE 'D:/ORACLE/ORADATA/YKYY/USERS11.DBF' size 5120M
######################################################
有三種創(chuàng)建(永久)表空間的方法:?
(1)使用AUTOALLOCATE區(qū)分配方式?
如果DBA能夠預(yù)測到表空間中存放的度喜愛那個(gè)所需要的區(qū)大小會(huì)有很大不同鸦概,則使用AUTOALLOCATE區(qū)分配方式是比較好的選擇。在這種方式下
,ORACLE將自動(dòng)按表空間中不同對(duì)象的大小分配相應(yīng)大小的區(qū)(有一個(gè)表大小與區(qū)大小的對(duì)應(yīng)關(guān)系窗市,最小的區(qū)為64KB)先慷。AUTOALLOCATE區(qū)分配方
式的缺點(diǎn)是在表空間中可能會(huì)造成一些磁盤空間的浪費(fèi),但是這一點(diǎn)代價(jià)相對(duì)DBA工作量的減少來說是值得的咨察。?
CREATE TABLESPACE mytbs01 DATAFILE 'e:/mytbs01.dbf' SIZE 2M AUTOALLOCATE;
(2)使用UNIFORM區(qū)分配方式?
如果DBA能夠預(yù)測到表空間中存放的大部分對(duì)象都要求使用相同大小的區(qū)论熙,那么,使用UNIFORM區(qū)分配方式是比較好的選擇摄狱。在這種情況下脓诡,
ORACLE將為表空間中所有對(duì)象都分配指定的相同 大小的區(qū)(默認(rèn)大小是1MB)。UNIFORM區(qū)分配方式的優(yōu)點(diǎn)是在表空間中不會(huì)產(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;?
但是此時(shí)就不能再指定表空間的區(qū)分配方式了酣衷,否則會(huì)有錯(cuò)誤提示交惯。
(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選項(xiàng)和創(chuàng)建非標(biāo)準(zhǔn)塊表空間?
有時(shí)候要求數(shù)據(jù)庫支持多個(gè)塊大小的表空間(大表的數(shù)據(jù)存放在大塊的表空間上更有效)牡借,即必須創(chuàng)建有不同于初始化參數(shù)DB_BLOCK_SIZE指定的
標(biāo)準(zhǔn)的ORACLE塊大小的表空間,此時(shí)就可以使用這個(gè)選項(xiàng)袭异。這個(gè)選項(xiàng)只適用于永久表空間钠龙。?
例如現(xiàn)在DB_BLOCK_SIZE參數(shù)的值是8K,則可以創(chuàng)建BLOCKSIZE選項(xiàng)是8K的表空間(如果不用BLOCKSIZE選項(xiàng)指定塊的大小御铃,就采用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的表空間,否則會(huì)有錯(cuò)誤提示:?
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ù)庫的新特性咬腋,而且僅在本地管理的表空間中才支持大文件表空間。這種表空間只能包括一個(gè)數(shù)據(jù)文件睡互,該數(shù)據(jù)
文件可以包含4G個(gè)塊根竿。能顯著提高ORACLE數(shù)據(jù)庫的存儲(chǔ)能力并減少數(shù)據(jù)文件的個(gè)數(shù)。?
CREATE BIGFILE TABLESPACE mybigtbs01 DATAFILE 'e:/mybigtbs01_1.dbf' SIZE 2M SEGMENT SPACE MANAGEMENT AUTO;?
在創(chuàng)建大文件表空間時(shí)可以指定區(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;就會(huì)出現(xiàn)錯(cuò)誤提示
。
(三)創(chuàng)建臨時(shí)表空間?
如果指定了TEMPORARY選項(xiàng)妻怎,則創(chuàng)建的就是臨時(shí)表空間壳炎,即ORACLE會(huì)用這種表空間來創(chuàng)建臨時(shí)段,以便排序操作時(shí)使用逼侦。這個(gè)臨時(shí)段是全體用戶
共享的匿辩,即使排序操作結(jié)束了腰耙,ORACLE也不會(huì)釋放這個(gè)臨時(shí)段。這可以提高排序操作較多的應(yīng)用系統(tǒng)的執(zhí)行性能铲球,因?yàn)镺RACLE不必每次遇到一
個(gè)排序操作就分配一個(gè)臨時(shí)段挺庞,可以采用以下方法創(chuàng)建臨時(shí)表空間:?
(1)創(chuàng)建臨時(shí)表空間?
如果在數(shù)據(jù)庫運(yùn)行過程中經(jīng)常有大量排序工作要做,為了提高排序性能就應(yīng)該建立多個(gè)鏈?zhǔn)奖砜臻g睬辐。?
CREATE SMALLFILE TEMPORARY TABLESPACE mytmptbs01 TEMPFILE 'e:/mytmptbs01_1.dbf' SIZE 4M UNIFORM SIZE 64K;?
必須用關(guān)鍵字TEMPFILE代替DATAFILE挠阁。另外,臨時(shí)表空間使用臨時(shí)文件而不是數(shù)據(jù)文件來創(chuàng)建溯饵。臨時(shí)文件只能與臨時(shí)表空間一起使用侵俗,不需要
備份,也不會(huì)把數(shù)據(jù)修改記錄到重做日志中丰刊。?
在創(chuàng)建臨時(shí)表空間時(shí)隘谣,區(qū)分配方式不能指定為AUTOALLOCATE方式,否則會(huì)出現(xiàn)錯(cuò)誤提示啄巧。
(2)創(chuàng)建大文件臨時(shí)表空間?
從ORACLE 10G開始寻歧,允許使用CREATE BIGFILE TEMPORARY TABLESPACE命令來創(chuàng)建只包含一個(gè)臨時(shí)文件的大文件臨時(shí)表空間。?
CREATE BIGFILE TEMPORARY TABLESPACE mybigtmptbs02 TEMPFILE 'e:/mybigtmptbs02_1.dbf' SIZE 4M UNIFORM SIZE 64K;?
在創(chuàng)建臨時(shí)表空間時(shí)秩仆,段管理方式不能指定為AUTO方式码泛,否則會(huì)出現(xiàn)錯(cuò)誤提示。
(四)創(chuàng)建撤銷表空間?
撤銷表空間(UNDO TABLESPACE)用戶存儲(chǔ)撤銷段澄耍,該表空間只能使用本地管理方式噪珊。?
當(dāng)執(zhí)行CREATE DATABASE語句創(chuàng)建數(shù)據(jù)庫時(shí),可以創(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表空間時(shí)不能指定統(tǒng)一區(qū)大小的選項(xiàng)阵难,否則會(huì)有錯(cuò)誤提示。
如果想使用UNDO表空間的管理功能芒填,就需要在初始化參數(shù)文件中設(shè)置如下參數(shù):?
*.undo_management='AUTO'?
*.undo_tablespace='UNDOTBS1'?
其中呜叫,undo_management參數(shù)必須設(shè)置成AUTO,否則將使用回退表空間(ROLLBACK TABLESPACE)殿衰;undo_tablespace參數(shù)用于指定要使用哪個(gè)UNDO
表空間怀偷。?
很顯然可以創(chuàng)建多個(gè)UNDO表空間,但一次只能使用一個(gè)UNDO表空間播玖。
可以用以下的語句修改初始化參數(shù)文件椎工,就愛你個(gè)當(dāng)前使用的UNDO表空間切換到另一個(gè)UNDO表空間。?
ALTER SYSTEM SET undo_tablespace='new_undo_tablespace' SCOPE=SPFILE;
當(dāng)一個(gè)UNDO表空間切換到另一個(gè)UNDO表空間之后,就可以在前一個(gè)UNDO表空間中的活躍事務(wù)全部完成后刪除就的表空間维蒙。?
可以修改UNDO表空間掰吕,如同增加一個(gè)數(shù)據(jù)文件、重新命名表空間颅痊、聯(lián)機(jī)/脫機(jī)數(shù)據(jù)文件殖熟、備份表空間等。與其他表空間一樣斑响,正在使用的UNDO表
空間是不允許被刪除的菱属,即只有在其中已經(jīng)沒有未提交的事務(wù)時(shí)才能將其刪除。?
可以用V$TRANSACTION視圖來檢查其中是否還有未提交的事務(wù)舰罚。
四纽门、修改表空間?
不論是字典管理表空間還是本地管理表空間,在表空間被創(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ò)誤提示频鉴。
五、刪除表空間?
如果不再需要一個(gè)表空間及其內(nèi)容(該表空間所包含的段恋拍,或所有的數(shù)據(jù)文件)垛孔,就可以將該表空間中從數(shù)據(jù)庫中刪除。ORACLE數(shù)據(jù)庫中的任何
表空間施敢,除系統(tǒng)必須的表空間(SYSTEM,SYSAUX,TEMP)外周荐,都可以被刪除狭莱。?
一旦一個(gè)表空間已經(jīng)被刪除,該表空間的數(shù)據(jù)就不能恢復(fù)了概作。因而腋妙,一定要確保一個(gè)將被刪除的表空間所包含的所有數(shù)據(jù)將來都不再需要了。
另外讯榕,在從數(shù)據(jù)庫刪除表空間的前后骤素,都需要對(duì)數(shù)據(jù)庫做一次完全備份。這樣即使錯(cuò)誤的刪除了一個(gè)表空間愚屁,如果數(shù)據(jù)庫在刪除表空間后遇到
問題谆甜,還能夠恢復(fù)該數(shù)據(jù)庫。?
不能刪除包含任何活動(dòng)端的表空間集绰。為了簡單规辱,應(yīng)該是表空間在被刪除之間脫機(jī)。?
要?jiǎng)h除一個(gè)表空間栽燕,使用DROP TABLESPACE tablespace_name語句罕袋。用戶必須擁有DROP TABLESPACE系統(tǒng)權(quán)限才能刪除一個(gè)表空間。?
要?jiǎng)h除一個(gè)非空的表空間碍岔,就要使用INCLUDING CONTENTS選項(xiàng)浴讯,否則會(huì)有錯(cuò)誤提示。?
以上的語句只會(huì)從數(shù)據(jù)字典蔼啦、控制文件刪除表空間信息榆纽,而與其相關(guān)的數(shù)據(jù)文件仍然存在于磁盤上。但是捏肢,當(dāng)表空間一旦被刪除奈籽,無論它所包
括的數(shù)據(jù)文件是否被刪除,這些數(shù)據(jù)文件愛你都會(huì)時(shí)區(qū)作用鸵赫。?
從ORACLE 9I開始衣屏,在刪除表空間的同時(shí)還可以聯(lián)機(jī)的刪除與其相關(guān)的數(shù)據(jù)文件。當(dāng)然辩棒,如果在ORACLE刪除表空間的同時(shí)狼忱,沒有只是它刪除數(shù)據(jù)
文件,就必須在以后使用合適的操作系統(tǒng)命令來刪除他們一睁。?
要?jiǎng)h除一個(gè)表空間的同時(shí)刪除與他相關(guān)的數(shù)據(jù)文件钻弄,就必須使用INCLUDING CONTENTS AND DATAFILES子句。?
ALTER TABLESPACE mytbs06 OFFLINE;?
DROP TABLESPACE mytbs06 INCLUDING CONTENTS AND DATAFILES;