【数据架构改造必读】一种零业务影响下的大表重构方法

简介:

目录

  • 快速改造表方法

  • 实例

 

随着信息技术的发展,业务的可用性要求越来越高,在高可用的环境中,如果需要改变表的定义是比较棘手的,特别是对于7x24的系统,需要停止业务来改造表定义的代价是非常大的。ORACLE提供的基本语法可以修改表的基本属性,但对于普通表、分区表、索引组织表之间的转换,是无法完成的,那么有哪些方法可以 转换呢?笔者在此给读者一个方法。


Part 1

 
 
 

方法介绍

 

在ORACLE优化过程中,经常会遇到普通表日积月累之后变大了,DBA一般建议改造成分区表,常用的改造方法、步骤如下:


1、 停业务,停监听等;

2、 将全表数据使用数据泵导出;

3、 DROP原表,新建分区表;

4、 将数据导入分区表中,恢复业务;


这样下来,一般需要停机几个小时,甚至需要熬夜实施。现在有一种方法,可以在线实施,并且不会影响业务,它就是在线重定义功能。(笔者已经多次成功实施)


从ORACLE 9i开始,提供了在线重定义的功能,通过调用DBMS_REDEFINITION包来实现,那它是如何实现的呢?我们先来了解下在线重定义。


在线重定义:通过调用DBMS_REDEFINITION包,在瞬间锁表的情况下,将表改造成理想的表。它使用数据同步原理,需要双倍空间(原来的表和索引 算一份),将数据全量同步到目标表,再做一次增量同步,这些过程都不会锁表,不影响业务使用,最后做一次增量数据同步和表定义对换,完成表转换,此时会锁 表,经验告诉笔者锁表时长在1s内(根据增量数据大小略有不同)。


常用场景:

1. 普通表、分区表、索引组织表之间的相互转换;

2. 将表迁移至其他表空间;

3. 修改表的存储属性;

4. 重建表以减少碎片;


优点:

1. 对业务影响非常小,锁表时间非常短,仅在结束时瞬间存在;

2. 速度较快,在实践中15G的表仅用了12min;


缺点:

1. 需要使用与原表同样大小的存储空间,包括索引、LOB字段等;

2. 需要占用一定的系统资源;


实现步骤:

1. 检查表能否进行在线重定义,通过主键或rowid两种方法;

2. 创建目标表结构,空表,索引等不用创建;

3. 开始进行在线重定义,先全量同步一次数据;

4. 同步依赖的对象,包括索引、约束、触发器、权限等;

5. 做一次增量数据同步;

6. 完成在线重定义;

7. 清理旧表,释放空间;

8. 收集统计信息,检查索引名,并行度等;


DBMS_REDEFINITION包:

1. ABSORT_REDEF_TABLE:清理重定义的错误和中止重定义;

2. CAN_REDEF_TABLE:检查表是否可以进行重定义;

3. COPY_TABLE_DEPENDENTS:同步依赖的对象,如索引、权限、约束、触发器等;

4. FINISH_REDEF_TABLE:结束在线重定义;

5. REGISTER_DEPENDENTS_OBJECTS:注册依赖的对象,如索引、约束、触发器等;

6. START_REDEF_TABLE:开始在线重定义;

7. SYNC_INITERIM_TABLE:同步增量数据;

8. UNREGISTER_DEPENDENT_OBJECT:不注册依赖的对象,如索引、约束、触发器等;


在线重定义支持两种重定义的方法,一种是基于主键,一种是基于ROWID。其中ROWID的方法是10G以后才支持,且不能用于索引组织表,而且重定义完成后会存在隐藏列M_ROW$$。默认采用主键的方式。


Part 2

 
 
 

小实验

 

在工作中,普通表转换成分区表是最常见的,今天一起和大家来做个小实验。


背景:需要将HJADM.REC_CODE_RESULT表改造成分区表HJADM. REC_CODE_RESULT_TARGET,目标表已经创建好了,原表存在主键。


第一步: 检查表能否进行在线重定义


\


总结:检查表通过主键可以进行重定义。如果表没有主键,那么使用rowid的方法,调用的是dbms_redefinition.cons_use_rowid。


第二步: 创建目标表


在实施前已经创建好表HJADM. REC_CODE_RESULT_TARGET。


第三步: 开始进行在线重定义


\

总结:开始进行重定义会比较慢,因为需要做一次全量数据同步。全量数据同步完成后,检查了一下记录数,已存在增量数据了。


第四步: 同步依赖的对象


\

总结:复制相关的依赖对象,完成后检查结果没有报错。若是9i的数据库,可以手工建立相关的对象。


第五步: 做一次增量数据同步


\

总结:结束重定义,此时会锁表,交换表涉及的数据字典中的相关数据。


第六步: 完成在线重定义


\

总结:结束重定义,此时会锁表,交换表涉及的数据字典中的相关数据。



第七步: 清理旧表,释放空间


\


总结:将旧表删除,以释放空间。


