數據倉庫經常通過多種數據源系統填充,而每種系統都運行有自己的應用程序。所以爲了能給數據倉庫只提供新數據,確定哪些是最近更新的行是一件非常複雜的事。在處理一些其架構中不包括“上次更新時間”列的過時軟件時,這尤其是一個難題。企業自然不情願僅僅爲了追蹤變化而通過修改工作代碼來添加列。
在Oracle 10g中,在行最後一次被更新的時候,每一行都有一個新的被稱作ORA_ROWSCN的僞列。 ORA_ROWSCN 提供了一個“保守上邊界(conservative upper bound)”系統改變數,用來記錄最近被修改的行的事務。這就意味着系統改變數(SCN)是一個估計值,因爲在Oracle中系統改變數只能默認在模塊級被追蹤。
例如在列表A中,ORA_ROWSCN 在處理一個小表格時被選中,一行被更新後,ORA_ROWSCN 再次被選中。
|
即使只有一行被改動了,剩下的也會顯示一個新的.系統改變數(SCN)。(更準確地說,你可以在一個表第一次被創建時,使用行級系統改變數追蹤。但遺憾的是,你不能夠更改該表格,以便在以後加入該特性。)所以如果被更新的塊數比表中的塊數要少,這也可以成爲一種發現變化的方法,而不用涉及太多額外的行。
如果你需要與事務有關的日期和時間應該怎麼辦呢?SCN_TO_TIMESTAMP函數可以將ORA_ROWSCN 轉換成爲一個時間戳,利用它你可以進行查詢,或者把它用作一個WHERE 子句的謂語。但是,這個時間戳仍然是一個估計值。
ORA_ROWSCN 也是將系統改變值(SCN)用作閃回查詢捷徑(儘管RA_ROWSCN 本身在閃回中並不能被選中)的一種很方便的方法,不然就要用閃回形式查詢,選中VERSIONS_STARTSCN 和VERSIONS_ENDSCN 僞列。
列表B是一次閃回查詢,它用一個小於當前值的系統改變值來獲得一個數據行原來的值。我們發現King的工資回到了5000,而ORA_ROWSCN的值則是最初的系統改變值。
|