亚洲综合社区欧美综合色-欧美逼逼一区二区三区-国产老熟女高潮精品网站-国产日韩最新视频在线看

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

Oracle 10g 讀書筆記之 redo 與 undo

發(fā)布時間:  2012/8/29 17:12:07

redo(重做信息)是 Oracle 在在線(或歸檔)重做日志文件中記錄的信息,用于重做事務;undo(撤銷)是 oracle 在 undo 段中記錄的信息,用于取消或回滾事務。

undo 操作數(shù)據(jù)庫只是邏輯的恢復到原來的樣子,但數(shù)據(jù)結構以及數(shù)據(jù)塊本身在回滾后可以大不相同。這樣做的原因是同時可能會有多個并發(fā)的事務。

盡管 undo 信息存儲在 undo 表空間或 undo 段中,但也會受到 redo 的保護。換句話說,會把 undo 數(shù)據(jù)當成是表數(shù)據(jù)或索引數(shù)據(jù)一樣,對 undo 的修改會生成一些 redo 并記入日志。
-
 

Oracle 的事務提交是一個非?斓牟僮,不論事務有多大,COMMIT 的響應時間都差不多。因為在提交之前已經(jīng)完成了99.9%工作,例如已經(jīng)發(fā)生了如下操作:

a、已經(jīng)在 SGA 中生成了 undo 塊
b、已經(jīng)在 SGA 中生成了已修改的數(shù)據(jù)塊
c、已經(jīng)在 SGA 中生成了對應前兩項的緩存 redo
d、取決于前三項的大小,以及這些工作花費的時間,前面的某些數(shù)據(jù)可能已經(jīng)刷新輸出到磁盤
e、已經(jīng)得到了所需的全部鎖
執(zhí)行 COMMIT 時,余下的工作只是
a、為事務生成一個 SCN。它是 Oracle 使用的一種簡單的計時機制,用于保證事務的順序,并支持失敗恢復。它還用于保證數(shù)據(jù)庫中的讀一致性和檢查點。
b、LGWR 將所有余下的緩存重做日志條目寫至磁盤,并把 SCN 記錄到在線重做日志文件中。這一小是真正的 COMMIT。之后事務條目為從 V$TRANSACTION 中“刪除”。
c、V$LOCK 中記錄著我們的會話持有鎖,這些鎖都將被釋放,而排隊等待這些鎖的每一個人都會被喚醒,可以繼續(xù)完成他們的工作。
d、如果事務修改的某些塊還在緩沖區(qū)中,則會清除存儲在數(shù)據(jù)庫塊首部與鎖相關的信息。

相反 ROLLBACK 時要做以下工作:
a、撤銷已做的所有修改。從 undo 段讀回數(shù)據(jù),然后實際上逆向執(zhí)行前面所做的操作,并將 undo 條目標記為已用。
b、會話持有的所有鎖都將釋放,如果有人在排隊等待我們持有的鎖,就會被喚醒。

減少重做日志的生成:
a、在 SQL 中設置 NOLOGGING。這并不是說這個對象的所有操作在執(zhí)行時都不生成重做日志,只是說有些特定的操作生成的 redo 會比平常少得多。
b、在索引上設置 NOLOGGING。在段(索引或表)上設置 NOLOGGING 屬性,從而隱式的采用 NOLOGGING 模式來執(zhí)行操作。
c、可以采用 NOLOGGING 模式執(zhí)行以下操作:
1、索引的創(chuàng)建和 ALTER。例如 create index t_idx on t(name) nologging ,alter index t_idx nologging,alter index t_idx rebuild
2、表的批量 INSERT 。表數(shù)據(jù)不生成 redo,但是所有的索引修改會生成 redo。
3、LOB 操作(對大對象的更新不必生成日志)。
4、通過 CREATE TABLE AS SELECT 創(chuàng)建表。
5、各種 ALTER TABLE 操作,如 MOVE 和 SPLIT。

塊清除:即刪除所修改數(shù)據(jù)庫塊上與“鎖定”有關的信息。后面提到 ORA-01555:snapshot too old 會用到這個概念。
數(shù)據(jù)鎖實際上是數(shù)據(jù)的屬性,存儲在塊首部。下次訪問這個塊時,就要將這些事務信息刪除,這個動作會生成 redo,并導致塊變臟,也就是說 SELECT 可能也會生成 redo 并將塊刷新至磁盤。
如果塊在還在緩沖區(qū)中,那么 COMMIT 時會清除,這樣后面的 SELECT 就不必再清理了。只有塊的 UPDATE 才會真正清除殘余的事務信息,由于 UPDATE 時已經(jīng)生成 redo,所以注意不到清除工作。

臨時表不會為它們的塊生成 redo,但會生成 undo,而且這個 undo 為記入日志。
INSERT 會生成很少甚至不生成 undo/redo 活動。因為生成的 undo 很少,Oracle 只需要記錄要刪除的 rowid。
DELETE 在臨時表上生成的 redo 與在正常表上生成的 redo 同樣多,因它的 undo 很大,需要把整行的前映像記錄到 undo 段中。
臨時表的 UPDATE 會生成正常表一半的 redo,對于臨時表來說不必保存“后映像”(redo)。

SQL> show parameter undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO //自動 undo 管理
undo_retention                       integer     900 // undo 保留的時間
undo_tablespace                      string      UNDOTBS1 // undo 存儲表空間


 


本文出自:億恩科技【1tcdy.com】

服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      1
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線