1

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

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

选择 *
从 CUT_BLOCK_COMBO AS OF TIMESTAMP FROM_TZ(TO_TIMESTAMP('2007-08-28 00:00:00','YYYY-MM-DD HH24:MI:SS'), 'UTC')
哪里 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”子句查询数据。

创建或替换视图 CUT_BLOCK_COMBO_VW 为 select * from CUT_BLOCK_COMBO;
选择 *
从 CUT_BLOCK_COMBO_VW AS OF TIMESTAMP FROM_TZ(TO_TIMESTAMP('2007-08-28 00:00:00','YYYY-MM-DD HH24:MI:SS'), 'UTC')
哪里 CB_SKEY = 4141;

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

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

4

1 回答 1

0

它可以作为内嵌视图工作吗?

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

只是一个理论,但我认为您可以很容易地对其进行测试,并可能通过跟踪执行来证明该理论。

如果是这种情况,那么恐怕我想不出一个安全的解决方法。

于 2013-05-31T06:01:28.190 回答