oracle 簡單分區的學習

根據官方文檔,以下情況適合使用分區:
  • Tables greater than 2 GB should always be considered as candidates for partitioning.

     表的數據超過2GB的時候應該考慮使用分區表

  • Tables containing historical data, in which new data is added into the newest partition. A typical example is a historical table where only the current month's data is updatable and the other 11 months are read only.

     表中有歷史數據,但是新的數據只進入新的分區

  • When the contents of a table must be distributed across different types of storage devices.

           當考慮將表中的數據放到不同的存儲設備上時,應該使用分區表。

oracle根據分區的不同,分爲簡單分區和複合分區,簡單分區的的學習如下:

1.簡單分區
    
   以下是簡單分區的幾種方式
       
  範圍分區(Range Partitioning)  
   根據鍵值所確定的範圍將不同的值映射到不同的分區上。   
   語法如下:

 PARTITION BY RANGE (column[, column ]...)
   [ INTERVAL ( expr ) [ STORE IN ( tablespace [, tablespace]...) ]]
  ( PARTITION [ partition ]
    range_values_clause table_partition_description
      [, PARTITION [ partition ]
        range_values_clause table_partition_description
      ]...
  )

需要我們指定的有:

l column:分區依賴列(如果是多個,以逗號分隔);

l partition:分區名稱;

l values less than:後跟分區範圍值(如果依賴列有多個,範圍對應值也應是多個,中間以逗號分隔);

l tablespace_clause:分區的存儲屬性,例如所在表空間等屬性(可爲空),默認繼承基表所在表空間的屬性。

      

   下面我們來創建一個分區表:
   
      
      SQL>  create table test_partition_range (id number,name varchar2(50))
  2   partition by range(id)(
  3   partition t_range_p1 values less than (100) tablespace founder,
  4   partition t_range_p2 values less than (200) tablespace founder01,
  5   partition t_range_p3 values less than (maxvalue) tablespace founder02
  6   );

        表已創建。
        
     SQL> select owner,table_name,tablespace_name,partitioned from dba_tables t where t.table_name=upper('test_partition_range');

OWNER                          TABLE_NAME             TABLESPACE_NAME   PAR-
------------------------------ ----------------------------- ------------------------- -------
FOUNDER                   TEST_PARTITION_RANGE                               YES
                              
      看到了一個和普通表不同的地方 ,沒有對應的表空間。要查詢創建分區的信息,可以通過以下查詢    
      SQL> select table_name,partitioning_type,partition_count from dba_part_tables t  where  t.owner='FOUNDER';

TABLE_NAME                     PARTITI PARTITION_COUNT
------------------------------ ------- ---------------
TEST_PARTITION_RANGE           RANGE                 3

     SQL> select partition_name,high_value,tablespace_name,table_name from dba_tab_partitions where             table_name='TEST_PARTITION_RANGE' order by      partition_position;

PARTITION_NAME      HIGH_VALUE    TABLESPACE_NAME   TABLE_NAME
--------------- ---------------- ---------------- ------------------------- -----------------------------------

T_RANGE_P1         100                      FOUNDER                      TEST_PARTITION_RANGE
              
T_RANGE_P2         200                      FOUNDER01                   TEST_PARTITION_RANGE

T_RANGE_P3        MAXVALUE          FOUNDER02                   TEST_PARTITION_RANGE

  我們來看看oracle是如何給分區表分配空間的
                        
 SQL> select segment_name,partition_name,segment_type,tablespace_name,header_file,header_block from dba_segments t where                t.segment_name='TEST_PARTITION_RANGE';

   

   
散列分區(Hash Partitioning)
   根據oracle的hash算法按照鍵值將數據映射到不同的分區上。允許用戶對不具有邏輯範圍的數據進行分區,通過在分區鍵上執行HASH函   數決定存儲的分區將數據平均地分佈到不同的分區。  
   語法如下:
	    
       PARTITION BY HASH (column [, column ] ...)
        { individual_hash_partitions
         |hash_partitions_by_quantity
         }

 所以創建分區有兩種方法:
  方法一:指定分區數量
   SQL>  create table dept2 (deptno number,deptname varchar2(32))
       2  partition by hash(deptno) partitions 4;
  方法二:指定分區的名字
   SQL> create table dept3 (deptno number,deptname varchar2(32))
      2      partition by hash(deptno)

      3      (partition p1 tablespace founder

      4      partition p2 tablespace founder02);

列表分區
   根據鍵值提供的值將數據映射到不同的分區上。
   
    PARTITION BY LIST (column)
(PARTITION [ partition ]
    list_values_clause table_partition_description
  [, PARTITION [ partition ]
        list_values_clause table_partition_description
  ]...
)

例子如下:
  create table sales_list
        (salesman_id number(5),

        salesman_name varchar2(30),
        sales_state varchar2(20),

        sales_amount number(10),
        sales_date date)

        partition by list (sales_state)
        (

        partition sales_west values ('California','Hawaii') tablespace x,
        partition sales_east values ('New York','Virginia') tablespace y,

        partition sales_central values ('Texas','Illinois') tablespace z,
        partition sales_other values(DEFAULT) tablespace o

        );




發佈了26 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章