1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

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

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

大家好,我是本际云服务器推荐网的小编小本本。前段时间因为某数据库存储空间不足,领导让我把旧表空间删掉,用以回收存储空间给当前在用的表空间使用。所以我写了一个脚本来快速生成move表相关操作,并且move方式对生产的影响尽可能地小。

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

表空间情况描述

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

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

  • 表为普通表,有普通索引和分区索引
  • 表为普通表,仅有普通索引
  • 表为普通表,仅有分区索引
  • 表为普通表,无索引
  • 表为分区表,有全局索引和本地索引
  • 表为分区表,仅有全局索引
  • 表为分区表,仅有本地索引
  • 表为分区表,无索引

我的处理思路是:

  1. 编辑好参数文件,包含属主、表名、move并行度、表move目标表空间、索引move目标表空间。读取一行后,将表的情况输出至表临时文件,将索引的情况输出至索引临时文件。
  2. 将得出的表和索引临时文件根据是否分区的标志位“YES”“NO”做处理。
  3. 根据相应的文件是否存在,从而根据不同的情况输出不同情况下的SQL操作语句。如果是普通表,则先move表,若表既有普通索引又有分区索引,则先rebuild普通索引,再将分区索引按分区rebuild;若只有一种索引,则在move表后rebuild即可。
  4. 如果是分区表,则根据索引类型,输出对应的SQL操作语句。如果分区表既有全局索引又有分区索引,则先rebuild全局索引,然后逐个move分区(加updateglobalindexes参数防止全局索引失效),当move一个分区后,随即rebuild这个分区上的所有分区索引的对应分区,再循环操作下一个表分区。

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

问题处理及总结

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

以上就是如何快速生成表MOVE相关操作的全部内容。谢谢大家的阅读。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/5936.html