配合,
当我尝试使用以下功能获取时间戳时,
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的时间戳来处理乐观锁定....
由于
答案 0 :(得分:2)
这种方法存在一些问题。
首先,除非您的表是使用rowdependencies
构建的,否则ora_rowscn
将存储在块级别,而不是行级别。其次,scn_to_timestamp
函数只能为相对较新的SCN值提供映射,可能最多只需几周。第三,映射本身并不是特别准确 - 我相信在11g的所有版本中它都会达到+/- 3秒。其他版本的Oracle的准确性可能会有所不同。将它们组合在一起,您不太可能使用函数提供的时间戳来实现乐观锁定。
单独使用ORA_ROWSCN
会更好,但仍然有issues if you're trying to implement optimistic locking。 ORA_ROWSCN
可能会使您的环境中的丢失更新不够容易,但这不是实施乐观锁定的最佳方法。