Java 使用ora_rowscn了解每个更改
我想使用java应用程序跟踪oracle11g中表上的所有更改 我正在考虑像这样使用Java 使用ora_rowscn了解每个更改,java,sql,oracle,oracle11g,Java,Sql,Oracle,Oracle11g,我想使用java应用程序跟踪oracle11g中表上的所有更改 我正在考虑像这样使用ora_rowscn:执行选择,每次都获取更多最新记录: max=0; While(true){ ps=con.prepare语句(“选择rowscn,*from t where ora_rowscn>?”; ps.setInt(最大值); max=calcMaxRowScn(ps.getResultSet()); } calcMaxRowScn-从结果集中返回最大rowscn Oracle文档状态: “ORA
ora_rowscn
:执行选择,每次都获取更多最新记录:
max=0;
While(true){
ps=con.prepare语句(“选择rowscn,*from t where ora_rowscn>?”;
ps.setInt(最大值);
max=calcMaxRowScn(ps.getResultSet());
}
calcMaxRowScn
-从结果集中返回最大rowscn
Oracle文档状态:
“ORA_ROWSCN返回该行最近更改的保守上限系统更改编号(SCN)”
因此:
您不应该错过任何更新(您显然会错过任何删除)。您可能会看到行更改的
ORA_ROWSCN
,即使实际上没有进行更改,尤其是在未启用ROWDEPENDENCIES
的情况下生成表时,因为默认情况下,SCN存储在块级别而不是行级别。只要您的应用程序能够处理未更改的行,就可以了。当然,由于ORA_ROWSCN
没有索引,因此在Java中,每次循环都会对表进行完整扫描——这很容易导致速度非常慢,并给数据库服务器带来相当大的负载
根据您试图实现的目标,可能有一个更简单的选择。例如,您可能希望使用类似的内容,而不是自己滚动