久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Oracle Undo的學(xué)習(xí)

 wghbeyond 2012-07-02

Oracle Undo的學(xué)習(xí)

 回滾段可以說(shuō)是用來(lái)保持?jǐn)?shù)據(jù)變化前映象而提供一致讀和保障事務(wù)完整性的一段磁盤(pán)存儲(chǔ)區(qū)域,。當(dāng)一個(gè)事務(wù)開(kāi)始的時(shí)候,,會(huì)首先把變化前的數(shù)據(jù)和變化后的數(shù)據(jù)先寫(xiě)入日志緩沖區(qū),,然后把變化前的數(shù)據(jù)寫(xiě)入回滾段,最后才在數(shù)據(jù)緩沖區(qū)中修改(日志緩沖區(qū)內(nèi)容在滿(mǎn)足一定的條件后可能被寫(xiě)入磁盤(pán),,但在事務(wù)提交的時(shí)候日志必須寫(xiě)入磁盤(pán),,而數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)依賴(lài)于檢查點(diǎn)的發(fā)生和DBWR進(jìn)程的活動(dòng))

    Rollback是一個(gè)代價(jià)昂貴的操作,如果一個(gè)系統(tǒng)的事務(wù)回退率過(guò)高,,應(yīng)該檢查系統(tǒng)是否正?;蛘叱绦蛟O(shè)計(jì)思路是否存在問(wèn)題。查詢(xún)數(shù)據(jù)庫(kù)啟動(dòng)依賴(lài)的

事務(wù)回退率,,如果發(fā)現(xiàn)太高,,一定要引起重視。

--查詢(xún)回退率的sql

SELECT NAME, VALUE
   FROM v$sysstat
WHERE NAME IN ('user commits', 'transaction rollbacks');

     關(guān)于回滾段的數(shù)據(jù),,如果是delete操作,,則回滾段將回記錄整個(gè)行的數(shù)據(jù);如果是update,,則只記錄被修改了的字段的變化前的數(shù)據(jù)(前映像),;如果是insert,則只記錄插入記錄的rowid,。所以,,假如commit,那么回滾段中簡(jiǎn)單標(biāo)記該事務(wù)已經(jīng)提交,;假如rollback,,則操作是 delete的話(huà),把回滾段中的數(shù)據(jù)重新寫(xiě)回?cái)?shù)據(jù)塊,,操作是update的話(huà)則把變化前的數(shù)據(jù)修改回去,,操作是insert的話(huà)則根據(jù)rowid把該記錄刪除。這個(gè)過(guò)程是保障事務(wù)的完整性,,保障數(shù)據(jù)不會(huì)丟失,。

    一致性讀(consisitent reads) Oralce的查詢(xún)集是根據(jù)時(shí)間點(diǎn)來(lái)判定的。Oracle內(nèi)部通過(guò)系統(tǒng)改變號(hào)SC作為相對(duì)時(shí)間點(diǎn)的標(biāo)準(zhǔn),,任何對(duì)數(shù)據(jù)庫(kù)的改變都會(huì)產(chǎn)生SCN,,對(duì)數(shù)據(jù)塊的數(shù)據(jù)改變的時(shí)候會(huì)把該改變所對(duì)應(yīng)的SCN記錄在塊中。假設(shè)查詢(xún)開(kāi)始的時(shí)候SCN為T(mén),,則在查詢(xún)所掃描的數(shù)據(jù)塊中,,如果數(shù)據(jù)塊的COMMIT SCN小魚(yú)T,則查詢(xún)接受該數(shù)據(jù),,如果COMMIT SCN大于T或者說(shuō)還沒(méi)有產(chǎn)生COMMIT SCN,,則查詢(xún)會(huì)嘗試去回滾段中查找數(shù)據(jù)。這保證了數(shù)據(jù)的讀取時(shí)間點(diǎn)的一致性,。

在通過(guò)回滾段中獲取數(shù)據(jù)的時(shí)候,,本質(zhì)上是把數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)塊做一個(gè)拷貝,,然后將回滾段中記錄的內(nèi)容恢復(fù)到該塊中,然后查詢(xún)使用這個(gè)塊來(lái)進(jìn)行讀取,。

