詳聊Oracle用戶表空間寶典
Oracle還是比較常用的,于是我研究了一下Oracle用戶表空間,在這里拿出來和大家分享一下,希望對(duì)大家有用。在我們?yōu)槲④浀腘TFS分區(qū)格式中的用戶磁盤配額鼓掌的時(shí)候,Oracle數(shù)據(jù)庫中也已經(jīng)實(shí)現(xiàn)了用戶磁盤配額的技術(shù)。可以借助表空間,來對(duì)用戶進(jìn)行磁盤配額管理。利用表空間的用戶磁盤配額,可以實(shí)現(xiàn)很多功能。
如可以利用用戶磁盤配額,來管理用戶創(chuàng)建數(shù)據(jù)庫對(duì)象的能力。我們都知道,若用戶想要在某個(gè)表空間中創(chuàng)建方案對(duì)象的話,必須同時(shí)滿足兩個(gè)對(duì)象。一是用戶具有數(shù)據(jù)庫系統(tǒng)中CREATE TABLE等相關(guān)的權(quán)限;二是在這個(gè)方案對(duì)象使用的表空間中具有配額。因?yàn)檫@兩個(gè)條件必須同時(shí)滿足,用戶才能夠成功的建立對(duì)象。所以,若我們可以不給用戶某個(gè)表空間的配額,如此的話,就可以限制用戶的相關(guān)操作。
另外,我們也可以利用磁盤配額來對(duì)用戶進(jìn)行數(shù)據(jù)大小的限制。因?yàn)橛袝r(shí)候我們可能在同一臺(tái)數(shù)據(jù)器重會(huì)運(yùn)行多個(gè)應(yīng)用服務(wù)。如筆者以前在同一臺(tái)服務(wù)器里同時(shí)運(yùn)行郵箱與Oracle數(shù)據(jù)庫系統(tǒng)。為了讓減少這個(gè)兩個(gè)系統(tǒng)對(duì)硬盤空間的過渡應(yīng)用,所以,有必要對(duì)他們進(jìn)行磁盤配額的限定。故,如用數(shù)據(jù)庫管理員需要將資源限制作為自己數(shù)據(jù)庫安全策略的一部分的話,就可以考慮為每個(gè)用戶設(shè)置表空間配額。
總之,筆者認(rèn)為,表空間配額是一個(gè)很不錯(cuò)的輔助管理工具。筆者在這方面管理上,稍有心得,跟有識(shí)之士,討論討論。
一、給用戶分配表空間。
在Oracle數(shù)據(jù)庫中,對(duì)于用戶的磁盤配額是通過表空間來實(shí)現(xiàn)的。給某個(gè)用戶分配了多少的表空間,這個(gè)用戶就有多少的磁盤配額。所以,對(duì)于用戶進(jìn)行磁盤配額的管理,就是對(duì)用戶進(jìn)行表空間的限制。
在創(chuàng)建用戶的時(shí)候,若沒有關(guān)聯(lián)表空間,則其一般情況下,就屬于默認(rèn)的表空間。而其擁有表空間的大小,則是根據(jù)其所屬角色的不同而有所區(qū)別。如其屬于resource組的話,則其表空間是沒有大小限制的。
一般情況下,若數(shù)據(jù)庫管理員需要對(duì)表空間進(jìn)行磁盤配額管理的話,則筆者建議,在用戶建立的時(shí)候,為用戶指定表空間,并設(shè)置表空間的大小。如我們可以利用如下這條命令配置用戶的磁盤空間配額:ALTER USER user_name QUOTA ** ON tablespace。其中參數(shù)User_name表示用戶名,而參數(shù)Tablespace表示用戶所屬的表空間。若我們參數(shù)設(shè)置為UNLIMITED的話,表示這個(gè)Oracle用戶表空間沒有限制,直到所有的空間用完為止。
所以,在一般情況下,兩種情形下的用戶具有無限制的磁盤配額。一是這個(gè)用戶屬于resource這個(gè)角色,因?yàn)檫@個(gè)角色默認(rèn)情況下,其是沒有磁盤限額限制的。二是在用戶建立的時(shí)候,手工利用UNLIMITED指定該用戶不具有磁盤限額。不過,為了提高Oracle數(shù)據(jù)庫的安全性與靈活性,筆者是大力建議要對(duì)用戶進(jìn)行磁盤配額管理。
創(chuàng)建錯(cuò)誤:
若在對(duì)用戶進(jìn)行磁盤限額后,數(shù)據(jù)庫管理員最容易犯的錯(cuò)誤,就是忘記給用戶分配磁盤限額,導(dǎo)致對(duì)象創(chuàng)建失敗。如筆者***次接觸Oracle數(shù)據(jù)庫的時(shí)候,就犯過這方面的錯(cuò)誤。我新建了一個(gè)用戶,并且賦予了其相關(guān)的權(quán)限。可是,在建表的時(shí)候,系統(tǒng)提示錯(cuò)誤信息,說“表空間權(quán)限不足”。筆者查了好久,***查詢Oracle用戶表空間確認(rèn)配額的時(shí)候,發(fā)現(xiàn)該用戶的缺省配額沒有分配。利用命令更改了默認(rèn)配額之后,就可以創(chuàng)建表了。
二、如何拓展Oracle用戶表空間?
若對(duì)用戶進(jìn)行磁盤限額之后,有時(shí)候數(shù)據(jù)庫管理員會(huì)發(fā)現(xiàn)用戶的磁盤空間不足了,需要進(jìn)行拓展。此時(shí)該如何處理呢?
若采用自動(dòng)分配表空間大小的話,則Oracle數(shù)據(jù)庫會(huì)自動(dòng)調(diào)整表空間的大小,以滿足用戶的需要。但是,現(xiàn)在由于采用了磁盤配額管理,所以數(shù)據(jù)庫管理員不得不進(jìn)行手工的調(diào)整。不過在談這個(gè)話題之前,數(shù)據(jù)庫管理員有必要了解一下表空間區(qū)的分配方式。
若數(shù)據(jù)庫管理員能夠預(yù)測到表空間中存放的大部分對(duì)象都需要使用相同大小的區(qū)的話,那么就可以采用Uinform區(qū)的分配方式。采取這種方式的話,Oracle數(shù)據(jù)庫將為這個(gè)表空間中的所有數(shù)據(jù)庫對(duì)象分配數(shù)據(jù)庫管理員指定大小的區(qū)。這種方式的優(yōu)點(diǎn)是不會(huì)產(chǎn)生磁盤碎片,可以提高磁盤空間的利用率與數(shù)據(jù)庫的性能。
若數(shù)據(jù)庫管理員能夠預(yù)測到表空間中存放的大部分對(duì)象需要使用的區(qū)的大小是不同的話(往往都是不同的),則需要采用AUTOALLOCAT的區(qū)分配方式。這種分配方式下,將由Oracle數(shù)據(jù)庫自動(dòng)為表空間的對(duì)象分配一定大小的區(qū),而不是有用戶指定。這種方式的優(yōu)點(diǎn)就是可以節(jié)省數(shù)據(jù)庫管理員的工作量。缺點(diǎn)是會(huì)產(chǎn)生比較多的磁盤碎片。不過總的來說,比起數(shù)據(jù)庫管理員的工作量來說,這點(diǎn)磁盤碎片還是容易接受的。筆者在創(chuàng)建表空間的時(shí)候,基本上都是采用這個(gè)方式的。
故在拓展表空間的時(shí)候,其采用的是原先表空間的分配方式。也就是說,原先表空間采用的是什么區(qū)分配方式,則拓展空間也采用原先的分配方式。則是拓展表空間時(shí)必須要注意的問題。
當(dāng)表空間不足,需要進(jìn)行拓展的時(shí)候,筆者常用的方法是通過增加數(shù)據(jù)文件的方式來實(shí)現(xiàn)的。因?yàn)楸砜臻g是其相關(guān)數(shù)據(jù)文件大小的總和。所以,為表空間增加新的數(shù)據(jù)文件,是最常用的增加表空間的方式。
如當(dāng)數(shù)據(jù)庫管理員發(fā)現(xiàn)TEST1 表空間大小不足的時(shí)候,我們可以利用命令A(yù)LTER TABLESPACE TEST1 ADD DATEFILE ‘?dāng)?shù)據(jù)文件存放路徑’ SIZE 500M。我們可以利用這個(gè)命令增加表空間的大小,然后再增加用戶的磁盤配額。如此,就可以對(duì)Oracle用戶表空間進(jìn)行拓展。
筆者建議:
雖然數(shù)據(jù)庫管理員可以通過圖形界面的方式對(duì)Oracle數(shù)據(jù)庫進(jìn)行類似的管理。但是,若在數(shù)據(jù)庫管理專家面前,采用圖形化的管理界面的話,則這個(gè)數(shù)據(jù)庫管理員可能會(huì)被他們認(rèn)為是菜鳥。這主要是因?yàn)閳D形管理化的界面效率并不是很高。一方面要從眾多的菜單欄中找到相關(guān)的功能,會(huì)浪費(fèi)數(shù)據(jù)庫管理員一定的時(shí)間;而且,其語句執(zhí)行的效率,也比命令行要低。故,筆者建議,Oralce數(shù)據(jù)庫管理員還是需要學(xué)會(huì)命令行的管理方式。
三、磁盤配額管理的幾個(gè)建議。
1、當(dāng)在創(chuàng)建表空間對(duì)象的時(shí)候,出現(xiàn)“超出表空間的空間限量”錯(cuò)誤提示的處理思路。這種情況一般是由很多種情況所造成的。筆者在遇到這種問題的時(shí)候,一般的處理思路是,先查看該用戶的磁盤配額,看其是否滿足空間上的需求。若該用戶沒有磁盤配額管理的話,或者磁盤配額大小符合既定需求的話,則建議查看表空間的大小,看是否是因?yàn)楸砜臻g不足所造成的。若前兩步還是不能夠解決問題的,則看看表空間的管理方式。若是數(shù)據(jù)字典管理模式的話,則把他改為本地管理模式,一般就可以解決問題了。
2、若數(shù)據(jù)庫中存放著不同辦事處或者不同分公司的數(shù)據(jù)時(shí),筆者建議對(duì)Oracle數(shù)據(jù)庫進(jìn)行磁盤限額。這可以有效的防止因?yàn)橛脖P空間的不足導(dǎo)致整個(gè)數(shù)據(jù)庫的崩潰。而若對(duì)用戶進(jìn)行磁盤配額管理的話,那最多只是某個(gè)辦事處(某個(gè)用戶)數(shù)據(jù)庫操作出現(xiàn)故障而已。這也是提高Oracle數(shù)據(jù)庫可用性的一個(gè)有效手段。
【編輯推薦】