辞旧迎新:2018年的分区你们建了吗?

各位同学,大家好!

转眼2017年就要结束了,在这过去的一年,我们有遇到困难解决不了的苦恼,亦有处理了棘手问题的快乐,还有在云和恩墨大讲堂里得到云和恩墨舵主以及群友帮助的感激。

在这里,我们有收获,有成长,2018年就要来了,下面分享一下我们云和恩墨DBA同学在新年到来之前,最最重要的工作,供大家参考!

那什么工作是最最重要的呢?年底和新年活动保障?月结保障?no, no, no, 这些当然重要,但这不是最最重要的,如果出现性能问题,大部分时候是系统慢一点,是的不会出错。

最最重要的是,要[red]提前帮用户检查2018年的分区,或年表月表,是否创建[/red]。

这为什么重要?

  • 因为如果没有采用分区表,采用年表月表的形式,如果2018年的表不存在,相关数据操作会立刻报错!

  • 而如果情况是2018年的分区没有创建,那么假如在11g以上的环境中,使用了interval分区技术,那么也不用过度担心。但如果没有采用interval分区,那么当2018年数据插入的时候,也会立刻报错!

那么,我们如何帮用户检查呢?

检查步骤

1、首先确定要检查哪些用户下的表

在一些生产环境上,会存一些做测试的用户,这些用户下的对象,我们其实并不需要关注。

所以,我们需要先确定要排查的用户是谁。

2、检查分区表

一般分区表命名都是规范的,可以从分区命名上来判断:

例如,分区名为 表名_YYYYMM

with a as (select table_owner, table_name, partition_name from dba_tab_partitions where table_owner in [red](....)[/red] and substr(partition_name, -6) like '2017__')

b as (select table_owner, table_name, partition_name from dba_tab_partitions where table_owner in [red](....)[/red] and substr(partition_name, -6) like '2018__')

select a.table_owner, a.table_name, min(a.partition_name) min_pname ,max(a.partition_name) max_pname from a left join b

on a.table_owner=b.table_owner and a.table_name=b.table_name and a.partition_name=replace(b.partition_name,'2018','2017') where b.table_name is null

group by a.table_owner, a.table_name;

上面这个SQL会将指定用户下的表的分区做比对,并会给出缺失的月份里,最小和最大的对应的2017年的月份。

如下为示例,在Scott用户下有两个测试表,PA和PB,他们的分区情况如图

用上述SQL查出的结果如图:

对于有些应用来说,分区名上只有月份,没有年份,这种情况一般是循环使用的分区,只要12个分区都存在,就不会有问题。

3、检查2018年的年表、月表是否已创建

如果没有使用分区表,而是使用了年表或月表,则如果命名是很规范的,那么判断思路是一样的,所不同的只是将查询的视图和SQL换了一下

同样,我们假定命名格式为:基表名_YYYYMM

with a as (select owner, table_name from dba_tables where owner in [red](....)[/red] and substr(table_name, -6) like '2017__')

,b as (select owner, table_name from dba_tables where owner in [red](....)[/red] and substr(table_name, -6) like '2018__')

select a.owner, substr(a.table_name,1,length(a.table_name)-6) base_tname, min(a.table_name) min_tname ,max(a.table_name) max_tname from a left join b

on a.owner=b.owner and a.table_name=replace(b.table_name,'2018','2017')

where b.table_name is null

group by a.owner, substr(a.table_name,1,length(a.table_name)-6) ;

如下为示例,在Scott用户下有9个测试用的月表,他们的命名情况如图

用上述SQL查出的结果如图:

由上可见,SQL并不会关心表命名的中间是否有缺漏月份。但通常情况不会出现上面这样,有1/5/6三个月份却没有其他月份,这里只是测试数据,目的也是为了加深大家对此SQL查询结果的理解(对分区表也如是)。

年表的情况类似,就不赘述了。

结语

看到这里,大家赶紧去检查下自己的库吧!

这时候你会不会想到,会写SQL的DBA是多么的幸福,自己动动手就能搞定一些需要DIY的问题呢?

如果你碰到的情况是,分区表命名不规范又不是interval分区,那么就会比较麻烦啦,因为分区值存放是long类型的,这个数据类型Oracle已经不建议使用了,处理起来比较麻烦……在这迎接新年的大好时光,我们就不烧脑啦!希望你不要碰到这种情况 :)

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-12-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

逆向工厂(一):从hello world开始

* 本文原创作者:追影人,本文属FreeBuf原创奖励计划,未经许可禁止转载 前言 从本篇起,逆向工厂带大家从程序起源讲起,领略计算机程序逆向技术,了解程序的运...

2088
来自专栏jojo的技术小屋

原 微信小程序踩坑录(canvas、pos

作者:汪娇娇 日期:2016.11.24 现在也不知道距离微信公测多少日子了,反正感觉我是埋在微信小程序这个坑里很久了,公司的项目终于快接近尾声,现在就腾点时间...

3125
来自专栏守候书阁

用vue一个计算属性,实现一个常见表单交互效果

vue.js是现在用的非常火热的一个前端框架,表单又是网站基本不会缺少的一环。用vue操作表单。表单的操作方式也是多种多样。今天我说的,就是我项目那里做的这一种...

491
来自专栏逸鹏说道

一个粗心的Bug,JSON格式不规范导致AJAX错误

一、事件回放 今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里。 当时正在联调一个项目,由于后端没有提供数据...

3224
来自专栏施炯的IoT开发专栏

Microsoft IoT Starter Kit 开发初体验-反馈控制与数据存储

    在上一篇文章《Microsoft IoT Starter Kit 开发初体验》中,讲述了微软中国发布的Microsoft IoT Starter Kit...

1765
来自专栏SAP最佳业务实践

SAP最佳业务实践:ETO–报价处理(232)-12组件和活动更新

image.png CJ20N组件和活动更新 由于客户修改订购的最终产品数量,项目必须根据这一新的信息进行更改。注意的是,项目的组件和作业的期间也需要进行相应的...

3035
来自专栏醉程序

怎么使用slim-jwt-auth对API进行身份验证

1272
来自专栏Vamei实验室

树莓派:光阴的故事

对于电子设备来说,时间都是基础性的功能,也很容易被人忽视。上世纪的“千年虫”问题,就是时间方面设计缺陷造成的。对于网络连接的多设备来说,保持时间同步又是一个新的...

2578
来自专栏IT派

10 个技巧,让你更专业地使用 console 进行 JS 调试

首先,我必须承认这一点,我将利用这个平台从我的开发环境中清理出骨架(轮廓)。有时候,我所做的“魔法”(有些人称之为“编码”),并不像我的同事在为他们展示这些宏伟...

820
来自专栏腾讯移动品质中心TMQ的专栏

解放你的双手—iOS自动测试基础

每一个测试人员都有一颗要做自动化测试的心,这不仅仅是因为自动化测试能在一定程度上提高测试效率,还在于这是测试人员自我价值的一个较好的体现,似乎不做自动测试都不好...

2005

扫描关注云+社区