【发布时间】:2015-08-11 07:18:25
【问题描述】:
我与ora_rowscn 一起跟踪表中更改的行并处理更新的行。
上周我注意到,对于我使用rowdependencies 创建的一些(不是全部)表,ora_rowscn 发生更改,而表上没有任何事务。我的意思是,如果我选择max(ora_rowscn),我总是会得到更高的数字。
这是我如何创建表格的示例
-
创建表
create table test ( test_id number, txt varchar2(5) ) rowdependencies; -
往表中插入一些数据
insert into test values(1,'a'); insert into test values(2,'b'); insert into test values(3,'c'); -
使用 ORA_ROWSCN 多次查询表
select max(ora_rowscn),max(b.current_scn) from test a, v$database b
我每次查询都会得到一个更高的max(ora_rowscn)。
在 MetaLink 上我发现了两个报告的错误(错误 14093863、错误 9814923),它们似乎是同一个问题,但设置为不是错误。
为什么会发生,有什么解决方案可以让它工作或修复它?
【问题讨论】:
-
我没看到; max(b.current_scn) 当然在增加,但 max(ora_rowscn) 保持稳定。但后来你说不是每张桌子,这也很有趣。您正在运行哪个补丁级别?您是否真的在测试表中看到了这种行为?
-
我们使用的是 11.2.0.3 和 11.2.0.4,但我不确定它是否也在 11.2.0.4 上。机器。我不能给你任何进一步的信息,你可以做些什么来重新调整它。我不知道表开始出现这种行为的原因是什么。我家里没有 DB EE,这是我工作中的一个例子。
-
在您的工作机器上,您在此处使用的
test表是否显示了问题?或者,如果您完全按照您在此处所做的那样构建了test表,它会是不显示问题的表之一吗?您确定您没有某些进程会触及其ora_rowscn值增加的表中的行吗?即使这些进程实际上并未更改数据,也许它们正在运行UPDATE将一行中的值设置为其当前值? -
@JustinCave 不是测试表,我有临时表,我每天一次从文件中导入数据(包含更多列),带有主键和一些简单的索引,但我不相信它可能是一个问题。
testtable 只是一个简单的例子。是的,我确定在此表上没有进行更新、插入和其他DMLs的进程。在我的帖子中,我发布了一些具有相同问题的金属链接错误,因此问题存在。我想一定是更复杂的内存(PGA/SGA?)问题,是什么让Oracle感到困惑。 -
您的暂存表(我假设是您看到的地方)是外部表吗?还是由 SQL*Loader 或其他进程填充?