一、需求

配合开发人员,对业务临时表进行分区改造(业务认为的临时表,只需要保留近一月数据,并非oracle临时表类型)

二、如下记录完整过程

开发需求
TS_PM 以time_key分区 .沟通明确方案需求
发现开发提供的分区字段,类型是number,需要按天分区
也就是说,需要达到开发的需求,我们需要创建一年365个小分区(列表,后续维护一年后,也需要添加365个分区)!!!
咨询开发人员分区的目的是啥,发现只是为了删除数据快一点,业务上的临时表,只存储1个月的数据,并且分区字段可以改,
不一定需要time_key number,也可以是start_time,这样就可以尝试使用11g新特效扩展分区,也就是所我创建一个分区表,根据插入的数据,自动间隔1天添加新分区,运维省事了。 沟通明确后,整体干活的思路有了:
1)创建分区表,字段进行分区改造
2)插入开发人员需要的数据,本次只需要10月1日后的数据
3)rename 旧表,rename 新分区表至业务表名称,达到分区改造的目的
4)业务测试读写无异常后,进行后续处理,创建分区本地索引、表的列注释信息、表的约束信息
5)对历史旧表,进行expdp导出备份后,drop删除清理回收空间 .操作步骤
2.1 创建分区表
SQL>select start_time,count(*) from TS_PM sample block()
group by start_time order by ;
查询确认分区字段查询出的数值,简要查询
-- xxx
确认分区字段类型
START_TIME DATE列 ,间隔日分区。 使用11g新特效,
https://www.cnblogs.com/yuxiaole/p/9809294.html
NUMTODSINTERVAL(, 'day')
创建间隔分区语法

create table test_part
(
ID NUMBER() not null,
REMARK VARCHAR2(),
create_time DATE
)
PARTITION BY RANGE (CREATE_TIME) INTERVAL (NUMTODSINTERVAL(, 'day'))
(partition part_t01 values less than(to_date('2018-11-12', 'yyyy-mm-dd')));】 -- Create table
实际开发人员提出需要10月1日后续的数据(本次配置第一个分区是9月30日,用于存储历史数据保留一个分区)
create table TS_PM_tmp
(
power_cons_monitor_id VARCHAR2( CHAR) not null,
start_time DATE,
end_time DATE,
time_key NUMBER() not null,
·······
)
tablespace BSP
PARTITION BY RANGE (start_time) INTERVAL (NUMTODSINTERVAL(, 'day'))
(partition part_t01 values less than(to_date('2019-09-30', 'yyyy-mm-dd')))
; 插入数据

insert into TS_tmp select * from TS_PM where time_key='20191001';
insert into TS_tmp select * from TS_PM where time_key='20191002';
insert into TS_tmp select * from TS_PM where time_key='20191003';
insert into TS_tmp select * from TS_PM where time_key='20191004';
insert into TS_tmp select * from TS_PM where time_key='20191005';
insert into TS_tmp select * from TS_PM where time_key in('20191006','20191007','20191008','20191009','20191010');
insert into TS_tmp select * from TS_PM where time_key
in('20191011','20191012','20191013','20191014','20191015','20191016','20191017');
commit;

Rename操作
alter table TS_PM rename to TS_old;
alter table TS_tmp rename to TS_PM; 业务人员反馈无异常后。 创建索引
名称更换后,加上local参数即可
create index BSP.POWER_CONS_MONITOR_PM_5_new on bsp.TS_PM
(START_TIME, STATS_CYCLE, OBJ_TYPE, ORG_ID, OIL_AMOUNT_DIFF, GAS_AMOUNT_DIFF, ELEC_AMOUNT_DIFF)
tablespace BSP
local;
添加主键约束
报错
ORA-
, , "partitioning columns must form a subset of key columns of a UNIQUE index"
*Cause: User attempted to create a UNIQUE partitioned index whose
partitioning columns do not form a subset of its key columns
which is illegal
*Action: If the user, indeed, desired to create an index whose
partitioning columns do not form a subset of its key columns,
it must be created as non-UNIQUE; otherwise, correct the
list of key and/or partitioning columns to ensure that the index'
partitioning columns form a subset of its key columns
唯一索引中无分区列,无法创建唯一索引,因此修改主键约束列,添加分区列
alter table TS_PM
add constraint POWER_MONITOR_PM_new primary key (POWER_CONS_MONITOR_ID,START_TIME)
using index local
tablespace BSP
; -- Add comments to the columns
comment on column TS_tmp.time_key
is '如果是实时统计则该字段无值
如果是日统计该数值20150722
如果是周统计该数值一周的第一天
如果是月统计该数值201507
如果是季度统计该数值是季度的第一个月
如果是年统计该数值2015'; 对历史表进行导出备份

$ expdp "'/ as sysdba'" directory=HISDATA
dumpfile=TS_OLD%U.dump
logfile=TS_OLD_20191016.log
tables=bsp.TS_OLD cluster=n parallel=4 COMPRESSION=all
*********************************************************************
Master table "SYS"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
/home/oracle/rmanvplus/hisdata/TS_OLD01.dump
/home/oracle/rmanvplus/hisdata/TS_OLD02.dump
/home/oracle/rmanvplus/hisdata/TS_OLD03.dump
/home/oracle/rmanvplus/hisdata/TS_OLD04.dump


$ mv TS_OLD01.dump TS_OLD01.dump_20191016.bak
$ mv TS_OLD02.dump TS_OLD02.dump_20191016.bak
$ mv TS_OLD03.dump TS_OLD03.dump_20191016.bak
$ mv TS_OLD04.dump TS_OLD04.dump_20191016.bak
SQL> drop table bsp.TS_OLD purge;


校验
SQL>select index_name,PARTITION_NAME,HIGH_VALUE,STATUS,TABLESPACE_NAME from dba_ind_partitions where index_owner='BSP' and index_name='POWER_CONS_MONITOR_PM_5_NEW';
INDEX_NAME PARTITION_NAME HIGH_VALUE STATUS TABLESPACE_NAME
------------------------------ ------------------------------ -------------------------------------------------------------------------------- -------- ------------------------------
POWER_CONS_MONITOR_PM_5_NEW PART_T01 TO_DATE(' 2019-09-30 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25121 TO_DATE(' 2019-10-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25122 TO_DATE(' 2019-10-03 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25123 TO_DATE(' 2019-10-04 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25124 TO_DATE(' 2019-10-05 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25125 TO_DATE(' 2019-10-06 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25126 TO_DATE(' 2019-10-07 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25127 TO_DATE(' 2019-10-08 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25128 TO_DATE(' 2019-10-09 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25129 TO_DATE(' 2019-10-10 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25130 TO_DATE(' 2019-10-11 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25131 TO_DATE(' 2019-10-12 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25132 TO_DATE(' 2019-10-13 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25133 TO_DATE(' 2019-10-14 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25134 TO_DATE(' 2019-10-15 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP
POWER_CONS_MONITOR_PM_5_NEW SYS_P25135 TO_DATE(' 2019-10-16 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA USABLE BSP


16 rows selected.
SQL>select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,HIGH_VALUE,TABLESPACE_NAME from dba_tab_partitions where TABLE_OWNER='BSP' and TABLE_NAME='TS_PM';
TABLE_OWNE TABLE_NAME PARTITION_ HIGH_VALUE TABLESPACE
---------- ------------------------------ ---------- -------------------------------------------------------------------------------- ----------
BSP TS_PM PART_T01 TO_DATE(' 2019-09-30 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25041 TO_DATE(' 2019-10-02 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25042 TO_DATE(' 2019-10-03 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25043 TO_DATE(' 2019-10-04 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25044 TO_DATE(' 2019-10-05 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25045 TO_DATE(' 2019-10-06 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25046 TO_DATE(' 2019-10-07 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25047 TO_DATE(' 2019-10-08 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25048 TO_DATE(' 2019-10-09 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25049 TO_DATE(' 2019-10-10 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25050 TO_DATE(' 2019-10-11 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25051 TO_DATE(' 2019-10-12 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25052 TO_DATE(' 2019-10-13 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25053 TO_DATE(' 2019-10-14 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25054 TO_DATE(' 2019-10-15 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP
BSP TS_PM SYS_P25055 TO_DATE(' 2019-10-16 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIA BSP

16 rows selected.

 

普通表分区改造_rename方式的更多相关文章

  1. Mysql表分区几种方式

    自5.1开始对分区(Partition)有支持,一张表最多1024个分区 查询分区数据: SELECT * from table PARTITION(p0) = 水平分区(根据列属性按行分)= 举个简 ...

  2. Oracle 表分区介绍与使用

    什么是表分区 分区表是将大表的数据分成称为分区的许多小的子集,类型有FAT32,NTFST32,NTFS.另外,分区表的种类划分主要有:range,list,和hash分区.划分依据主要是根据其表内部 ...

  3. 生产环境zabbix3.2上亿的表数据通过表分区的方式进行历史数据清理

    生产环境zabbix3.2上亿的表数据通过表分区的方式进行历史数据清理 zabbix服务器经常报警io过载,在报警的时候发现是数据库在删除历史数据时耗时较长 数据库积攒了大量的历史数据信息,主要集中在 ...

  4. 示例讲解PostgreSQL表分区的三种方式

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案.一般建议 ...

  5. 45.oracle表类型、数据拆分、表分区

    不要做一些没有意义的事情,就比如说你要离职并不打算吃回头草,离职理由中完全没有必要说明“领导的水平太渣,人品太差”此类的原因,而是“个人原因”,当然实在不批准辞职另说. oracle表类型 表的类型分 ...

  6. sql表分区

    1.单表达多少条数据后需要分区呢?   a.个人认为要似情况而定,有些常操作的表,分区反而带来麻烦,可以采用物理分表以及其它方法处理:   b.对于一些日志.历史订单类的查询数据,500w左右即可享受 ...

  7. oracle表分区以及普表转分区表(转)

    概述 Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见的管理任务,分区是构建 ...

  8. MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)

    一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了1000万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...

  9. oracle表分区详解(按天、按月、按年等)

    分区表的概念:  当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区.表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间 ...

随机推荐

  1. ResultMap和ResultType在使用中的区别、MyBatis中Mapper的返回值类型

    在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使 ...

  2. 2018-2019-2 20165234 《网络对抗技术》 Exp8 网络欺诈防范 Web基础

    Exp8 网络欺诈防范 Web基础 一. 实践内容 1. Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. 2. Web ...

  3. this和super的用法

    this关键字的使用: 1.成员变量和局部变量重名时,在方法中调用成员变量,需要使用this.调用. 2.把这个类自己的实例化对象当做参数进行传递时,使用this. 3.内部类中,调用外部类的方法或变 ...

  4. Oracle虚拟机 与 windows配置

    目录 相关资料 安装虚拟机及相关配置 安装PLSQL Developer Navicat Premium登录数据库 踩坑之路 相关资料 oracle虚拟机配置 提取码:s3sg 安装虚拟机及相关配置 ...

  5. git submodule 如何push代码

    某git项目关联了一个submodule 如何更新该项目下的submodule https://stackoverflow.com/questions/5814319/git-submodule-pu ...

  6. Linux信号使用及自定义信号

    linux自定义信号:https://www.cnblogs.com/bigben0123/p/3186661.html linux信号.值及解释:https://blog.csdn.net/luot ...

  7. oracle之按表名查询表字段结构

    工作中查看oracle表结构, 1,pl/sql或其他开发工具可以输入表名然后ctr+点击表名就可以看见表结构: 2,表字段过多,如果给第三方截图看比较麻烦,得截好几次,容易看眼花,可以查询如下sql ...

  8. spring cloud+.net core搭建微服务架构

    http://www.cnblogs.com/longxianghui/p/7800316.html

  9. Flutter 中使用Future消除Callback Hell

    /先分别定义各个异步任务 Future<String> login(String userName, String pwd){ ... //用户登录 }; Future<String ...

  10. CentOS7下搭建SVN服务器

    (1).安装SVN 1)安装SVN [root@youxi1 ~]# yum -y install subversion mod_dav_svn [root@youxi1 ~]# cat /etc/s ...