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 <table_name> rename partition <partition_name> to <new_partition_name>;
2 alter table <table_name> rename subpartition <subpartition_name> to <new_subpartition_name>;

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

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。

给Oracle 11g Interval分区进行重命名相关推荐

  1. Oracle 11g 间隔分区(INTERVAL)批量规范命名

    友情提示:请在业务空闲是操作.为什么呢? --Oracle 11g 间隔分区(INTERVAL)重命名,批量生成rename分区脚本 set linesize 180 set serverout on ...

  2. 计算机盘符无法重命名,win8磁盘分区无法重命名怎么办

    有些用户在使用Win8系统的过程中遇到C盘分区重命名的时候发生"无法修改名称",那么win8磁盘分区无法重命名怎么办呢?下文学习啦小编就分享了解决win8磁盘分区无法重命名的方法, ...

  3. oracle 增加一个新分区,oracle 11g 新增分区

    oracle 11g新增了间隔分区.虚拟列分区和引用分区.详细的介绍请查看官方文件: 1. 间隔分区 间隔分区是范围分区的一种扩展.在引入间隔分区之前,DBA 需要显式定义每个分区的值范围,随着分区值 ...

  4. oracle 11g 组合分区,Oracle数据库

    数据库分区是每种数据库都需具备的关键功能之一.几乎所有的Oracle数据库都使用分区功能来提高查询的性能,Oracle 11g分区功能可以简化数据库的日常管理维护工作,大大减轻了DBA(数据库设计和管 ...

  5. 关于oracle 11g自动分区+分区改名+定时任务综合使用实现自动分区后可以进行分区查询

    一直想用oracle 11g 的interval分区(间断分区),这需要配合分区改名才能让我们可以使用分区查询,因为自动分区出来的分区名会是SYSPxxx这样.. 下面直接代码 drop tables ...

  6. oracle删除分区空间,Oracle 11g维护分区(三)——Dropping Partitions

    删除分区 你可以从范围.间隔.列表或者复合[范围|列表]分区表中删除分区.对于间隔分区表而言,你只能删除范围分区或者那些已经物化的间隔分区.对于哈希分区表或者复合哈希分区表的哈希子分区而言,你必须使用 ...

  7. oracle无法重命名服务器名字,重命名Oracle数据库服务器

    因工作需要准备了一台服务器专门按照oracle数据库,并且服务器上安装了windows 2003操作系统,在安装系统是没有指定计算机名称, 网络改造等情况下,需要修改数据库服务器的名称或者IP地址.这 ...

  8. oracle 增加间隔分区,oracle分区表之间隔分区(oracle 11g) - 漫兮网

    范围分区允许用户根据分区键列值的范围创建分区.下面是一个按范围分区表的示例: create table sales6 ( sales_id number, sales_dt date ) partit ...

  9. oracle对日期字符串动态分区,oracle 11g分区表新特性---interval分区 的坑

    oracle 11g分区表新特性---interval分区 的坑 oracle 11g的范围分区表中新增的interval分区特性,此种范围分区不需要定义MAXVALUE,Oracle会根据分区定义的 ...

最新文章

  1. os.environ[CUDA_DEVICE_ORDER] = PCI_BUS_ID os.environ[CUDA_VISIBLE_DEVICES] = 0
  2. linux下如何查看某个软件 是否安装??? 安装路径在哪???
  3. HTTPS 原理分析
  4. 每日一皮:以为是王者,没想到是个青铜...
  5. 李开复:非常看好移动互联网的未来 --记CSDNCTO俱乐部李开复交流会
  6. DCMTK:测试框架内容Frame Content FG类
  7. java uuid静态方法_Java UUID getLeastSignificantBits()方法与示例
  8. confluence启动不起来_汽车“一键启动”只用来点火?太浪费!你不知道的还有这3个功能...
  9. 使用SQL Server代理生成计划
  10. VS Code 轻量级插件推荐
  11. linux根文件分析,Linux根文件系统详解
  12. 双目立体视觉建立深度图_单目视觉深度估计测距的前生今世
  13. 获取 app 签名的方式汇总
  14. 大数据系列cdh版本下载
  15. windows XP cmd命令大全
  16. Koo叔说Shader-调试Shader
  17. python基础 -34- 面向对象(动态生成一个类)
  18. 部分有关 广告联盟作弊 与反作弊资料收集
  19. 开源免费天气预报接口API以及全国所有地区代码
  20. 联想服务器rd640安装系统,RD640操作系统安装规范手册.pdf

热门文章

  1. php 经纬度 距离排序,php mysql 根据经纬度计算距离和排序
  2. 开发chrome插件(扩展)
  3. leetcode-217-存在重复元素
  4. IE盒模型和标准盒模型
  5. C#去除字符串的最后一个字符
  6. linq to sql简单使用
  7. Maven把一个Application转换成WebProject
  8. 闲谈StringBuilder
  9. httpHandlers和httpModules接口介绍 (7)
  10. c#中 uint--byte[]--char[]--string相互转换汇总