Oracle表空間設計理念

yyp2009發表於2009-02-18
SQL Server資料庫與Oracle資料庫之間最大的區別要屬表空間設計。Oracle資料庫開創性地提出了表空間的設計理念,這為Oracle資料庫的高效能做出了不可磨滅的貢獻。可以這麼說,Oracle中很多優化都是基於表空間的設計理念而實現的。

  典型應用一:控制使用者所佔用的表空間配額。

  在一些大型的資料庫應用中,我們需要控制某個使用者或者某一組使用者其所佔用的磁碟空間。這就好像在檔案伺服器中,需要為每個使用者設定磁碟配額一樣,以防止硬碟空間耗竭。所以,在資料庫中,我們也需要限制使用者所可以使用的磁碟空間大小。為了達到這個目的,我們就可以通過表空間來實現。

  我們可以在Oracle資料庫中,建立不同的表空間,為其設定最大的儲存容量,然後把使用者歸屬於這個表空間。如此的話,這個使用者的儲存容量,就受到這個表空間大小的限制。

  典型應用二:控制資料庫所佔用的磁碟空間。

  有時候,在Oracle資料庫伺服器中,可能執行的不止一個服務。除了資料庫伺服器外,可能還有郵件伺服器等應用系統伺服器。為此,就需要先對Oracle資料庫的磁碟空間作個規劃,否則,當多個應用程式服務所佔用的磁碟空間都無限增加時,最後可能導致各個服務都因為硬碟空間的耗竭而停止。所以,在同一臺伺服器上使用多個應用程式服務,我們往往需要先給他們進行磁碟空間的規劃和分配。各個服務都不能夠超過我們分配給他的最大限額,或者超過後及時的提醒我們。只有這樣,才能夠避免因為磁碟空間的耗竭而導致各種應用服務的崩潰。

  典型應用三:靈活放置表空間,提高資料庫的輸入輸出效能。

  資料庫管理員還可以將不同型別的資料放置到不同的表空間中,這樣可以明顯提高資料庫輸入輸出效能,有利於資料的備份與恢復等管理工作。因為我們資料庫管理員在備份或者恢復資料的時候,可以按表空間來備份資料。如在設計一個大型的分銷系統後臺資料庫的時候,我們可以按省份建立表空間。與浙江省相關的資料檔案放置在浙江省的表空間中,北京發生業務記錄,則記錄在北京這個表空間中。如此,當浙江省的業務資料出現錯誤的時候,則直接還原浙江省的表空間即可。很明顯,這樣設計,當某個表空間中的資料出現錯誤需要恢復的時候,可以避免對其他表空間的影響。

  另外,還可以對錶空間進行獨立備份。當資料庫容量比較大的時候,若一下子對整個資料庫進行備份,顯然會佔用比較多的時間。雖然說Oracle資料庫支援熱備份,但是在備份期間,會佔用比較多的系統資源,從而造成資料庫效能的下降。為此,當資料庫容量比較大的時候,我們就需要進行設定多個表空間,然後規劃各個表空間的備份時間,從而可以提高整個資料庫的備份效率,降低備份對於資料庫正常執行的影響。

  典型應用四:大表的排序操作。

  我們都知道,當表中的記錄比較多的時候,對他們進行查詢,速度會比較慢。第一次查詢成功後,若再對其進行第二次重新排序,仍然需要這麼多的時間。為此,我們在資料庫設計的時候,針對這種容量比較大的表物件,往往把它放在一個獨立的表空間,以提高資料庫的效能。

  典型應用五:日誌檔案與資料檔案分開放,提高資料庫安全性。

  預設情況下,日誌檔案與資料檔案存放在同一表空間。但是,這對於資料庫安全方面來說,不是很好。所以,我們在資料庫設計的過程中,往往喜歡把日誌檔案,特別是重做日誌檔案,放在一個獨立的表空間中,然後把它存放在另外一塊硬碟上。如此的話,當存放資料檔案的硬碟出現故障時,能夠馬上通過存放在另一個表空間的重做日誌檔案,對資料庫進行修復,以減少企業因為資料丟失所帶來的損失。

  當然,表空間的優勢還不僅僅這些,企業對於資料庫的效能要求越高,或者資料庫容量越大,則表空間的優勢就會越大。

  下面,我們就具體來看看Oracle資料庫中表空間的處理方式,看其在效能與安全性方面是否有足夠的優勢與SQL Server資料庫抗衡。

  在資料庫設計的時候,我們建議資料庫管理員按如下順序設定表空間。

  第一步:建立表空間。

  在設計資料庫的時候,首先需要設計表空間。我們需要考慮,是隻建立一個表空間呢,還是需要建立多個表空間,以及各個表空間的存放位置、磁碟限額等等。

  到底設計多少個表空間合理,沒有統一的說法,這主要根據企業的實際需求去判斷。如企業需要對使用者進行磁碟限額控制的,則就需要根據使用者的數量來設定表空間。當企業的資料容量比較大,而其又對資料庫的效能有比較高的要求時,就需要根據不同型別的資料,設定不同的表空間,以提高其輸入輸出效能。

  第二步:建立使用者,並制定使用者的預設表空間。

  在建立使用者的時候,我們建議資料庫管理員要指定使用者的預設表空間。因為我們在利用CREATE語句建立資料庫物件,如資料庫表的時候,其預設是儲存在資料庫的當前預設空間。若不指定使用者預設表空間的話,則使用者每次建立資料庫物件的時候,都要指定表空間,顯然,這並不是很合理。

  另外要注意,不同的表空間有不同的許可權控制。使用者對於表空間A具有完全控制許可權,可能對於表空間B就只有查詢許可權,甚至連連線的許可權的都沒有。所以,合理為使用者配置表空間的訪問許可權,也是提高資料庫安全性的一個方法。

 

