普通表分区改造_rename方式
一、需求
配合开发人员,对业务临时表进行分区改造(业务认为的临时表,只需要保留近一月数据,并非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方式的更多相关文章
- Mysql表分区几种方式
自5.1开始对分区(Partition)有支持,一张表最多1024个分区 查询分区数据: SELECT * from table PARTITION(p0) = 水平分区(根据列属性按行分)= 举个简 ...
- Oracle 表分区介绍与使用
什么是表分区 分区表是将大表的数据分成称为分区的许多小的子集,类型有FAT32,NTFST32,NTFS.另外,分区表的种类划分主要有:range,list,和hash分区.划分依据主要是根据其表内部 ...
- 生产环境zabbix3.2上亿的表数据通过表分区的方式进行历史数据清理
生产环境zabbix3.2上亿的表数据通过表分区的方式进行历史数据清理 zabbix服务器经常报警io过载,在报警的时候发现是数据库在删除历史数据时耗时较长 数据库积攒了大量的历史数据信息,主要集中在 ...
- 示例讲解PostgreSQL表分区的三种方式
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案.一般建议 ...
- 45.oracle表类型、数据拆分、表分区
不要做一些没有意义的事情,就比如说你要离职并不打算吃回头草,离职理由中完全没有必要说明“领导的水平太渣,人品太差”此类的原因,而是“个人原因”,当然实在不批准辞职另说. oracle表类型 表的类型分 ...
- sql表分区
1.单表达多少条数据后需要分区呢? a.个人认为要似情况而定,有些常操作的表,分区反而带来麻烦,可以采用物理分表以及其它方法处理: b.对于一些日志.历史订单类的查询数据,500w左右即可享受 ...
- oracle表分区以及普表转分区表(转)
概述 Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见的管理任务,分区是构建 ...
- MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)
一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了1000万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...
- oracle表分区详解(按天、按月、按年等)
分区表的概念: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区.表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间 ...
随机推荐
- synchronized是什么,用法及原理
文章转Hollis博客 大家可以关注下,很多技术类型的文章 在再有人问你Java内存模型是什么,就把这篇文章发给他.中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提 ...
- 2018-2019-2 网络对抗技术 20165202 Exp7 网络欺诈防范
博客目录 一.实践目标 二.实践内容 简单应用SET工具建立冒名网站 (1分) ettercap DNS spoof (1分) 结合应用两种技术,用DNS spoof引导特定访问到冒名网站.(1.5分 ...
- equal numbers
给你一个n长度的数组,让你修改0到n次,问每次修改后能剩下不同个数的最小数是多少: 这里有了两种做法,一种是变成他们的lcm这样的话,修改后答案应该是减去改过的个数然后在加一 另一种就是数字修改成序列 ...
- What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
What are the benefits to using anonymous functions instead of named functions for callbacks and par ...
- C#实现获取当前文件路径的上级路径
界面: 声明: textBox1.Text为指定文件路径:string path = @"F:\ABB-pragram\ABB工作站\ABB Station\Systems\Situatio ...
- 续--Flask, Django - 区别
1. 目录结构 参考:https://blog.csdn.net/yang9520/article/details/79740374 中文文档(http://docs.jinkan.o ...
- $createElement实现自定义弹窗
<el-button type="text" @click="open4">点击打开 Message Box</el-button> m ...
- osg create shape
osg::ref_ptr<osg::Node> OSG_Qt_::createSimple() { osg::ref_ptr<osg::Geode> geode = new o ...
- 123457123457#1#-----com.threeapp.circlerunner01----儿童旋转跑酷游戏
com.threeapp.circlerunner01----儿童旋转跑酷游戏
- ubuntu18.04中将刚下载解压的eclipse添加到启动器
在/usr/share/applications/目录下新建一个名为eclipse.desktop的文件. 文件内容如下: [Desktop Entry] Version=2018.09 Name=E ...