- 相關(guān)推薦
怎么用Oracle10g新的行時(shí)間戳捕捉變化
數(shù)據(jù)倉(cāng)庫(kù)經(jīng)常通過多種數(shù)據(jù)源系統(tǒng)填充,而每種系統(tǒng)都運(yùn)行有自己的應(yīng)用程序。所以為了能給數(shù)據(jù)倉(cāng)庫(kù)只提供新數(shù)據(jù),確定哪些是最近更新的行是一件非常復(fù)雜的事。在處理一些其架構(gòu)中不包括“上次更新時(shí)間”列的過時(shí)軟件時(shí),這尤其是一個(gè)難題。企業(yè)自然不情愿僅僅為了追蹤變化而通過修改工作代碼來添加列。
在Oracle 10g中,在行最后一次被更新的時(shí)候,每一行都有一個(gè)新的被稱作ORA_ROWSCN的偽列。 ORA_ROWSCN 提供了一個(gè)“保守上邊界(conservative upper bound)”系統(tǒng)改變數(shù),用來記錄最近被修改的行的事務(wù)。這就意味著系統(tǒng)改變數(shù)(SCN)是一個(gè)估計(jì)值,因?yàn)樵贠racle中系統(tǒng)改變數(shù)只能默認(rèn)在模塊級(jí)被追蹤。
例如在列表A中,ORA_ROWSCN 在處理一個(gè)小表格時(shí)被選中,一行被更新后,ORA_ROWSCN 再次被選中。
|
即使只有一行被改動(dòng)了,剩下的也會(huì)顯示一個(gè)新的系統(tǒng)改變數(shù)(SCN)。(更準(zhǔn)確地說,你可以在一個(gè)表第一次被創(chuàng)建時(shí),使用行級(jí)系統(tǒng)改變數(shù)追蹤。但遺憾的是,你不能夠更改該表格,以便在以后加入該特性。)所以如果被更新的塊數(shù)比表中的塊數(shù)要少,這也可以成為一種發(fā)現(xiàn)變化的方法,而不用涉及太多額外的行。
如果你需要與事務(wù)有關(guān)的日期和時(shí)間應(yīng)該怎么辦呢?SCN_TO_TIMESTAMP函數(shù)可以將ORA_ROWSCN 轉(zhuǎn)換成為一個(gè)時(shí)間戳,利用它你可以進(jìn)行查詢,或者把它用作一個(gè)WHERE 子句的謂語(yǔ)。但是,這個(gè)時(shí)間戳仍然是一個(gè)估計(jì)值。
ORA_ROWSCN 也是將系統(tǒng)改變值(SCN)用作閃回查詢捷徑(盡管RA_ROWSCN 本身在閃回中并不能被選中)的一種很方便的方法,不然就要用閃回形式查詢,選中VERSIONS_STARTSCN 和VERSIONS_ENDSCN 偽列。
列表B是一次閃回查詢,它用一個(gè)小于當(dāng)前值的系統(tǒng)改變值來獲得一個(gè)數(shù)據(jù)行原來的值。我們發(fā)現(xiàn)King的工資回到了5000,而ORA_ROWSCN的值則是最初的系統(tǒng)改變值。
|
【怎么用Oracle10g新的行時(shí)間戳捕捉變化】相關(guān)文章:
CAD的對(duì)象捕捉選項(xiàng)怎么設(shè)置10-16
CAD對(duì)象捕捉不到點(diǎn)怎么處理10-19
PHP獲取今天開始和結(jié)束的時(shí)間戳08-31
redhatlinux下安裝oracle10g的教程09-30
新SAT文章題型的重大變化10-03
眉筆怎么用08-06
面膜怎么用09-12