写点什么

【YashanDB 知识库】收集统计信息时报错 YAS-00507 date/timestamp value overflow

作者:YashanDB
  • 2024-12-30
    广东
  • 本文字数:619 字

    阅读完需:约 2 分钟

本文内容来自 YashanDB 官网,原文内容请见 https://www.yashandb.com/newsinfo/7817899.html?templateId=1718516


问题现象


收集统计信息时报错:


SQL> exec DBMS_STATS.GATHER_TABLE_STATS('USER', 'T', null, 1, FALSE, 'FOR ALL COLUMNS SIZE AUTO', 8, 'GLOBAL', TRUE);


YAS-00507 date/timestamp value overflow


问题的风险及影响


统计信息无法收集成功


问题影响的版本


所有的 YashanDB 版本


问题发生原因


表中的 timestamp 列实际存储的数据,超出了 timestamp 的范围。


timestamp 的范围为 1-1-1 00:00:00.000000 ~ 9999-12-31 23:59:59.999999


解决方法及规避方式


1、在收集统计信息时指定列(method_opt 指定为 for colums (col_1) size auto),确认是哪一列导致的问题。


示例:exec DBMS_STATS.GATHER_TABLE_STATS('USER', 'T', null, 1, FALSE, 'for columns (b) size auto', 8, 'GLOBAL', TRUE);


2、使用 jdbc 查询此列,结果集用 getString 方法获取,查看实际存储的值。


示例:


PreparedStatement ps = conn.prepareStatement("select b from ggg order by b desc");


ResultSet rs = ps.executeQuery();


while(rs.next()){


System.out.println(rs.getString(1));


}


最后控制台输出中,年的部分大于 9999 的,就是异常数据。


示例(前两行为异常数据):


10001-01-12 01:01:01.0


10000-01-12 01:01:01.0


9999-01-12 01:01:01.0


9998-01-12 01:01:01.0


3、找到异常的数据行后,可以将此行数据删除;或者将对应列的数据更新为合法的值。操作完成后即可正常收集统计信息。

发布于: 刚刚阅读数: 3
用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
【YashanDB知识库】收集统计信息时报错YAS-00507 date/timestamp value overflow_数据库_YashanDB_InfoQ写作社区