程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 詳聊Oracle用戶表空間寶典

詳聊Oracle用戶表空間寶典

編輯:Oracle數據庫基礎

Oracle還是比較常用的,於是我研究了一下Oracle用戶表空間,在這裡拿出來和大家分享一下,希望對大家有用。在我們為微軟的NTFS分區格式中的用戶磁盤配額鼓掌的時候,Oracle數據庫中也已經實現了用戶磁盤配額的技術。可以借助表空間,來對用戶進行磁盤配額管理。利用表空間的用戶磁盤配額,可以實現很多功能。

如可以利用用戶磁盤配額,來管理用戶創建數據庫對象的能力。我們都知道,若用戶想要在某個表空間中創建方案對象的話,必須同時滿足兩個對象。一是用戶具有數據庫系統中CREATE TABLE等相關的權限;二是在這個方案對象使用的表空間中具有配額。因為這兩個條件必須同時滿足,用戶才能夠成功的建立對象。所以,若我們可以不給用戶某個表空間的配額,如此的話,就可以限制用戶的相關操作。

另外,我們也可以利用磁盤配額來對用戶進行數據大小的限制。因為有時候我們可能在同一台數據器重會運行多個應用服務。如筆者以前在同一台服務器裡同時運行郵箱與Oracle數據庫系統。為了讓減少這個兩個系統對硬盤空間的過渡應用,所以,有必要對他們進行磁盤配額的限定。故,如用數據庫管理員需要將資源限制作為自己數據庫安全策略的一部分的話,就可以考慮為每個用戶設置表空間配額。

總之,筆者認為,表空間配額是一個很不錯的輔助管理工具。筆者在這方面管理上,稍有心得,跟有識之士,討論討論。

一、給用戶分配表空間。

在Oracle數據庫中,對於用戶的磁盤配額是通過表空間來實現的。給某個用戶分配了多少的表空間,這個用戶就有多少的磁盤配額。所以,對於用戶進行磁盤配額的管理,就是對用戶進行表空間的限制。

在創建用戶的時候,若沒有關聯表空間,則其一般情況下,就屬於默認的表空間。而其擁有表空間的大小,則是根據其所屬角色的不同而有所區別。如其屬於resource組的話,則其表空間是沒有大小限制的。

一般情況下,若數據庫管理員需要對表空間進行磁盤配額管理的話,則筆者建議,在用戶建立的時候,為用戶指定表空間,並設置表空間的大小。如我們可以利用如下這條命令配置用戶的磁盤空間配額:ALTER USER user_name QUOTA ** ON tablespace。其中參數User_name表示用戶名,而參數Tablespace表示用戶所屬的表空間。若我們參數設置為UNLIMITED的話,表示這個Oracle用戶表空間沒有限制,直到所有的空間用完為止。

所以,在一般情況下,兩種情形下的用戶具有無限制的磁盤配額。一是這個用戶屬於resource這個角色,因為這個角色默認情況下,其是沒有磁盤限額限制的。二是在用戶建立的時候,手工利用UNLIMITED指定該用戶不具有磁盤限額。不過,為了提高Oracle數據庫的安全性與靈活性,筆者是大力建議要對用戶進行磁盤配額管理。

創建錯誤:

若在對用戶進行磁盤限額後,數據庫管理員最容易犯的錯誤,就是忘記給用戶分配磁盤限額,導致對象創建失敗。如筆者第一次接觸Oracle數據庫的時候,就犯過這方面的錯誤。我新建了一個用戶,並且賦予了其相關的權限。可是,在建表的時候,系統提示錯誤信息,說“表空間權限不足”。筆者查了好久,最後查詢Oracle用戶表空間確認配額的時候,發現該用戶的缺省配額沒有分配。利用命令更改了默認配額之後,就可以創建表了。

二、如何拓展Oracle用戶表空間?

若對用戶進行磁盤限額之後,有時候數據庫管理員會發現用戶的磁盤空間不足了,需要進行拓展。此時該如何處理呢?

若采用自動分配表空間大小的話,則Oracle數據庫會自動調整表空間的大小,以滿足用戶的需要。但是,現在由於采用了磁盤配額管理,所以數據庫管理員不得不進行手工的調整。不過在談這個話題之前,數據庫管理員有必要了解一下表空間區的分配方式。

若數據庫管理員能夠預測到表空間中存放的大部分對象都需要使用相同大小的區的話,那麼就可以采用Uinform區的分配方式。采取這種方式的話,Oracle數據庫將為這個表空間中的所有數據庫對象分配數據庫管理員指定大小的區。這種方式的優點是不會產生磁盤碎片,可以提高磁盤空間的利用率與數據庫的性能。

若數據庫管理員能夠預測到表空間中存放的大部分對象需要使用的區的大小是不同的話(往往都是不同的),則需要采用AUTOALLOCAT的區分配方式。這種分配方式下,將由Oracle數據庫自動為表空間的對象分配一定大小的區,而不是有用戶指定。這種方式的優點就是可以節省數據庫管理員的工作量。缺點是會產生比較多的磁盤碎片。不過總的來說,比起數據庫管理員的工作量來說,這點磁盤碎片還是容易接受的。筆者在創建表空間的時候,基本上都是采用這個方式的。

故在拓展表空間的時候,其采用的是原先表空間的分配方式。也就是說,原先表空間采用的是什麼區分配方式,則拓展空間也采用原先的分配方式。則是拓展表空間時必須要注意的問題。

當表空間不足,需要進行拓展的時候,筆者常用的方法是通過增加數據文件的方式來實現的。因為表空間是其相關數據文件大小的總和。所以,為表空間增加新的數據文件,是最常用的增加表空間的方式。

如當數據庫管理員發現TEST1 表空間大小不足的時候,我們可以利用命令ALTER TABLESPACE TEST1 ADD DATEFILE ‘數據文件存放路徑’ SIZE 500M。我們可以利用這個命令增加表空間的大小,然後再增加用戶的磁盤配額。如此,就可以對Oracle用戶表空間進行拓展。

筆者建議:

雖然數據庫管理員可以通過圖形界面的方式對Oracle數據庫進行類似的管理。但是,若在數據庫管理專家面前,采用圖形化的管理界面的話,則這個數據庫管理員可能會被他們認為是菜鳥。這主要是因為圖形管理化的界面效率並不是很高。一方面要從眾多的菜單欄中找到相關的功能,會浪費數據庫管理員一定的時間;而且,其語句執行的效率,也比命令行要低。故,筆者建議,Oralce數據庫管理員還是需要學會命令行的管理方式。

三、磁盤配額管理的幾個建議。

1、當在創建表空間對象的時候,出現“超出表空間的空間限量”錯誤提示的處理思路。這種情況一般是由很多種情況所造成的。筆者在遇到這種問題的時候,一般的處理思路是,先查看該用戶的磁盤配額,看其是否滿足空間上的需求。若該用戶沒有磁盤配額管理的話,或者磁盤配額大小符合既定需求的話,則建議查看表空間的大小,看是否是因為表空間不足所造成的。若前兩步還是不能夠解決問題的,則看看表空間的管理方式。若是數據字典管理模式的話,則把他改為本地管理模式,一般就可以解決問題了。

2、若數據庫中存放著不同辦事處或者不同分公司的數據時,筆者建議對Oracle數據庫進行磁盤限額。這可以有效的防止因為硬盤空間的不足導致整個數據庫的崩潰。而若對用戶進行磁盤配額管理的話,那最多只是某個辦事處(某個用戶)數據庫操作出現故障而已。這也是提高Oracle數據庫可用性的一個有效手段。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved