我们有一个表TRANSMISSIONS(ID,NAME),表现得很有趣:
TRANSMISSION的主键是ID,NAME上还有一个唯一的约束 - 因此ID和NAME上都有索引。我们还有一个触发器,它使用序列为列ID创建值,因此INSERT语句不需要为ID提供值。
除了TRANSMISSIONS之外,还有两个表就像这样。对于其他表,上述陈述工作正常。
数据库在具有Hibernate的应用程序中使用,由于JPA配置不正确,我们在一段时间内为ID生成了高值。请注意,我们仅对“手动”INSERT语句使用触发器,并且Hibernate本身也使用序列生成ID值。
第一个想法是问题是由于高ID,但我们也遇到了从未有过如此高ID的表格的问题。
无论如何,我们怀疑索引可能会以某种方式碎片化并称为ALTER INDEX TRANSMISSIONS_PK SHRINK SPACE COMPACT,它已经通过但没有显示效果。
另外,我们想要调用ALTER TABLE TRANSMISSIONS SHRINK SPACE COMPACT,因为我们需要先调用ALTER TABLE TRANSMISSIONS ENABLE ROW MOVEMENT,它们从未完成。
我们有另一个数据库实例,它的表现不是那么有趣。所以我们认为在运行应用程序的过程中,数据库可能会以某种方式进入不一致的状态。
有人有什么建议可能已经失去控制/进入一个不一致的状态吗?
更多提示:
数据库中的任何对象都没有锁(根据v $ lock和v $ locked_object中的信息)
我们在SQL Developer中尝试了所有这些语句,并且还使用了SQLPlus(命令行工具)。