oracle 11 g新增分区

  

oracle 11 g新增了间隔分区,虚拟列分区和引用分区。详细的介绍请查看官方文件:

  
  

创建分区      

1。间隔分区

  

<强>

间隔分区是范围分区的一种扩展。在引入间隔分区之前,DBA需要显式定义每个分区的值范围,随着分区值的增长可用分区会逐渐减少直到没有可使用的分区为止。而间隔分区就是为了解决插入表中的数据超过了所有范围分区时而不能自动创建分区的问题。必须至少创建一个范围分区,范围分区的键值确定范围分区的上限值,超过该上限值数据库服务器自动创建特定间隔的分区。
主要用在可预知的添加小范围分区或固定时间类型的分区添加上。
<强>

<>强限制条件如下:
1)只能指定一个分区键列,并且该键列必须是数字或日期类型。
2)索引表不支持间隔分区。
3)不能为间隔分区创建域索引
4)不能为分区指定具体名称,由系统自动生成,格式为:SYS_Pnnn, n为数字。

  

<强>

<强>日期类型测试:
创建时间类型间隔分区时指定NUMTOYMINTERVAL (n,天月| |)子句确定分区扩展的条件,n为数字,指定按n天/月/年的方式进行分区新增。

  SH.SALES_INTERVAL
 <代码>创建表
  分区的范围(time_id)
  时间间隔(NUMTOYMINTERVAL(1月))店(tbs1之中,,tbs2之中,tbs3 tbs4)
  (
  分区P1值小于(TO_DATE (' 1-1-2002 ', ' dd-mm-yyyy ')),
  分区P2值小于(TO_DATE (' 1-1-2003 ', ' dd-mm-yyyy ')),
  分区P3值小于(TO_DATE (' 1-1-2004 ', ' dd-mm-yyyy ')))
  作为
  SELECT *
  从SH.SALES
  TIME_ID & lt;TO_DATE (' 1-1-2004 ', ' dd-mm-yyyy ');
  选择从user_tab_partitions partition_name table_name=癝ALES_INTERVAL”;
  
  PARTITION_NAME
  ---------------------------
  P1
  P2
  P3
  
  插入sh.SALES_INTERVAL值(101001 4 to_date (' 2005-1-10 ', ' yyyy-mm-dd '), 10124100200);
  插入sh.SALES_INTERVAL值(101002 5 to_date (' 2006-1-14 ', ' yyyy-mm-dd '), 11125100300);
  
  选择从user_tab_partitions partition_name table_name=癝ALES_INTERVAL”;
  
  PARTITION_NAME
  ---------------------------
  P1
  P2
  P3
  SYS_P121
  SYS_P122  
  

<强>数量类型测试:
<强>

  sh.test_interval
 <代码>创建表
  (
  身份证号码,
  名字varchar2 (20)
  )
  范围分区(id)
  时间间隔(100)
  (分区P001值小于(500),
  分区P002值小于(1000)
  );
  
  插入sh.test_interval选择rownum, A | | rownum从双重连接水平& lt; 1201;
  
  选择从user_tab_partitions partition_name table_name=癟EST_INTERVAL”;
  
  PARTITION_NAME
  ------------------------------
  P001
  P002
  SYS_P134
  SYS_P135
  SYS_P136
  
  select count(*)从TEST_INTERVAL分区(SYS_P134);
  
  COUNT (*)
  ----------
  One hundred.
  
  select count(*)从TEST_INTERVAL分区(SYS_P135);
  
  COUNT (*)
  ----------
  100年 
  

<强>

<强>合并分区:
需要注意,分区一定要连续,否则报ora - 14274

  
 <代码>改变表SALES_INTERVAL合并分区(to_date (' 2005-10-10 ', ' yyyy-mm-dd ')),为(to_date (' 2005-11-10 ', ' yyyy-mm-dd '))到分区SYS_P137  
  

<强>

<强>强制创建:

  
 <代码>锁表SALES_INTERVAL分区(to_date (' 2008-1-14 ', ' yyyy-mm-dd '))在共享模式; 
  

<强>范围分区转换为间隔分区:

  
 <代码> alter table测试分区p_max下降;
  alter table测试集间隔(numtodsinterval(1天))
  alter table测试集存储在(P1, P2, P3, P4)  
  

2。基于虚拟列的分区

  

<强>

如果某个表的列值是通过计算函数或表达式得到的,则这些列就称为虚拟列。可以在创建或修改表操作过程中指定这些列。虚拟列与其它实际表列共享相同的SQL名称空间,并与对其进行描述的基础表达式的数据类型相一致。可像其它表列一样在查询中使用这些列,因此可在SQL语句中提供简单,优美且一致的访问表达式机制。
虚拟列的值实际上并未存储在磁盘上的表行中,而是根据需要进行计算。描述虚拟列的函数或表达式应是明确且唯一的,即相同的输入值集应返回相同的输出值。
可以像使用任何其它表列一样使用虚拟列。可对虚拟列进行索引,可在查询,DML和DDL语句中使用它们。可在虚拟列上对表和索引进行分区,甚至可以收集它们的统计信息。可使用虚拟列分区对表的虚拟列上定义的键列进行分区。对逻辑分区对象的业务要求经常与现有列不一一对应。随着Oracle数据库11 g的推出,分区功能得到了增强,可以在虚拟列上定义分区策略,因而可以更全面地满足业务要求。

oracle 11 g新增分区