资讯专栏INFORMATION COLUMN

数据库序列信息采集的探究

IT那活儿 / 2555人阅读
数据库序列信息采集的探究
点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

问题起因

某日应用侧反馈说程序报错了,获取的序列值插入不到表里去,超出了字段长度限制。我当时就蚌埠住了,这序列长度能有多长嘛,字段长度得设置的多小?
随后应用就提出了要求,为了避免类似情况再次发生,要求统计全网程序账号的序列名,最小值、最大值、当前值,使用率,是否循环,长度,长度位数是否会增加等。我心想,行吧,那就统计吧。

解决思路

这么多库,不可能一个一个去肯定要想点省事的办法。
于是我想的是写个循环,每个库生成一个序列信息的文件,然后取关键信息,再对比一下序列的最大值和最小值的长度,给个判断结果,也就完成了。

问  题

查看序列视图,发现我们所需要的信息基本都有,但是唯独无法获取序列的当前值,没有当前值,使用率也无法计算,难受,难道还要查完dba_sequence再去查一次序列当前值?那就有点麻烦的感觉。
而且如果使用正常的sequence_name.CURRVAL去获取当前值,还可能碰到序列没有被初始化,获取会报错的问题,如下:
就是如果序列没有被使用过的话,需要先通过sequence_name.NEXTVAL获取一次值,才能使用。
这样看的话,如果存在序列未使用的情况,循环肯定会报错,我又不可能先去nextval一下,这会改变序列的值,万一应用哪天又要使用怎么办。要不就遇到这个报错的时候,就以最小值来当做序列的当前值,感觉很不靠谱的样子。
最后,我还是以取序列定义的方式来实现吧,取出定义,格式统一,想要的值都有,又不会对序列本身造成影响,岂不是美滋滋。

实  现

取出序列定义,剩下的就比较简单了,我们来看一个序列的定义通常是什么样的:
sql>set lin 200 pagesize 0 longc 9999999 long 9999999

sql>exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,SQLTERMINATOR,TRUE);

sql>select dbms_metadata.get_ddl(SEQUENCE,SEQUENCE_NAME,SEQUENCE_OWNER) STR from  dba_SEQUENCES where SEQUENCE_NAME=INDEX_ID;

--DDL内容:

CREATE SEQUENCE "SYS"."INDEX_ID"  MINVALUE 1 MAXVALUE 9999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL ;

CREATE SEQUENCE "SYS"."INDEX_ID"  MINVALUE 1 MAXVALUE 9999 INCREMENT BY
1 START WITH 1 NOCACHE NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL ;
*唯一需要注意的地方就是:cache和nocache的序列定义有细微差别,cache的话后面会有数值,批量处理的时候需要注意一下。
通过序列定义,可以直接得出账号,序列名,最小值、最大值、当前值,是否循环,而通过简单处理,就可以得到序列使用率,长度以及长度是否增加等信息,于是,很快就把全网数据库的序列信息采集完了,交差。
 

END





本文作者:许 珣

本文来源:IT那活儿(上海新炬王翦团队)


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

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

相关文章

  • [译] 存储和处理时间序列数据(“Time Series Databases”第三章)

    摘要:并且这种格式没有事先对时间序列的数量做任何限制。使用格式来存储时间序列数据的两种可能的。其中存放了时间列序列列和数值列三列。随着数据规模的继续增长,基于的应用程序越来越不适合处理这样规模的时间序列数据了。 就像我们在前一章提到的,一个时间序列是一系列数值,每个数值都伴随着一个时间值,代表数据被记录时的时间。时间序列数据存入后就很少再需要修改了,查询时经常是查询一个连续时间段的数据,也可...

    EastWoodYang 评论0 收藏0
  • 容器监控实践—Prometheus基本架构

    摘要:根据配置文件,对接收到的警报进行处理,发出告警。在默认情况下,用户只需要部署多套,采集相同的即可实现基本的。通过将监控与数据分离,能够更好地进行弹性扩展。参考文档本文为容器监控实践系列文章,完整内容见 系统架构图 1.x版本的Prometheus的架构图为:showImg(https://segmentfault.com/img/remote/1460000018372350?w=14...

    gghyoo 评论0 收藏0
  • 容器监控实践—Prometheus基本架构

    摘要:根据配置文件,对接收到的警报进行处理,发出告警。在默认情况下,用户只需要部署多套,采集相同的即可实现基本的。通过将监控与数据分离,能够更好地进行弹性扩展。参考文档本文为容器监控实践系列文章,完整内容见 系统架构图 1.x版本的Prometheus的架构图为:showImg(https://segmentfault.com/img/remote/1460000018372350?w=14...

    elina 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

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