ORA-01466: unable to read data - table definition has changed(无法读取数据 —— 表定义已更改)
Oracle含义
读取过去某一时间点数据的查询(Flashback Query、AS OF 或一致性读)失败,因为在所查询的过去时间与当前之间表定义(DDL)发生了变化。Oracle 无法用当前定义安全地读取该时间点的数据。
原因
在 Flashback/AS OF 查询所针对的时间戳之后,对表执行了 DDL(添加/删除列、类型更改)。此外,客户端与服务器之间的时钟差异,或查询非常近的过去(几秒钟)时,也可能因 SCN/时间精度而引发此错误。
解决方法
将闪回查询指向表发生 DDL 更改之前的时间/SCN。尽可能使用确切的 SCN 而不是时间戳(AS OF SCN)。对于非常近的过去的查询,再往前回退几秒。如果需要长期访问历史数据,考虑采用版本化或归档表设计,而不是依赖 DDL。
同一数据库的其他条目
- ORA-00494enqueue held for too long by 'inst N, osid M'(enqueue 被 'inst N, osid M' 持有时间过长)
- ORA-04021timeout occurred while waiting to lock object(等待锁定对象时超时)
- ORA-04061existing state of package/procedure has been invalidated(包/过程的现有状态已失效)
- ORA-08176consistent read failure; rollback data not available(一致性读失败;回滚数据不可用)
- ORA-00020maximum number of processes (N) exceeded(超出最大进程数 N)
- ORA-01113file N needs media recovery(文件 N 需要介质恢复)
- ORA-02393exceeded call limit on CPU usage(超出单次调用的 CPU 使用限制)