相老師的OCP教程 36-41課 文字版

甲骨論36課圖解剖析一個事務(wù)的操作流程

>selectxid,xudusn,xidslot,xidsgn,ubablk,ubafil from v$transaction; //查詢事務(wù)的XID

事務(wù)表:undo段的第一個數(shù)據(jù)塊放著一個事務(wù)表,每個回滾段最多可放47個事務(wù)表涧尿。

事務(wù)建立之后,先被分配一個XID。然后在undo表空間中找一個undo 段,在undo段的段頭塊的事務(wù)表里寫入自己的信息(XID)凌盯。

回滾塊鸠删、事務(wù)表、事務(wù)槽的概念:

事務(wù)表的分配:事務(wù)表被均勻的分在回滾段中蔚舀,盡量一個事務(wù)表占一個回滾段。

>select header_block,header_file from dba_segments wheresegment_name=’_SYSSMU1$’; //查詢段頭塊的地址

>alter system dump udo header ‘_SYSSMU1$’; //轉(zhuǎn)儲回滾段頭

>alter system dump datafile 5 block 4308;//轉(zhuǎn)儲回滾段數(shù)據(jù)塊

事務(wù)槽包括:xid(即是ID 又是地址)锨络、uba(undoblock address回滾塊赌躺,存回滾信息)

事務(wù)操作流程:

1)? ? ? ? ? ? 在undo表空間找一個相對空閑的段,在回滾段的段頭塊的事務(wù)表中寫入事務(wù)信息(xid ;uba)

2)? ? ? ? ? ? 被分配一個undo塊羡儿,同時將undo塊的地址(uba)寫入事務(wù)表中礼患。

3)? ? ? ? ? ? 在被修改的數(shù)據(jù)塊的事務(wù)槽中寫入事務(wù)信息(xid)。

4)? ? ? ? ? ? 修改數(shù)據(jù)時先將原數(shù)據(jù)寫入undo塊掠归,同時事務(wù)槽的xid批向分配的undo塊缅叠。

xid包括事務(wù)使用:回滾段的段頭塊、事務(wù)表使用的行虏冻、覆蓋次數(shù)肤粱。塊號、行號及第幾次覆蓋可以唯一確定某一行厨相。如果沒有覆蓋次數(shù)將不能唯一與事件對應(yīng)领曼。

5)? ? ? ? ? ? 當(dāng)有新的事務(wù)修改數(shù)據(jù),數(shù)據(jù)的三個鏈接:

l? rollback鏈接:則將兩個undo塊鏈起來(新指向舊)蛮穿,鏈接可以方便回滾庶骄。

l? CR鏈接:xid與uid鏈接,使構(gòu)造CR塊不必訪問段頭的地址(一致性讀)践磅。

l? 提交方式:xid鏈接到事務(wù)表单刁。

甲骨論37課深入剖析事務(wù)槽及Oracle多種提交方式

>selectINI_TRANS,MAX_TRANS from dba_tables where table_name=’T2’ //查詢事務(wù)槽相關(guān)信息

Oracle為減數(shù)據(jù)塊的爭用,盡量對事務(wù)槽的征用分布到多個塊中府适。

dump出事務(wù)槽的方法:

l? >select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid),idfrom t10;//查詢進(jìn)程ID號對應(yīng)的段號和塊號

l? >select ubafil,ubablk,xidusn,xidslot,xidsgn,start_scnb from v$transaction;//從事務(wù)表查看uba的段號及塊號羔飞、段號、槽位號细溅、被覆蓋次數(shù)褥傍。

l? >select * from v$rollname; //查詢段名字

l? >alter system dump undo header ‘_SYSSMU8$’;//dump出段頭

l? >alter system dump datafile 2 block 4308;//dump出2號段頭的4308號的回滾塊

l? >select spid from vsession where sid=(select sid from v$mystat where rownum=1));//查看當(dāng)前會話的進(jìn)程編號

l? 從文件查看事務(wù)槽:

1)? ? ? ? ? ? #cd $ORACLE/admin/數(shù)據(jù)庫名/udump/;ls塊號;

2)? ? ? ? ? ? #vim 此文件,可以看到事務(wù)槽It1事務(wù)槽編號;Xid事務(wù)ID;Uba回滾塊;Flag是否已提交;Lck鎖定標(biāo)記;Scn/Fsc提交時間點喇聊。

事務(wù)操作流程

1)? ? ? ? ? ? 回滾段事務(wù)表里找到一個事務(wù)槽恍风,同時分配一個回滾塊。事務(wù)表寫入xid指向回滾塊。

