普通表分区改造_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表分区详解(按天、按月、按年等)
分区表的概念: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区.表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间 ...
随机推荐
- CodeForces - 1175D Array Splitting(数组划分+后缀和+贪心)
You are given an array a1,a2,…,ana1,a2,…,an and an integer kk. You are asked to divide this array in ...
- oracle查询表指定字段类型
查询表某字段类型,如下: SELECT data_type FROM all_tab_cols WHERE table_name = UPPER('SRIS_P_BaseInfo') and colu ...
- Keil MDK 5代码补全功能设置
这段时间在用Keil5编程,经常会遇到在程序文件头部定义一个全局变量.在后面的编程过程中,经常会要用到这个变量,如果每次再打这个变量名会特别麻烦和浪费时间,我就想着Keil5有没有像vs软件一样的代码 ...
- GIS 空间分析案例分析-错误排除经验总结
GIS 空间分析案例分析-错误排除经验总结 商务科技合作:向日葵,135—4855__4328,xiexiaokui#qq.com 目录:问题发现,问题分析,解决方法,结果 1. problem di ...
- VIM快速掌握
vi/vim 基本使用方法 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的 ...
- JS 时间处理(GMT转换,超24小时加一天,时间差计算)
计算天数,加小时,加分数 Date.prototype.Format = function (fmt) { // author: meizz var o = { "M+": thi ...
- Delphi 中记录类型 给记录指针赋值
PPersion=^TPersion; TPersion=packed record Name:string; Sex:string; Clasee:string; end; var persion: ...
- charles 工具菜单总结
本文参考:charles 工具菜单总结 主要是下面的功能,具体可以点击对应菜单查看 工具菜单总结 禁用缓存 禁用Cookies 远程映射到URL地址 映射到本地 重写工具 黑名单 白名单 DNS欺骗 ...
- 记录:larvel Windows 安装
先安装Composer 不多叙述了 链接: https://pan.baidu.com/s/1sljuImh 密码: qcj3 打开命令窗口 进入你的集成环境 网站根目录下 laravel程序会下载 ...
- IIC挂死问题解决过程
0.环境:arm CPU 带有IIC控制器作为slave端,带有调试串口. 1.bug表现:IIC slave 在系统启动后概率挂死,导致master无法detect到slave. 猜测1:认为IIC ...