当前位置:  数据库>oracle

给Oracle 11g Interval分区进行重命名

    来源: 互联网  发布时间:2017-03-29

    本文导语: Oracle 11g 众多新特性中,我最喜欢的就是分区表增强,众所周知很多大问题“化整为零”之后就不是个问题,分区表就是一种非常好用的“化整为零”的手段。 还是说回正题吧,使用Interval分区不难,为分区/子分区的重命名也...

Oracle 11g 众多新特性中,我最喜欢的就是分区表增强,众所周知很多大问题“化整为零”之后就不是个问题,分区表就是一种非常好用的“化整为零”的手段。

还是说回正题吧,使用Interval分区不难,为分区/子分区的重命名也不难,我的分区表大致定义如下:

 
1 CREATE TABLE Partition_Table
2 (
3   ....
4   ....
5   ....
6 )
7 PARTITION BY RANGE( MSGDATE ) INTERVAL( NUMTOYMINTERVAL(1,'MONTH') )
8 SUBPARTITION BY LIST( DAY_V )

      分区和子分区的重命名语法如下:

 
1 alter table rename partition to ;
2 alter table rename subpartition to ;

      每当新数据触发新建分区后,分区名字是系统给的,虽然不影响分区表的使用,但是看着很让人迷茫:

 
1 select 
2   table_name ,
3   partition_name,
4   subpartition_name ,
5   tablespace_name
6 from user_tab_subpartitions 
7 where subpartition_name like 'SYS%' ;
 
01 TABLE_NAME                     PARTITION_NAME  SUBPARTITION_NAME  TABLESPACE_NAME
02 ------------------------------ --------------- ------------------ ------------------------------
03 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP100        FIREWALL16
04 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP101        FIREWALL17
05 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP102        FIREWALL18
06 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP103        FIREWALL19
07 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP104        FIREWALL20
08 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP105        FIREWALL21
09 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP106        FIREWALL22
10 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP107        FIREWALL23
11 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP108        FIREWALL24
12 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP109        FIREWALL25
13 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP110        FIREWALL26
14   
15 TABLE_NAME                     PARTITION_NAME  SUBPARTITION_NAME  TABLESPACE_NAME
16 ------------------------------ --------------- ------------------ ------------------------------
17 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP111        FIREWALL27
18 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP112        FIREWALL28
19 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP113        FIREWALL29
20 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP114        FIREWALL30
21 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP115        FIREWALL31
22 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP85         FIREWALL01
23 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP86         FIREWALL02
24 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP87         FIREWALL03
25 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP88         FIREWALL04
26 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP89         FIREWALL05
27 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP90         FIREWALL06
28   
29 TABLE_NAME                     PARTITION_NAME  SUBPARTITION_NAME  TABLESPACE_NAME
30 ------------------------------ --------------- ------------------ ------------------------------
31 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP91         FIREWALL07
32 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP92         FIREWALL08
33 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP93         FIREWALL09
34 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP94         FIREWALL10
35 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP95         FIREWALL11
36 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP96         FIREWALL12
37 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP97         FIREWALL13
38 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP98         FIREWALL14
39 P_MYSYSLOG_IL_2010             SYS_P116        SYS_SUBP99         FIREWALL15

      将分区/子分区的名字改成得有意义才是王道。以下是用一个过程配合游标来改分区名,重点是是从high_value字段获得该分区的范围描述,其他没什么了:

 
01 declare 
02  v_sql varchar(400);
03  v_table_name user_tab_partitions.table_name%type;
04  v_partition_name user_tab_partitions.partition_name%type;
05  v_high_value varchar(200);
06  v_tmp_partition_name user_tab_partitions.partition_name%type;
07  cursor cur is 
08    select 
09       table_name ,
10       partition_name ,
11       high_value 
12     from user_tab_partitions 
13     where partition_name like 'SYS%' ;
14 begin
15   open cur;
16   loop
17     fetch cur into v_table_name,v_partition_name,v_high_value;
18     exit when cur%notfound;
19     v_tmp_partition_name := substr(v_high_value,11,10);
20     v_tmp_partition_name := to_char( to_date(v_tmp_partition_name,'yyyy-mm-dd')-1 , 'yyyymm');
21     v_sql := 'alter table '||v_table_name||' rename partition '
22       ||v_partition_name
23       ||' to P'||v_tmp_partition_name;
24     dbms_output.put_line( v_sql );
25     execute immediate v_sql;
26   end loop;
27   close cur;
28 end;
29 /

      由于改分区名属于DDL语句,对于忙碌的系统来说很容易遇到ORA-00054这个错误:

 
1 ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

      Oracle 11g 同时也引入了一个新特性——DDL Wait ,以前遇到这种情况要不就是找出那个该死的Transaction kill掉,要不就雇个人拼命坚持不懈地敲键盘跑这条DDL,直到成功执行,现在好了,这个人可以下岗了。只要设定ddl_lock_timeout这个参数就可以了,这个参数可以在实例级别和会话级别上设置,如果该值为0,遇到未提交事务时就会马上报ORA-00054,如果设定为10,DDL语句会为这个事务最多等10秒,10秒内事务提交,DDL语句就会执行成功,否则10秒后再报ORA-00054。

if ($ != jQuery) { $ = jQuery.noConflict(); } var isLogined = false; var cb_blogId = 21523; var cb_entryId = 1928971; var cb_blogApp = "killkill"; var cb_blogUserGuid = "5560360b-63cf-dd11-9e4d-001cf0cd104b"; var cb_entryCreatedDate = '2011/1/6 16:53:00';

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3