发现这样的问题有两种可能性:
FRM-40654:已更新记录。重新查询块,已查看更改!
1.表被锁定。查看是否有被锁定请参考下文查询,并利用SQL进行解锁。
在erp中我们常常会遇到表锁定的问题,那么我们如何去查那些表被锁定了呢?一下是fifali提供的一个查找解锁表的SQL语句,在执行该SQL后你可以杀掉该表对应的 DB_PID
进程。
杀进程的语句为:
alter system kill session 'session_id,serial#';
一下是SQL 。
-
- SELECT dob.OBJECT_NAME Table_Name
- lo.LOCKED_MODE,
- lo.SESSION_ID,
- vss.SERIAL#,
- vps.spid,
- vss.action Action,
- vss.osuser OSUSER,
- vss.process AP_PID,
- VPS.SPID DB_PID,
- 'alter system kill session ' || '''' || lo.SESSION_ID || ',' ||vss.SERIAL# || ''';' kill_command
- from v$locked_object lo, dba_objects dob, v$session vss, V$PROCESS VPS
- where lo.OBJECT_ID = dob.OBJECT_ID
- and lo.SESSION_ID = vss.SID
- AND VSS.paddr = VPS.addr
- order by 2, 3, DOB.object_name;
这是查找被锁包的SQL 。
2.该表中有一个看不见的字符(空格结尾)遇到该问题,请用数据库后台将空格去掉(首先尝试前台诊断是否可以修改)。