首页 置换 选车 估价 问答 生活 经销商 车管所 汽车资讯 汽车销量 车牌查询 今日油价 天气预报
您的位置: 首页 > 生活 > 科技 > oracle怎样删除临时表(分享一份Oracle生产数据库大表删除方案--rename切换表)
oracle怎样删除临时表(分享一份Oracle生产数据库大表删除方案--rename切换表)
更新时间:2024-08-18 07:27:37
概述

有这么个需求,有一张5000万大表,需要保留最后3个月数据,也就是1000万数据,而这张表使用很频繁,生产环境也是7*24小时不停,如果用分段delete影响的时间太长,所以用了rename切换的方法。这里先在测试数据库做一下演练。

以测试环境BN_SEQUENCE表做测试,数据量大约是6千万。

oracle怎样删除临时表(分享一份Oracle生产数据库大表删除方案--rename切换表)1


思路

oracle怎样删除临时表(分享一份Oracle生产数据库大表删除方案--rename切换表)2

最近有点喜欢上画图,感觉形象点,可能有点丑,大家不要介意~


实现方案1、获取A表定义、索引、触发器、外键约束

这里的表定义、索引、主外键实际上用PLSQL就可以直接看到了,所以就不写了,只写了触发器的。

相关sql:

--查看表上触发器定义 SELECT * FROM DBA_TRIGGERS WHERE TABLE_NAME='BN_SEQUENCE'; SELECT DBMS_METADATA.GET_DDL('TRIGGER','CHK_BIU_BN_SEQUENCE','GLOGOWNER') FROM DUAL; SELECT DBMS_METADATA.GET_DDL('TRIGGER','BN_SEQUENCE_PN','GLOGOWNER') FROM DUAL; -- Create table create table BN_SEQUENCE ( BN_RULE_GID VARCHAR2(101 CHAR) not null, BN_CONTEXT VARCHAR2(300 CHAR) not null, BN_SEQUENCE_ID VARCHAR2(50 CHAR) not null, CURVALUE VARCHAR2(50 CHAR), DOMAIN_NAME VARCHAR2(50 CHAR) not null, INSERT_USER VARCHAR2(128 CHAR) not null, INSERT_DATE DATE not null, UPDATE_USER VARCHAR2(128 CHAR), UPDATE_DATE DATE ) tablespace DATA pctfree 10 initrans 1 maxtrans 255 storage ( initial 1 next 1 minextents 1 maxextents unlimited pctincrease 0 ); .....


2、创建B表--BN_SEQUENCE_BAK

--这里只创建表定义,不加约束、索引、触发器、外键 -- Create table create table BN_SEQUENCE_BAK ( BN_RULE_GID VARCHAR2(101 CHAR) not null, BN_CONTEXT VARCHAR2(300 CHAR) not null, BN_SEQUENCE_ID VARCHAR2(50 CHAR) not null, CURVALUE VARCHAR2(50 CHAR), DOMAIN_NAME VARCHAR2(50 CHAR) not null, INSERT_USER VARCHAR2(128 CHAR) not null, INSERT_DATE DATE not null, UPDATE_USER VARCHAR2(128 CHAR), UPDATE_DATE DATE ) tablespace DATA pctfree 10 initrans 1 maxtrans 255 storage ( initial 1 next 1 minextents 1 maxextents unlimited pctincrease 0 );


3、分段insert

为了避免对线上环境的影响,建议分段insert,插入最近3个月的数据。

insert into BN_SEQUENCE_BAK select * from BN_SEQUENCE where update_date >=to_date('2019/08/19 00:00:00', 'yyyy/mm/dd hh24:mi:ss') and update_date <to_date('2019/09/19 14:00:00', 'yyyy/mm/dd hh24:mi:ss'); insert into BN_SEQUENCE_BAK select * from BN_SEQUENCE where update_date >=to_date('2019/07/19 00:00:00', 'yyyy/mm/dd hh24:mi:ss') and update_date <to_date('2019/08/19 00:00:00', 'yyyy/mm/dd hh24:mi:ss'); insert into BN_SEQUENCE_BAK select * from BN_SEQUENCE where update_date >=to_date('2019/06/19 00:00:00', 'yyyy/mm/dd hh24:mi:ss') and update_date <to_date('2019/07/19 00:00:00', 'yyyy/mm/dd hh24:mi:ss'); insert into BN_SEQUENCE_BAK select * from BN_SEQUENCE where update_date >=to_date('2018/06/19 00:00:00', 'yyyy/mm/dd hh24:mi:ss') and update_date <to_date('2019/06/19 00:00:00', 'yyyy/mm/dd hh24:mi:ss');