第八步: 收集表的统计信息,检查索引名、并行度等,检查无效对象,最好编译一下


PS:此步比较容易忘记。


总结:此表约有5G的数据,整个操作过程约10min完成,仅在完成重定义的时候锁了一下表,在1s内完成,对业务的影响几乎为零。


在线重定义的功能对7x24的OLTP系统有非常大的优势,在重定义的过程中,也不影响业务的使用,业务仍然可以对其访问、修改、新增、删除等操作,是实现数据库高可用的一个很实用的方法。分享就到此了,希望大家有所收获。


作者介绍:温伟灵

 

  • 新炬网络高级技术专家

  • 拥有六年的IT运维经验,从工作开始接触ORACLE数据库,精通ORACLE数据库的内 存结构、RAC、DataGuard等,在备份恢复、GoldenGate方面有深入的钻研。

  • 具有30TB级的OLTP数据库运维经验,擅长故障诊断、处 理。

  • 目前负责十多个客户的数据库运维工作,具有交通、金融、政府、移动、医疗等行业的运维经验。


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2015-12-27
目录
相关文章
|
28天前
|
消息中间件 存储 缓存
十万订单每秒热点数据架构优化实践深度解析
【11月更文挑战第20天】随着互联网技术的飞速发展,电子商务平台在高峰时段需要处理海量订单,这对系统的性能、稳定性和扩展性提出了极高的要求。尤其是在“双十一”、“618”等大型促销活动中,每秒需要处理数万甚至数十万笔订单,这对系统的热点数据处理能力构成了严峻挑战。本文将深入探讨如何优化架构以应对每秒十万订单级别的热点数据处理,从历史背景、功能点、业务场景、底层原理以及使用Java模拟示例等多个维度进行剖析。
53 8
|
1月前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
254 7
|
1月前
|
数据采集 搜索推荐 数据管理
数据架构 CDP 是什么?
数据架构 CDP 是什么?
51 2
|
4月前
|
机器学习/深度学习 数据采集 人工智能
揭秘!47页文档拆解苹果智能,从架构、数据到训练和优化
【8月更文挑战第23天】苹果公司发布了一份47页的研究文档,深入解析了其在智能基础语言模型领域的探索与突破。文档揭示了苹果在此领域的雄厚实力,并分享了其独特的混合架构设计,该设计融合了Transformer与RNN的优势,显著提高了模型处理序列数据的效能与表现力。然而,这种架构也带来了诸如权重平衡与资源消耗等挑战。苹果利用海量、多样的高质量数据集训练模型,但确保数据质量及处理噪声仍需克服。此外,苹果采取了自监督与无监督学习相结合的高效训练策略,以增强模型的泛化与稳健性,但仍需解决预训练任务选择及超参数调优等问题。
156 66
|
28天前
|
运维 负载均衡 Shell
控制员工上网软件:高可用架构的构建方法
本文介绍了构建控制员工上网软件的高可用架构的方法,包括负载均衡、数据备份与恢复、故障检测与自动切换等关键机制,以确保企业网络管理系统的稳定运行。通过具体代码示例,展示了如何实现这些机制。
119 63
|
2月前
|
前端开发 JavaScript
掌握微前端架构:构建现代Web应用的新方法
本文介绍了微前端架构的概念及其在现代Web应用开发中的优势与实施方法。微前端架构通过将应用拆分成独立模块,提升了开发效率和灵活性。其核心优势包括技术栈灵活性、独立部署、团队协作及易于维护。文章详细阐述了定义边界、选择框架、管理状态和通信等关键步骤,并讨论了状态同步、样式隔离及安全性等挑战。微前端架构有望成为未来Web开发的重要趋势。
|
3月前
|
存储 搜索推荐 数据库
MarkLogic在微服务架构中的应用:提供服务间通信和数据共享的机制
随着微服务架构的发展,服务间通信和数据共享成为关键挑战。本文介绍MarkLogic数据库在微服务架构中的应用,阐述其多模型支持、索引搜索、事务处理及高可用性等优势,以及如何利用MarkLogic实现数据共享、服务间通信、事件驱动架构和数据分析,提升系统的可伸缩性和可靠性。
54 5
|
2月前
|
存储 大数据 数据处理
洞察未来:数据治理中的数据架构新思维
数据治理中的数据架构新思维对于应对未来挑战、提高数据处理效率、加强数据安全与隐私保护以及促进数据驱动的业务创新具有重要意义。企业需要紧跟时代步伐,不断探索和实践新型数据架构,以洞察未来发展趋势,为企业的长远发展奠定坚实基础。
|
4月前
|
安全 IDE Java
从0到1探索淘宝短视频流的架构再设计和工程重构
随着视频流业务的发展,业务的复杂性越来越高,视频流老工程在架构设计、代码质量、工程能力等方面的问题也逐渐凸显。本次重构是一次对大型业务工程进行架构再设计和重构的探索,本文是对这次探索的一次梳理与总结。
|
4月前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。