2)? ? ? ? ? ? 修改塊中的事務(wù)槽指向”回滾段事務(wù)表聽xid”朋贬。

3)? ? ? ? ? ? 修改塊中的uba指向回滾塊凯楔。

4)? ? ? ? ? ? 修改數(shù)據(jù)行,數(shù)據(jù)行頭部指向事務(wù)槽锦募。(被改塊的事務(wù)槽中有事務(wù)提交標(biāo)志摆屯,不必查回滾段的段頭)

5)? ? ? ? ? ? 當(dāng)需要的訪問”行頭指向的事務(wù)槽編號”時,此行有已提交和未提交兩種情況糠亩,根據(jù)已提交標(biāo)志作判斷是否可使用虐骑。(事務(wù)信息既要寫在回滾段段頭又要寫要被修改塊的事務(wù)槽中共**2處的原因**)

1000個塊的提交需要訪問所有的塊,以改變提交方式赎线⊥⒚唬可能有800個塊已由DBwriter寫入磁盤,變成干凈塊被覆蓋垂寥,再訪問時不存在颠黎。因此2處寫事務(wù)信息雖然更新數(shù)據(jù)行高效,但是帶來提交commit需要過多修改事務(wù)信息滞项。

因而需要快速提交技術(shù)狭归。當(dāng)大量塊提交時,只更新回滾段段頭的事務(wù)信息文判,對于被修改塊的事務(wù)信息不更新或少量更新过椎。

當(dāng)修改數(shù)據(jù)塊,從而需要更新事務(wù)信息時律杠,以”回滾段的段頭事務(wù)信息”為準(zhǔn)對”修改塊的事務(wù)信息”更新潭流。

行前加事務(wù)槽編號竞惋,相當(dāng)于對該行數(shù)據(jù)加鎖(行級鎖概念)柜去。對于sqlServer的塊級鎖,Oracle的并發(fā)性更好些拆宛。

不僅增刪改產(chǎn)生redo嗓奢,select查詢也會操作redo。select會清除”行鎖”浑厚。當(dāng)有行鎖股耽,且查得被修改塊的事務(wù)槽未提交,若再去查回滾段的事務(wù)槽已提交钳幅,則更新被修改塊的事務(wù)槽并產(chǎn)生日志物蝙。若回滾段的事務(wù)槽也未提交(說明確實未提交),則根據(jù)鎖找到事務(wù)槽敢艰,根據(jù)事務(wù)槽找到undo塊诬乞。拷貝undo塊到CR塊供查詢,保持?jǐn)?shù)據(jù)一致性震嫉。

如果需要查詢的數(shù)據(jù)塊覆蓋次數(shù)小于當(dāng)前覆蓋次數(shù)森瘪,則直接認(rèn)為已提交。

甲骨論38課IMU及Redo Private Strands技術(shù)

傳統(tǒng)oracle的undo機(jī)制:申請的回滾段的段頭事務(wù)槽不在內(nèi)存時票堵,從磁盤讀入扼睬。當(dāng)構(gòu)造CR塊時,可能需要的回滾塊已經(jīng)被DBwriter寫到磁盤上悴势,再使用時需要從新讀磁盤獲取窗宇。

IMU技術(shù):在shared pool分配個IMU buffer用于保存回滾塊。實現(xiàn)快速構(gòu)造CR塊(從IMU buffer讀回滾塊而非undo表空間)特纤,實現(xiàn)讀一致性担映。

一個事務(wù)分配一個IMUbuffer。IMU buffer中的日志在PrivateRedoAddress中產(chǎn)生叫潦,由LGWriter寫回磁盤蝇完。IMU buffer寫滿時還是會被寫回滾塊UndoBlock中去。IMU由shared pool寫到buffer cache的過程稱為IMU flush矗蕊。

IMU技術(shù)優(yōu)點:事務(wù)獲取undoBlock變快短蜕,CR讀變快。

甲骨論39課讀一致性(Ora-01555)錯誤機(jī)制分析及Undo表空間大小設(shè)置

通過回滾塊構(gòu)造CR塊避免臟讀(一個會話讀到了另一個會話未提交的數(shù)據(jù))傻咖。

讀數(shù)據(jù)過程中表被修改朋魔,以開始讀時的數(shù)據(jù)保持一致性。數(shù)據(jù)被修改時間不一致卿操,則構(gòu)造CR塊讀一致性時間相同的數(shù)據(jù)警检。若select執(zhí)行時間太長、undo表空間壓力很大(inactive被占用)害淤,導(dǎo)致undo表空間被覆蓋扇雕,無法構(gòu)造與”一致性時間”相同的CR塊,報錯snap shot too old(ora-01555 error)窥摄。由于select執(zhí)行時間無法解決镶奉,只能增大undo表空間解決ora-01555錯誤。

