oracle表空間設計基本原則


oracle表空間設計基本原則
 
1、系統數據與應用數據必須存儲於不同的表空間。
2、按照應用划分數據,不同應用的數據應存儲於不同的表空間。
3、表和索引分離,需存儲在不同的表空間,以便分布到不同的數據文件和硬盤上,並分別進行不同的物理存儲參數優化,減少磁盤I/O的競爭。
4、相對靜態的表和頻繁變動的表分開存放在不同的表空間,以便分別進行不同的物理參數優化。
5、為中間表單獨設計表空間,可以不考慮備份。
6、采用臨時表空間組技術,提高大批量數據處理效率。
 
-----原鏈接:http://blog.itpub.net/31429550/viewspace-2149226/
 
 

Oracle 表空間設計理念

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

  典型應用一:控制用戶所占用的表空間配額。

  在一些大型的數據庫應用中,我們需要控制某個用戶或者某一組用戶其所占用的磁盤空間。這就好像在文件服務器中,需要為每個用戶設置磁盤配額一樣,以防止硬盤空間耗竭。所以,在數據庫中,我們也需要限制用戶所可以使用的磁盤空間大小。為了達到這個目的,我們就可以通過表空間來實現。

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

  典型應用二:控制數據庫所占用的磁盤空間。

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

  典型應用三:靈活放置表空間,提高數據庫的輸入輸出性能。

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

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

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

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

  典型應用五:日志文件與數據文件分開放,提高數據庫安全性。

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

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

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

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

第一步:建立表空間。

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

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

  第二步:建立用戶,並制定用戶的默認表空間。

  在建立用戶的時候,我們建議數據庫管理員要指定用戶的默認表空間。因為我們在利用CREATE語句創建數據庫對象,如數據庫表的時候,其默認是存儲在數據庫的當前默認空間。若不指定用戶默認表空間的話,則用戶每次創建數據庫對象的時候,都要指定表空間,顯然,這並不是很合理。

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


oracle 創建一個用戶並指定默認表空間和臨時表空間

1. 創建臨時表空間

SQL> create temporary tablespace test1temp 
tempfile '/home/u01/app/oracle/oradata/ytzx/test1temp01.dbf' 
size 10240m 
autoextend on next 1024m
 maxsize 20480m
extent management local  ;

2. 創建數據表空間

SQL> create tablespace test1
logging
datafile '/home/u01/app/oracle/oradata/ytzx/test1.dbf'
size 10240M --50-100G
autoextend on next 2000M 
maxsize unlimited
extent management local autoallocate 
segment space management auto ;

3.創建用戶並制定臨時表空間和默認表空間

SQL>create user test1 identified by test1
default tablespace test1
temporary tablespace test1temp;

4.給用戶授予權限

 grant connect,resource to test;

 

大神回答:

oracle數據庫建表和表空間設計

問:需要建很多表,其中有三張表加001編號各創建100張,每張表記錄2天的數據量,數據量最大為2000萬,正常在1000萬數據量,這樣3*100*2000萬*1.5k,需要的表空間就很大,現在我想知道怎么設計這些表的建立。是建一個表空間,很多數據文件,將表放入一個表空間,還是分配多個表空間,表放入不同的表空間中。數據庫是oracle 11g,性能是16cpu,32G內存,磁盤矩陣。請大家幫忙提供解決方式,解決我在追加懸賞。謝謝了,有需要進一步了解情況的提出來,我會每天晚上查看的。
 
答:這個數據的多少和表空間的選擇和你的數據量多少是沒有太大關系的,需要統計你的數據量的大小。如果數據量很大,像你說的3*100*2000萬*1.5k需要估算一下他是有多少G?這樣才好設計表空間的分配。從10g開始有表空間支持一個大的數據文件,由多個文件組成肯定沒有一個文件好管理,但是如果出問題了一個大數據文件損壞肯定造成的損失很大。這就是易維護性和安全性的取舍。不知道你們磁盤陣列是怎么做的如果沒有raid1,數據又很重要的話,也許添加多個數據文件。但是多個數據文件的添加,每個數據文件的大小又受到OS的影響,這個和DB_block_size的大小又有關系,具體算法我不細講,結論是單個數據文件最多32G。所以這個時候就看你的數據量大小了,你只說量,但是也許有lob字段之類的我無法估算大小,所以這個你自己算一下,如果需要的數據文件過多的話,你想方便維護也是可以使用大數據文件。sql如下:
SQL> create bigfile tablespace giapblob ----------------表空間名字
2 datafile 'H:\ypx\pic02.dbf' ----------------數據文件名字路徑
3 size 204800M ----------------200G的bigfile
4 autoextend on next 1024M -----------------擴展自動1G
5 maxsize unlimited -----------------不限最大
6 extent management local autoallocate; ----------------自動管理分配區間
其中上述只是從管理方便的角度考慮一個表空間的處理方法,一般單個表空間最大限制是1022個數據文件*4M數據塊*DB_BLOCK_SIZE=32TB。如果數據量過大,必須采用多表空間。
另外也要考慮需求中的使用性能,如果表數據量過大,比如你們每天2000萬,那有沒有歷史表數據?這個如果是OLAP還好說,OLTP可能要做分區表等等一系列的性能考慮,情況不同選擇不同。
 
追問
我想知道如果使用大文件表空間的話,對查詢性能有沒有影響,不過我准備使用視圖將所有歷史表創建成一個視圖,不知道對查詢性能會不會有影響?
還有一個表空間和多個表空間有什么區別嗎?我們的總體數據量還是很大的,頂峰時每天的流水記錄為1000萬+300萬,需要保存370天左右,記錄放在歷史表中。
追答
大文件和多個小文件沒有什么性能差異,主要的瓶頸在於I/O。這個取決於你的磁盤陣列和硬盤情況。你說把所有表做一個視圖,這個性能就差得離譜了,即使每個表上都有索引,你要選擇所有數據也是要走full index scan ,光維護索引就累死了。這樣還不如用分區表,然后再建立local索引。
分區表的意義在於均衡I/O,可以把不同的分區映射到磁盤以平衡I/O,改善整個系統性能; 改善查詢性能,對分區對象的查詢可以僅搜索自己關心的分區,提高檢索速度。比你說的兩天一表既方便了管理(不用每天都去建表),也加快了查詢速度(相對於查詢所有歷史數據的視圖來說)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM