【问题标题】:What's the created Date-time for Table row in Oracle?Oracle 中表行的创建日期时间是多少?
【发布时间】:2011-09-28 03:10:40
【问题描述】:

昨天我的朋友 -BI 专家 - 向我解释了一个预言机问题:
有一个包含大量数据的 oracle 数据库,但它们不会为每个存储每行创建的日期时间的表创建列。
那么在这种情况下 他如何获得每一行的 Created datetime (timestamp) ?

【问题讨论】:

  • 您的意思是在现有数据库中包含大量现有数据吗?是否启用了任何类型的审核?

标签: database oracle timestamp


【解决方案1】:

每一行都有自己的系统更改编号 (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,以便我们知道时间戳属于哪些行。
猜你喜欢
  • 1970-01-01
  • 2022-06-28
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 2015-01-05
  • 2016-08-02
  • 1970-01-01
相关资源
最近更新 更多