给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 <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分区进行重命名相关推荐
- Oracle 11g 间隔分区(INTERVAL)批量规范命名
友情提示:请在业务空闲是操作.为什么呢? --Oracle 11g 间隔分区(INTERVAL)重命名,批量生成rename分区脚本 set linesize 180 set serverout on ...
- 计算机盘符无法重命名,win8磁盘分区无法重命名怎么办
有些用户在使用Win8系统的过程中遇到C盘分区重命名的时候发生"无法修改名称",那么win8磁盘分区无法重命名怎么办呢?下文学习啦小编就分享了解决win8磁盘分区无法重命名的方法, ...
- oracle 增加一个新分区,oracle 11g 新增分区
oracle 11g新增了间隔分区.虚拟列分区和引用分区.详细的介绍请查看官方文件: 1. 间隔分区 间隔分区是范围分区的一种扩展.在引入间隔分区之前,DBA 需要显式定义每个分区的值范围,随着分区值 ...
- oracle 11g 组合分区,Oracle数据库
数据库分区是每种数据库都需具备的关键功能之一.几乎所有的Oracle数据库都使用分区功能来提高查询的性能,Oracle 11g分区功能可以简化数据库的日常管理维护工作,大大减轻了DBA(数据库设计和管 ...
- 关于oracle 11g自动分区+分区改名+定时任务综合使用实现自动分区后可以进行分区查询
一直想用oracle 11g 的interval分区(间断分区),这需要配合分区改名才能让我们可以使用分区查询,因为自动分区出来的分区名会是SYSPxxx这样.. 下面直接代码 drop tables ...
- oracle删除分区空间,Oracle 11g维护分区(三)——Dropping Partitions
删除分区 你可以从范围.间隔.列表或者复合[范围|列表]分区表中删除分区.对于间隔分区表而言,你只能删除范围分区或者那些已经物化的间隔分区.对于哈希分区表或者复合哈希分区表的哈希子分区而言,你必须使用 ...
- oracle无法重命名服务器名字,重命名Oracle数据库服务器
因工作需要准备了一台服务器专门按照oracle数据库,并且服务器上安装了windows 2003操作系统,在安装系统是没有指定计算机名称, 网络改造等情况下,需要修改数据库服务器的名称或者IP地址.这 ...
- oracle 增加间隔分区,oracle分区表之间隔分区(oracle 11g) - 漫兮网
范围分区允许用户根据分区键列值的范围创建分区.下面是一个按范围分区表的示例: create table sales6 ( sales_id number, sales_dt date ) partit ...
- oracle对日期字符串动态分区,oracle 11g分区表新特性---interval分区 的坑
oracle 11g分区表新特性---interval分区 的坑 oracle 11g的范围分区表中新增的interval分区特性,此种范围分区不需要定义MAXVALUE,Oracle会根据分区定义的 ...
最新文章
- os.environ[CUDA_DEVICE_ORDER] = PCI_BUS_ID os.environ[CUDA_VISIBLE_DEVICES] = 0
- linux下如何查看某个软件 是否安装??? 安装路径在哪???
- HTTPS 原理分析
- 每日一皮:以为是王者,没想到是个青铜...
- 李开复:非常看好移动互联网的未来 --记CSDNCTO俱乐部李开复交流会
- DCMTK:测试框架内容Frame Content FG类
- java uuid静态方法_Java UUID getLeastSignificantBits()方法与示例
- confluence启动不起来_汽车“一键启动”只用来点火?太浪费!你不知道的还有这3个功能...
- 使用SQL Server代理生成计划
- VS Code 轻量级插件推荐
- linux根文件分析,Linux根文件系统详解
- 双目立体视觉建立深度图_单目视觉深度估计测距的前生今世
- 获取 app 签名的方式汇总
- 大数据系列cdh版本下载
- windows XP cmd命令大全
- Koo叔说Shader-调试Shader
- python基础 -34- 面向对象(动态生成一个类)
- 部分有关 广告联盟作弊 与反作弊资料收集
- 开源免费天气预报接口API以及全国所有地区代码
- 联想服务器rd640安装系统,RD640操作系统安装规范手册.pdf