 |
ORACLE10G新功能ORA_ROWSCN學(xué)習(xí) |
 |
ORACLE會在表中記錄每條記錄的最后的變化的SCN。 默認(rèn)的情況下,每個塊中所有的記錄的ORA_ROWSCN都是相同的,當(dāng)塊中任意一條記錄發(fā)生改變的情況下,塊中所有記錄的ORA_ROWSCN都會變化為最新值,ORA_ROWSCN的最小粒度是塊。 當(dāng)我們使用create table …… rowdependencies;建表的時候,每條記錄會有自己的ORA_ROWSCN段,在這種情況下塊內(nèi)的一條記錄的更改僅僅會影響該記錄的ORA_ROWSCN,不會對塊內(nèi)其他記錄的ORA_ROWSCN產(chǎn)生影響。這個時候,ORA_ROWSCN的最小粒度是記錄。 這個功能比較適合那些需要做增量刷新的操作,通過ORA_ROWSCN來迅速的找到那些發(fā)生變化的塊,忽略那些沒有發(fā)生變化的塊,提高了刷新的效率。 寫到這的時候,不知道大家有沒有想另外的一個問題,那就是ORA_ROWSCN是怎么實(shí)現(xiàn)的,使用ORA_ROWSCN有什么注意的事項(xiàng)么?這是我們大家共同的一個問題,僅僅注意到一個功能積極的部分,很少想這個功能是否適合我,使用這個功能會給系統(tǒng)帶來什么樣子的風(fēng)險,而往往風(fēng)險才是我們需要更多考慮的地方。在數(shù)據(jù)庫方面有一句話還是比較實(shí)在的,“無過便是功”。與系統(tǒng)的優(yōu)化相比,系統(tǒng)的穩(wěn)定則更加重要一些。 還是回到ORA_ROWSCN上來吧。 當(dāng)我們沒有開啟rowdependencies的時候,塊內(nèi)的所有記錄的ORA_ROWSCN都是一樣的,可以猜想oracle會直接讀取block head來獲得ORA_ROWSCN,因?yàn)檫@樣做的話效率會高一些,也更加的方便直接。事實(shí)上,oracle也是這樣做的。所以在這種情況下,對于DML操作來說,并沒有增加任何的開銷,block head的scn是肯定要記錄的。因此,在默認(rèn)情況下,使用ORA_ROWSCN并不會帶來任何的影響的。 那當(dāng)我們開啟了rowdependencies呢?這個時候塊中的每條記錄都會有自己的ORA_ROWSCN了,那肯定是在塊中完整的記錄下每條記錄的scn號。這樣就帶了兩個需要考慮的問題,空間上會存在浪費(fèi),這部分空間用來記錄每條記錄的scn。當(dāng)記錄的字段比較多,記錄的長度比較長的時候可能影響的百分比會小一些,可是對于那些字段比較少的,記錄的長度比較短的表影響將會是巨大的,空間的占用完全有可能增大100%以上。對時間上的浪費(fèi)也很好理解,在表上的DML操作會更新一個字段,時間的浪費(fèi)也就是必然的了。 上面的分析僅僅是抽象的,還需要一些測試數(shù)據(jù)的支持。有時間話,我會做一個測試,看看到底會對空間和時間有多大的影響。 在論壇上經(jīng)常會有朋友問,深入的學(xué)習(xí)oracle到底有沒有用?這句問題怎么回答呢,還是那句話,在時間允許的情況下深入學(xué)習(xí)oracle的肯定是有好處的;在時間不允許的情況下,就要“適度”了,這個度到底是怎么劃分呢。拿上面的例子來說吧,如果能知道ORA_ROWSCN的產(chǎn)生原理就應(yīng)該是足夠了,這樣經(jīng)過簡單的分析就可以知道ORA_ROWSCN的優(yōu)點(diǎn)和缺點(diǎn)。 就寫到這吧。
|
作者:未知 | 文章來源:未知 | 更新時間:2008-1-15 16:39:41
|
|
 |
 |
最新文章 |
|
|
 |