oracle怎样删除临时表(分享一份Oracle生产数据库大表删除方案--rename切换表)3


4、切换表

这里实际上我在生产环境做切换也踏坑了,没考虑到有物化视图这种情况,所以导致切换不了。

alter table BN_SEQUENCE rename to BN_SEQUENCE_ARCH; alter table BN_SEQUENCE_BAK rename to BN_SEQUENCE;

oracle怎样删除临时表(分享一份Oracle生产数据库大表删除方案--rename切换表)4


5、数据补录

把前面插入数据后到切换表后的数据做一下补录。

insert into BN_SEQUENCE select * from BN_SEQUENCE_ARCH where update_date >=to_date('2019/09/19 14:00:00', 'yyyy/mm/dd hh24:mi:ss')

oracle怎样删除临时表(分享一份Oracle生产数据库大表删除方案--rename切换表)5


6、B表创建索引、触发器

记得需要重命名。

-- Add comments to the table comment on table BN_SEQUENCE is 'This table stores the current sequence value of the business number.'; -- Add comments to the columns comment on column BN_SEQUENCE.BN_RULE_GID is 'BN_RULE_GID contains the unique identifier for the Business Number (BN) rule.'; -- Create/Recreate primary, unique and foreign key constraints alter table BN_SEQUENCE add constraint PK_BN_SEQUENCE primary key (BN_RULE_GID, BN_CONTEXT, BN_SEQUENCE_ID) using index tablespace INDX pctfree 10 initrans 2 maxtrans 255 storage ( initial 1M next 1M minextents 1 maxextents unlimited pctincrease 0 ); alter table BN_SEQUENCE add constraint FK_BN_SEQRULE_GID foreign key (BN_RULE_GID) references BN_RULE (BN_RULE_GID); -- Grant/Revoke object privileges grant select, insert, update, delete on BN_SEQUENCE to APP_USER; grant select on BN_SEQUENCE to APP_USER_SELECT; grant select, insert, update, delete on BN_SEQUENCE to EXT_USER; ....


7、校验数据

oracle怎样删除临时表(分享一份Oracle生产数据库大表删除方案--rename切换表)6

结果:数据全部迁移了,保留了去年6月19号到现在的数据,整个过程10分钟


8、drop表

建议保留一段时间后再执行。


觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

oracle怎样删除临时表(分享一份Oracle生产数据库大表删除方案--rename切换表)7

,
相关推荐RECOMMEND
fanuc手动机器人编程实例(知道这两个小技巧)
Fanuc工业机器人在全球机器人销量市场份额中一直处于无可撼动的地位,在机器人编程学习中,不同品牌的工业机器人编程设定,有不同的逻辑和技巧。学习FANUC机器人编程设定,这2个技巧一定要知道!1.设置...
英语中的病毒英文(英语口语英语virus就是中文)
英语口语:英语virus就是中文“电脑病毒”吗?想练英语口语,你就不能只知道中文“电脑病毒”的英文是virus,如果你把英语单词virus忘记了,你想说virus时怎么办?这就涉及“病毒”的英语怎么说...
七日杀上帝视角指令(七日杀上帝模式指令与作弊代码大全)
七日杀以不死族占领的残酷无情的后世界末日世界为背景,是一款开放世界游戏,是第一人称射击游戏、生存恐怖、塔防和角色扮演游戏的独特组合。它展示了战斗,制作,抢劫,采矿,探索和角色成长,其方式得到了全球粉丝...
微星主板cpu核心电压叫什么(主板散热性能大比拼)
微星在自家的博客上发表了一篇文章,首先介绍了升级CPU散热器的重要性和(消费升级的)必然趋势,然后开始介绍主板电源以及供电模块散热,接下里就是重头戏,把自家的B360MMORTAR和华硕ROGSTRI...
格式工厂可以转换qlv格式的吗(如何转换qlv格式)
在我们日常娱乐和日常学习中,我们在腾讯下载的视频都是qlv格式的,这个格式有个不好的地方就是我们只能在腾讯视频客户端才能播放,在别的地方根本无法打开,这可愁坏了不少朋友,那怎么讲qlv格式进行快速转换...
怎样能使发黄的手机壳变新(如何让发黄的手机壳变干净)
现在的人都比较爱惜自己的手机,所以上面一般都会有一个手机壳,这样才可以保护脆弱的手机外壳不被划伤。但是我们知道,手机壳一般都是塑料做的,用久了之后不仅会很脏。而且氧化之后上面也会发黄,看起来非常的难看...