国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

用Oracle 10g新的行時間戳捕捉變化

2024-08-29 13:35:45
字體:
來源:轉載
供稿:網友
數據倉庫經常通過多種數據源系統填充,而每種系統都運行有自己的應用程序。所以為了能給數據倉庫只提供新數據,確定哪些是最近更新的行是一件非常復雜的事。在處理一些其架構中不包括“上次更新時間”列的過時軟件時,這尤其是一個難題。 企業自然不情愿僅僅為了追蹤變化而通過修改工作代碼來添加列。 在Oracle 10g中,在行最后一次被更新的時候,每一行都有一個新的被稱作ORA_ROWSCN的偽列。 ORA_ROWSCN 提供了一個“保守上邊界(conservative upper bound)”系統改變數,用來記錄最近被修改的行的事務。這就意味著系統改變數(SCN)是一個估計值,因為在Oracle中系統改變數只能默認在模塊級被追蹤。 例如在列表A中,ORA_ROWSCN 在處理一個小表格時被選中,一行被更新后,ORA_ROWSCN 再次被選中。
列表ASQL> SQL> SELECT ora_rowscn, ename, sal 2 FROM emp;ORA_ROWSCN ENAME SAL ---------- ---------- ---------- 529426 SMITH 800 529426 ALLEN 1600 529426 WARD 1250 529426 JONES 2975 529426 MARTIN 1250 529426 BLAKE 2850 529426 CLARK 2450 529426 SCOTT 3000 529426 KING 5000 529426 TURNER 1500 529426 ADAMS 1100 ORA_ROWSCN ENAME SAL ---------- ---------- ---------- 529426 JAMES 950 529426 FORD 3000 529426 MILLER 1300 14 rows selected.SQL> UPDATE emp 2 SETsal = 6000 3 WHERE ename = 'KING';1 row updated.SQL> commit;Commit complete.SQL> SELECT ora_rowscn, ename, sal 2 FROM emp;ORA_ROWSCN ENAME SAL ---------- ---------- ---------- 653331 SMITH 800 653331 ALLEN 1600 653331 WARD 1250 653331 JONES 2975 653331 MARTIN 1250
653331 BLAKE 2850 653331 CLARK 2450 653331 SCOTT 3000 653331 KING 6000 653331 TURNER 1500 653331 ADAMS 1100 ORA_ROWSCN ENAME SAL ---------- ---------- ---------- 653331 JAMES 950 653331 FORD 3000 653331 MILLER 1300 14 rows selected.SQL> SELECT SCN_TO_TIMESTAMP(653331) FROM dual;SCN_TO_TIMESTAMP(653331) --------------------------------------------------------------------------- 20-JUN-06 11.03.59.000000000 PM
即使只有一行被改動了,剩下的也會顯示一個新的系統改變數(SCN)。(更準確地說,你可以在一個表第一次被創建時,使用行級系統改變數追蹤。但遺憾的是,你不能夠更改該表格,以便在以后加入該特性。)所以假如被更新的塊數比表中的塊數要少,這也可以成為一種發現變化的方法,而不用涉及太多額外的行。 假如你需要與事務有關的日期和時間應該怎么辦呢?SCN_TO_TIMESTAMP函數可以將ORA_ROWSCN 轉換成為一個時間戳,利用它你可以進行查詢,或者把它用作一個WHERE 子句的謂語。但是,這個時間戳仍然是一個估計值。 ORA_ROWSCN 也是將系統改變值(SCN)用作閃回查詢捷徑(盡管RA_ROWSCN 本身在閃回中并不能被選中)的一種很方便的方法,不然就要用閃回形式查詢,選中VERSIONS_STARTSCN 和VERSIONS_ENDSCN 偽列。 列表B是一次閃回查詢,它用一個小于當前值的系統改變值來獲得一個數據行原來的值。我們發現King的工資回到了5000,而ORA_ROWSCN的值則是最初的系統改變值。
列表BSQL> SELECT ora_rowscn, ename, sal 2 FROMemp AS OF SCN (653330) 3 WHERE ename = 'KING';ORA_ROWSCN ENAME SAL ---------- ---------- ---------- 529426 KING 5000


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 屯留县| 河津市| 佛冈县| 福清市| 宁乡县| 板桥市| 略阳县| 黔西县| 汤原县| 綦江县| 定日县| 体育| 湟源县| 天镇县| 黑水县| 西丰县| 辽宁省| 遂溪县| 南安市| 海淀区| 清苑县| 黑山县| 雅江县| 龙陵县| 邯郸市| 新安县| 始兴县| 合山市| 宁津县| 徐闻县| 永新县| 上林县| 十堰市| 汤原县| 荥经县| 资兴市| 武隆县| 安宁市| 绥阳县| 黄梅县| 瑞昌市|