2023年12月8日发(作者:)

【异常】Causedby:otFoundException。。。

Caused by: otFoundException: tegrityViolationException

at ssLoader$(Unknown Source)

at ileged(Native Method)

at ass(Unknown Source)

at ass(Unknown Source)

at ass(Unknown Source)

at e(:257)

这个异常是数据库插入时违反数据库约束引起 ,例如主键重复、向非空字段插入空值,或者插入字段违反表结构等

由于现场没有及时反馈日志, 只能通过数据库信息排查

--查看SEQ 信息

SELECT US.*

FROM USER_SEQUENCES US

WHERE CE_NAME IN

('SEQ_PAYMENT', 'SEQ_PAYMENTDETAIL', 'SEQ_PHYRESOURCE',

'SEQ_DOCARDLOG', 'SEQ_VOUCARDSALE', 'SEQ_VOUCARDSALELIST');

--查看表信息

SELECT _NAME, _ROWS

FROM USER_TABLES UT

WHERE _NAME IN

('PAYMENT', 'PAYMENTDETAIL', 'PHYRESOURCE', 'DOCARDLOG',

'VOUCARDSALE', 'VOUCARDSALELIST');

获取到日志后发现原因

ORA-01438: value larger than specified precision allowed for this column

; nested exception is eption: ORA-01438: value larger than specified precision allowed for this column

OPERATORCREDITADJUSTLOG 表最大到999999 ,实际数量只有2W多, 单最大ID 已经到999992 ,造成这个原因是因为 SEQ 中设置

了 cache =20 这个缓存失效 造成 SEQ 值的浪费

最后 修改表结构可 设置 更大 的值,同时讲 seq中的 cache 设置为0