2016-12-28 130 views
0

我試圖使用以下查詢來獲取表中所有記錄的最後更新日期和時間。帶時間戳記的最後更新記錄

SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN),id FROM TABLE_NAME 

對於有些表的顯示結果正確,但對於其他人我得到了以下錯誤消息(具體我使用的是從這些自動生成的HR模式表)

ORA- 08181:指定數目不是有效的系統改變號

ORA-06512:在 「SYS.SCN_TO_TIMESTAMP」,第1行

  • 00000 - 「指定的數量不一個有效的系統更改號碼「
  • *原因:提供的scn超出了有效scn的範圍。 *操作:使用有效的scn。

    爲什麼我收到此錯誤消息?在運行查詢之前,我爲同一個表運行了幾個插入和更新查詢。

    謝謝

    +0

    此外,最好有一個額外的列來跟蹤數據的變化。 ORA_ROWSCN是非常不可行的,不適用於舊數據(例如您的情況)。 – GurV

    回答

    1

    Oracle 10g和9i中有一個限制,只能在5天后閃回。在Oracle 11g中沒有限制。

    您可以檢查數據庫中最舊的可用系統更改號碼(SCN)號碼。

    使用此查詢

    select min(SCN) min_scn from sys.smon_scn_time; 
    

    從上面的查詢使用SCN號,你可以得到的最後一個時間戳,SCN

    SELECT SCN_TO_TIMESTAMP(scn number here) FROM dual; 
    

    如果檢查舊的SCN比最低SCN那麼你會得到錯誤。

    來源link

    +0

    '從sys.smon_scn_time選擇min(SCN)min_scn;'給我「ORA-00942:表或視圖不存在」。這與Oracle 11g上的SQL Developer有關。 – mivk

    1

    SCN(去年DML操作的系統改變號)中產生,並通過了Oracle爲有限的時間內記住。您正在將舊的scn轉換爲時間戳並引發錯誤。

    ORA_ROWSCN有兩種行爲。如果tabe使用"NOROWDEPENDENCIES"(默認值)創建。 ORA_ROWSCN返回oracle數據塊的scn編號。

    如果tabe使用"ROWDEPENDENCIES"創建。 ORA_ROWSCN返回行的scn編號。