系統(tǒng)回滾段和延遲回滾段

SYSTEM回滾段是創(chuàng)建在系統(tǒng)表空間中,,主要用于系統(tǒng)級(jí)的事務(wù)和分配普通事務(wù)于其他回滾段上。當(dāng)手工創(chuàng)建數(shù)據(jù)后需要?jiǎng)?chuàng)建普通回滾段之前必須首先創(chuàng)建系統(tǒng)回滾段,。按oracle文檔說(shuō),,當(dāng)普通事務(wù)異常多的事情可能會(huì)使用系統(tǒng)回滾段的情況。正常情況下,,系統(tǒng)回滾段主要用于兩個(gè)方面:一是系統(tǒng)事務(wù),,不如針對(duì)數(shù)據(jù)字典的操作的truncate table 和 drop table。如果truncate or drop table的過(guò)程中沒(méi)有成果,,則系統(tǒng)會(huì)根據(jù)系統(tǒng)回滾段中的數(shù)據(jù)字典操作信息對(duì)該DDL操作進(jìn)行回退。另一個(gè)方面,,就是延遲回滾段(Deferred Rollback Segment),。延遲回滾段表示,當(dāng)我們使一個(gè)表空間OFFLINE之后,,由于表空間不可用,,這個(gè)時(shí)候若有事務(wù)數(shù)據(jù)位于該空間并執(zhí)行回滾命令,在client看起來(lái)該事務(wù)已經(jīng)回滾,,但對(duì)于數(shù)據(jù)塊來(lái)說(shuō)回滾并沒(méi)有真正完成,,這個(gè)時(shí)候數(shù)據(jù)庫(kù)將該回滾信息寫(xiě)入系統(tǒng)回滾段(這就是延遲回滾段),等表空間重新ONLINE的時(shí)候,,數(shù)據(jù)塊從系統(tǒng)回滾段中將回滾信息寫(xiě)入表空間,。

回退段的設(shè)置和管理

Oracle9i之前需要手動(dòng)設(shè)置回退段,我們需要考慮如下問(wèn)題:

1.系統(tǒng)并發(fā)事務(wù)數(shù)有多少
2.系統(tǒng)是否存在大查詢(xún)或者大事務(wù),,是否頻繁
3.能提供給系統(tǒng)回滾段的表空間的磁盤(pán)空間是多少

 

9i的UNDO TABLESPACE

從9i開(kāi)始,,推薦使用UNDO TABLESPACE,系統(tǒng)自動(dòng)管理回滾段

Sql> show parameter undo
undo_management                       string    AUTO
undo_retention                        integer   900
undo_tablespace                       string    UNDOTBS1

UNDO TABLESPACE變的很大,我們不能縮小,,這個(gè)時(shí)候我們需要考慮創(chuàng)建新的UNDO TABLESPACE,,然后換到新的表空間。這時(shí)即使UNDO表空間有事務(wù)也可以切換,,只不過(guò)不能立即刪除該表空間,,切換之后等到原來(lái)的表空間中所有的事務(wù)出力完畢,并且達(dá)到undo_retention的時(shí)間后,,就可以drop原來(lái)的UNDO表空間,。

SQL> alter system set undo_tablespace = undotbs02;

        System altered.

切換了UNDO表空間后應(yīng)該修改pfile或者spfile,使得下次啟動(dòng)應(yīng)用新的UNDO表空間,。

 

回滾段著名的ORA-01555問(wèn)題

從應(yīng)用角度來(lái)看ORA-01555

1.查詢(xún)執(zhí)行時(shí)間太長(zhǎng),。首先是優(yōu)化查詢(xún),,然后考慮在數(shù)據(jù)塊不繁忙的時(shí)候運(yùn)行,最后考慮加大回滾段,。

2.過(guò)渡頻繁的提交,。把能夠成批提交的單條事務(wù)改成成批提交

