熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

深入淺出Oracle11g分區功能

2013-11-13 22:23:35  來源: Oracle 

  數據庫分區是每種數據庫都需具備的關鍵功能之一幾乎所有的Oracle數據庫都使用分區功能來提高查詢的性能Oracle g分區功能可以簡化數據庫的日常管理維護工作大大減輕了DBA(數據庫設計和管理工程師)的工作負擔

  Oracle g中提供的新功能增添了更多的數據庫分區功能選擇使分區功能在使用和維護上變得更加靈活;同時Oracle g也提供更多的分區功能選擇

  Oracle 版最早推出了表格的分區功能使Oracle成為了第一個支持物理分區的RDBMS供應商SQLServer()和DB都只支持邏輯分區(使用UNION ALL視圖)而SQL Server 並不直接支持物理分區(需通過分區功能)Oracle的分區功能選擇很受用戶群的歡迎因為分區功能能夠改善應用程序的性能可管理性和可用性其中最重要的是DSS應用程序由於該功能受到廣泛的喜愛因此每次發布新版本都會有功能上的不斷提高

  下面的表格列舉了隨版本更新而不斷提高的分區功能(高級)

  深入淺出Oracle 11g分區功能

  分區功能類型

  現在讓我們簡單的討論一下以上每個分區功能的特性

  范圍分區數據根據分區鍵值范圍指定進行分布比如如果我們選擇一個日期列作為分區鍵分區JAN就會包括所有包含從JANJAN之間的分區鍵值(假設分區的范圍是從這個月的第一天到這個月的最後一天)

  散列分區將散列算法用於分區鍵來確定指定行所在的分區這個分區方法能夠保持I/O平衡但是不可用於范圍查詢或不等式查詢

  列表分區數據根據分區鍵值列表指定進行分布這個分區方法對於離散的列表非常有用如地區國家等

  組合分區結合個數據分區方法可以成為一個組合分區方法先用第一個數據分布方法對表格進行分區然後再用第二個數據分區方法對每個分區進行二次分區組合分區方法有以下組合

  組合范圍散列分區組合范圍列表分區組合范圍范圍分區組合列表范圍分區組合列表列表分區組合列表散列分區

  G支持對索引組織表(索引和數據一起的表格)進行范圍分區列表分區或散列分區但是不支持對其進行組合分區

  Interval分區G版本引入的interval分區范圍分區的一種增強功能可實現equisized范圍分區的自動化創建的分區作為元數據只有最開始的分區是永久分區隨著數據的增加會分配更多的部分並自動創建新的分區和本地索引

  SQL>CREATETABLESALES_PART

  (TIME_ID NUMBER REGION_ID NUMBER

  ORDER_ID NUMBER

  ORDER_DATE DATE

  SALES_QTY NUMBER()

  SALES_AMOUNT NUMBER()

  )

  PARTITIONBY RANGE (ORDER_DATE)

  INTERVAL (NUMTOYMINTERVAL(month)

  (PARTITION p_first VALUES LESS THAN (JAN);

  Numtoyminterval功能把數字轉換成 INTERVAL YEAR TO MONTH文字(YEAR or MONTH)

  進行Interval分區的表格有傳統的范圍部分和自動生成的interval部分進行范圍分區的表格可以通過使用ALTER TABLE命令的SETINTERVAL選項擴展成為Interval分區的表格

  外鍵分區分區方案的引入是以相關表格通過相同的分區策略獲得好處作為前提設想的Detail表格通過PKFK關系從master表格繼承相同的分區方案我們不需要把分區鍵存儲在detail表格中通過關鍵詞PARTITION BY REFERENCEdetail表格獲得master表格的分區方案

  虛擬列分區在之前的Oracle版本裡只有分區鍵存在與表格中才可以實現對表格的分區功能而Oracle G的新功能虛擬列打破了這一限制允許通過使用表格中的一列或多列的表述確定分區鍵而虛擬列只作為元數據存儲

  例如在表格ACCOUNTS中添加一個虛擬列

  SQL>CREATE TABLE ACCOUNTS

  (acc_no number() not null

  acc_name varchar() not null

  acc_loc varchar()

  acc_branch number() generated always as (to_number(substr(to_char(acc_no))));

  使用虛擬列作為分區鍵

  SQL>CREATE TABLE accounts

  (acc_no number() not null

  acc_name varchar() not null

  acc_loc varchar()

  acc_branch number() generated always as (to_number(substr(to_char(acc_no))))

  partition by list (acc_branch);

  分區建議器

  Oracle g還提供了一個分區建議器可支持分區建議的生成類似於G中支持實物化視圖實物化視圖日志和索引的功能事實上分區建議器在Oracle g中是SQLAccessAdvisor的一部分這個建議器幫助生成建議並可以顯示出推薦分區實施後可獲得的效果它還會生成創建有效分區的腳本可手動通過SQL*Plus提交給Oracle或Enterprise Manager


From:http://tw.wingwit.com/Article/program/Oracle/201311/18976.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.