oracle 简单分区的学习

来源:互联网 发布:win10安装ubuntu双系统 编辑:程序博客网 时间:2024/05/16 09:42
根据官方文档,以下情况适合使用分区:
  • 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        );




原创粉丝点击