3.exp的時(shí)候使用而來(lái)consistent = y. 這個(gè)參數(shù)主要是為了保證在exp的時(shí)候使得所有的到處的表在時(shí)間點(diǎn)上具有一致性,避免存在主外鍵關(guān)系的表由于不同的時(shí)間點(diǎn)的不一致而破壞了數(shù)據(jù)的完整性,。建議該操作在系統(tǒng)空閑的時(shí)候進(jìn)行,。

4.由于回滾段回縮導(dǎo)致回滾段還沒(méi)有循環(huán)使用的情況下就出現(xiàn)了回滾段中找不著數(shù)據(jù)的情況。只能加大回滾段增大optimal設(shè)置,。

 

UNDO scripts

查詢(xún)數(shù)據(jù)塊當(dāng)前某個(gè)session的事務(wù)所使用的回滾段大小

SELECT b.SID, a.xidusn, a.xidusn
   FROM v$transaction a, v$session b
WHERE a.addr = b.taddr

 

回滾段表空間中的一個(gè)數(shù)據(jù)文件丟失或者損害的恢復(fù)方法

…………….


由于對(duì)應(yīng)的undo block/或者undo header slot信息被覆蓋,導(dǎo)致consistent read不能完成, 系統(tǒng)會(huì)報(bào)出ora-01555的錯(cuò)誤信息..

出現(xiàn)這種情況的原因可能有以下幾種.

1. 對(duì)于早期的manual undo, 可能是由于系統(tǒng)設(shè)置了optimal size, rollback segment wrap 導(dǎo)致部分undo信息被丟棄..

2. 由于undo retention 設(shè)置的時(shí)間小于sql執(zhí)行的長(zhǎng)度,這樣從這條sql開(kāi)始時(shí)候其他session產(chǎn)生的部分undo由于retention的原因被覆蓋,導(dǎo)致無(wú)法完成consistent read.

3. 由于commit over fetch loop. 導(dǎo)致transaction slot 被覆蓋,無(wú)法完成consistent read ..


ORA-01555錯(cuò)誤淺析-- http://www./Doc/ORA-01555_analysis(1).htm

總結(jié)出以下方法來(lái)解決1555錯(cuò)誤問(wèn)題:

1,、擴(kuò)大回滾段

因?yàn)榛貪L段是循環(huán)使用的,如果回滾段足夠大,,那么那些被提交的數(shù)據(jù)信息就能保存足夠長(zhǎng)的時(shí)間是那些大事務(wù)完成一致性讀取,。

2、增加undo_retention時(shí)間

undo_retention規(guī)定的時(shí)間內(nèi),,任何其他事務(wù)都不能覆蓋這些數(shù)據(jù),。

3、優(yōu)化相關(guān)查詢(xún)語(yǔ)句,,減少一致性讀,。

減少查詢(xún)語(yǔ)句的一致性讀,就降低讀取不到回滾段數(shù)據(jù)的風(fēng)險(xiǎn),。這一點(diǎn)非常重要,!

4、減少不必要的事務(wù)提交

提交的事務(wù)越少,,產(chǎn)生的回滾段信息就越少,。

5、對(duì)大事務(wù)指定回滾段

通過(guò)以下語(yǔ)句可以指定事務(wù)的回滾段:

SET TRANSACTION USE ROLLBACK SEGMENT rollback_segment,;

給大事務(wù)指定回滾段,,即降低大事務(wù)回滾信息覆蓋其他事務(wù)的回滾信息的幾率,又降低了他自身的回滾信息被覆蓋的幾率,。大事務(wù)的存在,,往往是1555錯(cuò)誤產(chǎn)生的誘因。

6,、使用游標(biāo)時(shí)盡量使用顯式游標(biāo),,并且只在需要的時(shí)候打開(kāi)游標(biāo),同時(shí)將所有可以在游標(biāo)外做的操作從游標(biāo)循環(huán)中拿出,。

當(dāng)游標(biāo)打開(kāi)時(shí),,查詢(xún)就開(kāi)始了,直到游標(biāo)關(guān)閉,。減少游標(biāo)的打開(kāi)時(shí)間,,就減少了1555錯(cuò)誤發(fā)生的幾率,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多