Oracle事務(wù) 行級鎖 保存點(diǎn) 回滾 提交 |
發(fā)布時(shí)間: 2012/9/5 17:36:02 |
Oracle事務(wù) 一般事務(wù)(DML)即數(shù)據(jù)修改(增、刪、改)的事務(wù) 舉個(gè)例子:- 當(dāng)A操作一條數(shù)據(jù)N1后,暫未提交事務(wù) ,此時(shí)B又上來操作同一條數(shù)據(jù)N1,這時(shí)的情況是: 由上可以看出,對同一條數(shù)據(jù)的事務(wù)處理,必須按先后順序進(jìn)行。 這里注意一點(diǎn),這里所說有A與B并不是指二個(gè)Oracle帳戶,而是二個(gè)連接會(huì)話。上面只是為了方便舉例。 在PS/SQL中,對數(shù)據(jù)修改完后,如果用戶未提交事務(wù),但關(guān)閉或斷開了PS/SQL,此時(shí)Oracle會(huì)立即提交此會(huì)話的事務(wù)。 我們可以事務(wù)中使用保存點(diǎn)來回滾到指定的時(shí)間節(jié)點(diǎn)上來,但如果用提交事務(wù)(commit)后,所有保存點(diǎn)將被刪除。 舉個(gè)舉子: savepoint a1; --設(shè)置一個(gè)保存點(diǎn) a1; update tmp set username='張三' where userid='101' --修改一條數(shù)據(jù) savepoint a2; --設(shè)置一個(gè)保存點(diǎn) a1; update tmp set username='李四' where userid='102 --再修改一條數(shù)據(jù)
rollback to a2; --回滾到a2 保存點(diǎn)。 此時(shí)在 a2 保存點(diǎn)之后的所有數(shù)據(jù)修改視為無效。 rollback to a1; --這里可以再從a2保存點(diǎn)再回滾到a1 保存點(diǎn)。 此時(shí)在 a1 保存點(diǎn)之后的所有數(shù)據(jù)修改視為無效。 rollback; --回滾全部。即撤消至上一次提交事務(wù)后的所有數(shù)據(jù)修改。 commit; --提交事務(wù) 將回滾后的事務(wù)提交,并會(huì)刪除所有保存點(diǎn)。 注意:我們可以從a2向前再回滾到a1 ,但無法從a1回滾到a2。也就是只能向前回滾,不能從前面的點(diǎn)再向后回滾! 只讀事務(wù) 即,只用于select 查詢的事務(wù) 只讀事務(wù)主要用于在某一個(gè)時(shí)間點(diǎn)對數(shù)據(jù)的查詢統(tǒng)計(jì)。如:在18:00創(chuàng)建一個(gè)只讀事務(wù),然后可以開始統(tǒng)計(jì)某張表的記錄數(shù)。此時(shí)18:00之后新添加到這張表中的數(shù)據(jù)就不會(huì)進(jìn)入到統(tǒng)計(jì)中去。也就是創(chuàng)建只讀事務(wù)的會(huì)話連接人,將無法看到在創(chuàng)建只讀事務(wù)之后其它任何人對數(shù)據(jù)的真實(shí)修改。 方法是: set transaction read only; --在此之后,擁有此會(huì)話的連接人將無法看到其它人對數(shù)據(jù)的任何改動(dòng)。用戶可以用select 進(jìn)行此時(shí)間點(diǎn)的統(tǒng)計(jì)查詢 set transaction read write; --取消只讀事務(wù) 只讀事務(wù)沒有回滾和提交的功能也不記錄回滾LOG。 只讀事務(wù)最大的用處是保證在某個(gè)時(shí)間點(diǎn)查詢結(jié)果的一致性。換句話說,如果你要統(tǒng)計(jì)很多信息,有多個(gè)select查詢時(shí),但你執(zhí)行完第一個(gè)查詢后(如用戶信息統(tǒng)計(jì)),可能其它人進(jìn)來修改了某些數(shù)據(jù)你正在查詢的數(shù)據(jù)。這時(shí)你再進(jìn)行第二個(gè)查詢(如用戶信息的統(tǒng)計(jì)或其它有關(guān)用戶信息的查詢)。這時(shí)候?qū)⒊霈F(xiàn)數(shù)據(jù)查詢結(jié)果的不一致,第二次查詢的結(jié)果會(huì)由于數(shù)據(jù)被修改了而與第一次查詢結(jié)果一不樣。只讀事務(wù)正是解決這類問題的辦法。 其實(shí)Oracle為了優(yōu)化查詢在對于單條查詢時(shí)也會(huì)啟動(dòng)只讀事務(wù)(就是在你開始執(zhí)行查詢時(shí)會(huì)有一個(gè)只讀事務(wù)點(diǎn),到查詢結(jié)束前,在這期間的數(shù)據(jù)修改都被無視掉),你無須手動(dòng)創(chuàng)建只讀事務(wù)。但多條查詢時(shí)我們就必須手動(dòng)創(chuàng)建只讀事務(wù)。 本文出自:億恩科技【www.allwellnessguide.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |