一、需求

配合开发人员,对业务临时表进行分区改造(业务认为的临时表,只需要保留近一月数据,并非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. 2018-2019-2 网络对抗技术 20165231 Exp9 Web安全基础

    实验内容 本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分.包括(SQL,XSS,CSRF).Webgoat实践下相关实验. 实验过程 WebGoat: Webgoat是OWA ...

  2. ST Debug (printf) Viewer for Jlink

    Debug (printf) Viewer http://www.keil.com/support/man/docs/uv4/uv4_db_dbg_serialwin.htm Serial Windo ...

  3. windows7 10 windows2008 windws2012 nfs客户端的安装

    servermanagercmd.exe -install FS-NFS-Services   for windows2008 windows2012 在添加功能角色-添加文件打印服务选择nfs客户端 ...

  4. python 设计模式之享元(Flyweight)模式

    #写在前面 这个设计模式理解起来很容易.百度百科上说的有点绕口. #享元模式的定义 运用共享技术来有効地支持大量细粒度对象的复用. 它通过共享已经存在的对橡大幅度减少需要创建的对象数量.避免大量相似类 ...

  5. AndroidStudio导入开源项目提示报错:Gradle sync failed: SSL peer shut down incorrectly

    问题描述: AndroidStudio导入开源项目提示报错:Gradle sync failed: SSL peer shut down incorrectly (1 m 12 s 92 ms) 解决 ...

  6. 深度学习框架PyTorch一书的学习-第七章-生成对抗网络(GAN)

    参考:https://github.com/chenyuntc/pytorch-book/tree/v1.0/chapter7-GAN生成动漫头像 GAN解决了非监督学习中的著名问题:给定一批样本,训 ...

  7. CentOS7下JSP连接Mysql

    实验环境如下: youxi1 CentOS7.5 Tomcat8.5.35 192.168.5.101 youxi2 CentOS7.5 Mysql5.7.20 192.168.5.102 (1).下 ...

  8. Day4作业:蛋疼CRM系统

    先上流程图,还得27寸4K显示器,画图各种爽: ReadMe: 运行程序前的提示: 1.抱歉,你得装prettytable模块...... 2.还得抱歉,如果shell中运行,最好把字体调得小点,表格 ...

  9. Python命令行参数解析模块getopt使用实例

    Python命令行参数解析模块getopt使用实例 这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参 ...

  10. LeetCode_70. Climbing Stairs

    70. Climbing Stairs Easy You are climbing a stair case. It takes n steps to reach to the top. Each t ...