用户资产表主键更新

故障现象:。在更新用户资产表的主键的时候,数据库存储过程抛出错误:

ORA-02292: 违反完整约束条件(OSS01.CNST_USER_MAIL_BINDING_FK) - 已找到子记录


故障分析:表的普通列更新在关系型数据库是正常现象,只会有两种结果:a、更新成功,b、更新不到记录。而表主键更新是关系型数据库的大忌,会产生很多问题。Oracle是明文不推荐这种操作的,如果应用确实有这方面的需求,需要关注如下几点:

1、  确认更新表是否被其他表进行外键关联。主从表结构,如果只更新主表,会报ORA-02292错误。正确的做法是,先更新从表,再更新主表。

2、  确认更新表的主键是否是表分区的值。如果使用了表的主键来进行分区,会报错误: ORA-14402: 更新分区关键字列将导致分区的更改。需要打开表的行迁移,使用命令:

Alter table XXX enable row movement;

注意:该语句会造成引用表XXX的对象(如存储过程、包、视图等)变为无效。执行完成后,最好执行一下utlrp.sql来编译无效的对象。

3、确认更新表是否会产生主键冲突的错误,代码要对更新语句进行索引冲突的错误捕捉。

 

修改方案:规避上面提到的三点问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值