圖形界面EM-指導(dǎo)中心-還原管理-崭放,可以根據(jù)”還原保留時間查詢undo表空間大小哨苛。還原保留時間至少要大于最長select語句執(zhí)行時間,閃回則需要保留更長的時間币砂。

甲骨論40課字符集概述

字符集是字符和編碼的對應(yīng)表建峭。

#locale –a;//顯示Linux字符集

cmd:chcp //查看win字符集,中文的活動頁代碼936

字符集使用場合:

l? 存儲:固定長度字符char决摧、可變長度字符varchar2亿蒸、大對象clog使碾、舊版大對象long等數(shù)據(jù)類型

l? 存儲:表名、列名祝懂、PL/SQL變量

l? 存儲PL/SQL程序單元

Oracle安裝有數(shù)據(jù)庫字符集和國家字符集票摇。nchar、nvarchar2砚蓬、nclog數(shù)據(jù)類型使用國家字符集矢门。國家字符集作為數(shù)據(jù)庫字符集的補(bǔ)充,用的較少灰蛙。

常用字符集:

l? US7ASCII英文

l? ZHS16GBK中文

l? UTF8萬國碼

l? AL32UTF8適用于數(shù)據(jù)庫字符集

l? AF16UTF16適用于國家字符集

甲骨論41課字符集正確設(shè)置及相關(guān)操作

Linux+PTserver+RAC結(jié)構(gòu)祟剔。UNIX性能和穩(wěn)定性更好。Oracle從客戶端的NLS_LANG參數(shù)獲得編碼方式摩梧。Oracle將接收數(shù)據(jù)先轉(zhuǎn)碼后存儲物延。轉(zhuǎn)碼時字符集找不到存?出現(xiàn)字符丟失的問題仅父。

NLS_LANG必需設(shè)置為客戶端字符集:

l? win:set NLS_LANG=american_america.zhs16gbk //客戶端設(shè)置語言叛薯、地區(qū)、字符集笙纤。其中語言是提示信息的語言耗溜,地區(qū)影響日期格式、貨幣符號省容,字符集是客戶端編碼

NLS_LANG設(shè)置為與服務(wù)端編碼方式抖拴,是個隱蔽的錯誤。雖然未轉(zhuǎn)碼腥椒,但是存儲和訪問都不會報錯阿宅。錯誤設(shè)置前的存儲顯示出錯,錯誤設(shè)置后的存儲編碼錯誤笼蛛。

dump(列名,1016) //將列名以16進(jìn)制顯示洒放,1008八進(jìn)制,1010十進(jìn)制伐弹。用來查詢存儲的編碼方式拉馋。

字符集錯誤中,存儲錯誤的字符編碼是不可逆的惨好,存儲正確的字符編碼只要改正NLS_LANG即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末随闺,一起剝皮案震驚了整個濱河市日川,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矩乐,老刑警劉巖龄句,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件回论,死亡現(xiàn)場離奇詭異,居然都是意外死亡分歇,警方通過查閱死者的電腦和手機(jī)傀蓉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來职抡,“玉大人葬燎,你說我怎么就攤上這事「克Γ” “怎么了谱净?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長擅威。 經(jīng)常有香客問我壕探,道長,這世上最難降的妖魔是什么郊丛? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任李请,我火速辦了婚禮,結(jié)果婚禮上厉熟,老公的妹妹穿的比我還像新娘捻艳。我一直安慰自己,他們只是感情好庆猫,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布认轨。 她就那樣靜靜地躺著,像睡著了一般月培。 火紅的嫁衣襯著肌膚如雪逗堵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天棕诵,我揣著相機(jī)與錄音蹭秋,去河邊找鬼。 笑死此叠,一個胖子當(dāng)著我的面吹牛纯续,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灭袁,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼猬错,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了茸歧?” 一聲冷哼從身側(cè)響起倦炒,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎软瞎,沒想到半個月后逢唤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拉讯,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年鳖藕,在試婚紗的時候發(fā)現(xiàn)自己被綠了魔慷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡著恩,死狀恐怖院尔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情页滚,我是刑警寧澤召边,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站裹驰,受9級特大地震影響隧熙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幻林,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一贞盯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沪饺,春花似錦躏敢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至遭居,卻和暖如春啼器,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背俱萍。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工端壳, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枪蘑。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓损谦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岳颇。 傳聞我的和親對象是個殘疾皇子照捡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容