ORACLE表空間及其維護

基本概念
ORACLE資料庫被劃分成稱作為表空間的邏輯區域——形成ORACLE資料庫的邏輯結構。一
個ORACLE資料庫能夠有一個或多個表空間,而一個表空間則對應著一個或多個物理的資料庫
檔案。表空間是ORACLE資料庫恢復的最小單位,容納著許多資料庫實體,如表、檢視、索引
、聚簇、回退段和臨時段等。
每個ORACLE資料庫均有SYSTEM表空間,這是資料庫建立時自動建立的。SYSTEM表空間
必須總要保持聯機,因為其包含著資料庫執行所要求的基本資訊(關於整個資料庫的資料字
典、聯機求助機制、所有回退段、臨時段和自舉段、所有的使用者資料庫實體、其它ORACLE
軟體產品要求的表)。
一個小型應用的ORACLE資料庫通常僅包括SYSTEM表空間,然而一個稍大型應用的ORACL
E資料庫採用多個表空間會對資料庫的使用帶來更大的方便。
作用
表空間的作用能幫助DBA使用者完成以下工作:
1.決定資料庫實體的空間分配;
2.設定資料庫使用者的空間份額;
3.控制資料庫部分資料的可用性;
4.分佈資料於不同的裝置之間以改善效能;
5.備份和恢復資料。
使用者建立其資料庫實體時其必須於給定的表空間中具有相應的權力,所以對一個使用者來
說,其要操縱一個ORACLE資料庫中的資料,應該:
1.被授予關於一個或多個表空間中的RESOURCE特權;
2.被指定預設表空間;
3.被分配指定表空間的儲存空間使用份額;
4.被指定預設臨時段表空間。
維護
表空間的維護是由ORACLE資料庫系統管理員DBA通過SQL*PLUS語句實現的,其中表空間
建立與修改中的檔名是不能帶路徑的,因此DBA必須在ORACLE/DBS目錄中操作。
1.新表空間的建立
語法格式:CREATE TABLESPACE 表空間名
DATAFILE 檔案識別符號[,檔案識別符號]...
[DEFAULT STORAGE(儲存配置引數)]
[ONLINE\OFFLINE];
其中:檔案識別符號=’檔名’[SIZE整數[K\M][REUSE]
2.修改表空間配置
語法格式:ALTER TABLESPCE 表空間名
(ADD DATAFILE 檔案識別符號[,檔案識別符號]...
\RENAME DATAFILE ’檔名’[,’檔名’]...
TO ’檔名’[,’檔名’]...
\DEFAULT STORAGE(儲存配置引數)
\ONLINE\OFFLINE[NORMAL\IMMEDIATE]
\(BEGIN\END)BACKUP);
3.取消表空間
語法格式:DROP TABLESPACE表空間名[INCLUDING CONTENTS];
4.檢查表空間使用情況
(1)檢查當前使用者空間分配情況
SELECT tablespace_name,SUM(extents),SUM(blocks),SUM(bytes)
FROM user_segments
GROUP BY tablespace_name
(2)a.檢查各使用者空間分配情況
SELECT owner,tablespace_;
(2)b.檢查各使用者空間分配情況
SELECT owner,tablespace_name,SUM(extents),SUM(blocks),SUM(bytes)
FROM dba_segments
GROUP BY owner,tablespace_name;
(3) 檢查當前使用者資料庫實體空間使用情況
SELECT tablespace_name,segment_name,segment_type,
COUNT(extent_id),SUM(blocks),SUM(bytes)
FROM user_extents
GROUP BY tablespace_name,segment_name,segment_type;
(4)檢查各使用者空間使用情況
SELECT owner,tablespace_name,COUNT(extent_id),SUM(blocks),
SUM(bytes) FROM user_extents
GROUP BY owner,tablespace_name;
(5)檢查資料庫空間使用情況
SELECT tablespace_name,COUNT(extent_id),SUM(blocks),SUM(bytes)
FROM user_extents
GROUP BY tablespace_name;
(6)檢查當前使用者自由空間情況
SELECT tablespace_name,COUNT(block_id),SUM(blocks),SUM(bytes)
FROM user_free_space
GROUP BY tablespace_name;
(7)檢查資料庫自由空間情況
SELECT tablespace_name,COUNT(block_id),SUM(blocks),SUM(bytes)
FROM dba_free_space
GROUP BY tablespace_name;
四、結論
表空間是ORACLE資料庫系統維護的主要物件,通過本文能詳細瞭解它的基本概念與作用
,並掌握其日常維護知識,從而保證ORACLE資料庫系統的正常執行。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13750068/viewspace-555220/,如需轉載,請註明出處,否則將追究法律責任。

相關文章