Oracle Total Recall和Views

时间:2013-05-30 18:34:55

标签: oracle

我正在创建一个相当深入的时态数据库原型,我们使用Oracle的Total Recall来管理事务时间。

我的测试数据集包含大约150k个当前行以及加载到启用FLASHBACK ARCHIVE的表中的170k个退役行。增强的SQL查询(如下面的第一个)正确执行,提供适当的数据结果。

select * 
from CUT_BLOCK_COMBO AS OF TIMESTAMP FROM_TZ(TO_TIMESTAMP('2007-08-28 00:00:00','YYYY-MM-DD HH24:MI:SS'), 'UTC')
WHERE CB_SKEY = 4141;

此select语句返回以下数据:

    CB_SKEY    HVA_SKEY FOREST_FILE_ID CUTTING_PERMIT_ID TIMBER_MARK CUT_BLOCK_ID 
----------- ----------- -------------- ----------------- ----------- ------------ 
       4141       53094 A80053                           80053       29025        

然而,一旦我将表包装到视图中,我就不能再使用'AS OF TIMESTAMP'子句查询数据了。

create or replace view CUT_BLOCK_COMBO_VW as select * from CUT_BLOCK_COMBO;
select * 
from CUT_BLOCK_COMBO_VW AS OF TIMESTAMP FROM_TZ(TO_TIMESTAMP('2007-08-28 00:00:00','YYYY-MM-DD HH24:MI:SS'), 'UTC')
WHERE CB_SKEY = 4141;

视图中的select语句返回以下错误: ORA-01466:无法读取数据 - 表定义已更改

创建视图定义时我错过了什么想法?我在文档中找不到任何内容(Oracle Total Recall 11G R2

1 个答案:

答案 0 :(得分:0)

它是否可以作为内联视图?

我怀疑该视图必须存在于时间戳中。可能代码正在查找您使用AS OF的对象的创建日期或最后DDL时间。

只是一个理论,但你可以很容易地测试它,并且可能通过追踪执行来证明这个理论。

如果是这样,那么我恐怕不会想到一个安全的解决方法。