资讯专栏INFORMATION COLUMN

如何快速生成表MOVE相关操作

IT那活儿 / 1355人阅读
如何快速生成表MOVE相关操作
点击上方蓝字关注我们


事情来由


前段时间某数据库存储空间不足,领导让我把旧表空间删掉,用以回收存储空间给当前在用的表空间使用,所以有了写一个脚本快速生成move表相关操作并且move方式对生产的影响能做到尽可能小的想法。时间紧迫,这里用了较为熟悉的shell方式。


表空间情况描述


旧表空间数据文件有一个多T,但实际使用空间只有300多G,很多表已经清空了,表结构还在。查询了表的类型和索引类型,可以说是各种类型都有,部分表还带LOB字段,总之就是表很多,种类很杂,简单的SQL语句拼接肯定是不行了。


思路梳理及脚本


总结可能会碰到的情况,实际上有以下几种:

  1. 表为普通表,有普通索引和分区索引

  2. 表为普通表,仅有普通索引

  3. 表为普通表,仅有分区索引

  4. 表为普通表,无索引

  5. 表为分区表,有全局索引和本地索引

  6. 表为分区表,仅有全局索引

  7. 表为分区表,仅有本地索引

  8. 表为分区表,无索引


*表含有LOB字段的情况,可以后续多带带处理,因为情况相对较少,仅普通LOB字段和分区LOB字段


我的处理思路是:

1、编辑好参数文件,包含属主、表名、move并行度、表move目标表空间、索引move目标表空间。读取一行后,将表的情况输出至表临时文件,将索引的情况输出至索引临时文件,内容如下图:

2.将得出的表和索引临时文件根据是否分区的标志位“YES”“NO”做处理。如下图所示:

3.根据相应的文件是否存在,从而根据不同的情况输出不同情况下的SQL操作语句。

如果是普通表,则直接先move表,若表既有普通索引又有分区索引,则先rebuild普通索引,再将分区索引按分区rebuild(无法整个rebuild);若只有一种索引,则在move表后rebuild即可。如下图所示:

4.如果是分区表,则要复杂一些。如果分区表既有全局索引又有分区索引,那么先rebuild全局索引,然后逐个move分区(加updateglobalindexes参数防止全局索引失效),当move一个分区后,随即rebuild这个分区上的所有分区索引的对应分区,再循环操作下一个表分区。如果分区表仅有一种索引,则也是根据索引类型,输出对应的SQL操作语句即可。


后续操作


执行脚本后,就将所有的move相关操作都输出到了统一的SQL文件中,并将处理过的表按普通和分区表分区做了跟踪列表。只需找个空闲的窗口后台调用此SQL文件即可。如下图所示:



问题处理及总结


当然,脚本只是个工具,是辅助我们提高工作效率的,在move过程中,应当做好监控,防止有异常产生,并写好应对异常的预案,比如失效索引批量重建啥的。而对于LOB字段,更应当根据实际情况来处理,需要考虑数据库本身配置、性能以及LOB字段大小等。在真正删除表空间及数据文件前,也应当最后确认一下是否还有对象,并做自包含检查。在删除表空间之后,为防止特殊情况,可以再建一个同名的表空间,给一个很小的数据文件即可。


END




文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130005.html

相关文章

  • DBASK问答集萃(2)

    摘要:新晋技术专家下面是墨天轮部分新晋的技术专家。大家可以点击往期阅读墨天轮技术专家邀请函了解详情,申请成为我们的技术专家,加入专家团队,与我们一起创建一个开放互助的数据库技术社区。新关联公众号墨天轮是一个开放互助的数据库技术社区。 引言 近期我们在DBASK小程序增加了数据库 MongoDB、Redis、 Elasticsearch、DB2、Weblogic 等新的的专题栏目和一些新的技术...

    liuchengxu 评论0 收藏0
  • 用 JavaScript 实现链操作 - 10 Move Node In-place

    摘要:需求实现一个函数,把源链表的头结点移到目标链表的开头。要求是不能修改两个链表的引用。跟前一个不同的是,这个是在不改变引用的情况下修改两个链表自身。最优的方案这个算法考的是对链表节点的插入和删除。大致思路为对做删除一个节点的操作。 TL;DR 用 in-place 的方式把一个链表的首节点移到另一个链表(不改变链表的引用),系列目录见 前言和目录 。 需求 实现一个 moveNode()...

    CNZPH 评论0 收藏0
  • Move Mirror:使用 TensorFlow.js 在浏览器中预测姿势之 AI 实验

    摘要:文和,创意实验室创意技术专家在机器学习和计算机视觉领域,姿势预测或根据图像数据探测人体及其姿势的能力,堪称最令人兴奋而又最棘手的一个话题。使用,用户可以直接在浏览器中运行机器学习模型,无需服务器。 文 /  Jane Friedhoff 和 Irene Alvarado,Google 创意实验室创意技术专家在机器学习和计算机视觉领域,姿势预测或根据图像数据探测人体及其姿势的能力,堪称最令人兴...

    MiracleWong 评论0 收藏0
  • 用 JavaScript 实现链操作 - 09 Move Node

    摘要:需求实现一个函数,把源链表的头节点移到目标链表。当源链表为空时函数应抛出异常。为了简化起见,我们会用一个对象来存储改变后的源链表和目标链表的引用。它也是函数的返回值。解法配合,这个非常简单,注意这个函数没有改变两个链表本身。 TL;DR 把一个链表的首节点移到另一个链表。系列目录见 前言和目录 。 需求 实现一个 moveNode() 函数,把源链表的头节点移到目标链表。当源链表为空时...

    suosuopuo 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<