将TIMESTAMP& ORA_ROWSCN为每一行生成?

时间:2014-11-27 04:10:38

标签: oracle oracle11g

配合,

当我尝试使用以下功能获取时间戳时,

SCN_TO_TIMESTAMP(ORA_ROWSCN)

得到错误,如

ORA-08181: specified number is not a valid system change number ORA-06512: at "SYS.SCN_TO_TIMESTAMP", line 1 ORA-06512: at line 1

我想获取为该行生成的SCN的时间戳来处理乐观锁定....

由于

1 个答案:

答案 0 :(得分:2)

这种方法存在一些问题。

首先,除非您的表是使用rowdependencies构建的,否则ora_rowscn将存储在块级别,而不是行级别。其次,scn_to_timestamp函数只能为相对较新的SCN值提供映射,可能最多只需几周。第三,映射本身并不是特别准确 - 我相信在11g的所有版本中它都会达到+/- 3秒。其他版本的Oracle的准确性可能会有所不同。将它们组合在一起,您不太可能使用函数提供的时间戳来实现乐观锁定。

单独使用ORA_ROWSCN会更好,但仍然有issues if you're trying to implement optimistic lockingORA_ROWSCN可能会使您的环境中的丢失更新不够容易,但这不是实施乐观锁定的最佳方法。