问题描述
在使用 DBMS_STATS.GATHER_TABLE_STATS 收集表的统计信息时,出现如下报错:
YAS-00507: date/timestamp value overflow
问题影响
该错误会阻止统计信息的采集,影响查询优化器的判断,进而影响数据库性能。
适用版本
适用于所有 YashanDB 版本。
问题原因
此错误多因表中某列为 timestamp 类型,且存在非法日期值,例如年字段大于 9999.超出了 timestamp 合法范围(1-1-1 至 9999-12-31)。
排查步骤
① 定位问题列:
修改统计信息收集命令,仅针对某一列执行,例如:
exec DBMS_STATS.GATHER_TABLE_STATS('USER', 'T', null, 1. FALSE, 'for columns (b) size auto', 8. 'GLOBAL', TRUE);
② 通过 JDBC 程序查看异常数据:
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),即为问题根源。
③ 修复异常数据:
可选择删除这类记录或将其改为合法日期,修改后再次执行统计信息收集即可。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。