【发布时间】:2011-09-28 03:10:40
【问题描述】:
昨天我的朋友 -BI 专家 - 向我解释了一个预言机问题:
有一个包含大量数据的 oracle 数据库,但它们不会为每个存储每行创建的日期时间的表创建列。
那么在这种情况下 他如何获得每一行的 Created datetime (timestamp) ?
【问题讨论】:
-
您的意思是在现有数据库中包含大量现有数据吗?是否启用了任何类型的审核?
昨天我的朋友 -BI 专家 - 向我解释了一个预言机问题:
有一个包含大量数据的 oracle 数据库,但它们不会为每个存储每行创建的日期时间的表创建列。
那么在这种情况下 他如何获得每一行的 Created datetime (timestamp) ?
【问题讨论】:
每一行都有自己的系统更改编号 (SCN)。这准确地识别了数据库中的一个时刻。
首先找出 SCN 并基于它使用 SCN_TO_TIMESTAMP 来获取时间戳:
SELECT
SCN_TO_TIMESTAMP(ora_rowscn),
MyTable.*
FROM
MyTable
【讨论】:
SCN_TO_TIMESTAMP() 可能不适用于旧数据(但是,ORA_ROWSCN 始终可用)。
ora_rowscn 记录在块级别(NOROWDEPENDENCIES 是默认的 CREATE TABLE 选项)。参见例如asktom.oracle.com/pls/apex/…
supplied scn was beyond the bounds of a valid scn。可能是数据太多或者没有scn的旧记录造成的?无论如何,尝试在单行上运行它 - 最新的。
SELECT SCN_TO_TIMESTAMP(ora_rowscn), MyTable.* FROM MyTable,以便我们知道时间戳属于哪些行。