搜尋
首頁資料庫mysql教程Oracle读一致性学习笔记

为避免ORA-1555快照太旧的错误,出现了undo_retention参数,表示当事务提交或回滚后,该事务所使用的undo块里的数据需要保留多长

1 回滚与撤销

       Refer:《深入解析Oracle》by eygle

(1)    为了多用户的读一致性和能回退事务,oracle提供了为修改的数据保存修改之前的旧值。

(2)    Redo:保证在故障时事务可以恢复

Undo:保证事务可以被回滚或撤销

(3)    9i之前,oracle提供回滚段(rollback)来撤销数据;之后,oracle使用undo表空间来管理。

(4)    下面这个例子是介绍9i前,是如何保证可以回滚的。

Update emp set sal=4000 where empno=7788;

简单看一下这个语句的执行过程:

A:检查empno=7788记录在database buffer cache中是否存在;否,则读取到database buffer cache中。

B:在回滚表空间的相应回滚段事务表上分配事物槽,这个操作需要记录redo信息。

C:在回滚段读入或者在database buffer cache中创建sal=3000的旧值,这需要产生redo信息并记入redo log buffer。

【B,C这两步保证了事务的可回滚性,此后事务的修改才能进行】

D:修改sal=4000,这是update的数据变更,需要记录redo log buffer。

F:当用户提交时,会在redo log buffer记录提交信息,并在回滚段标记该事务为非激活(inactive)。

(5)    如果用户回滚(rollback)事务,则oracle需要从回滚段中把旧值读取出来,修改database buffer cache,完成rollback,这个过程本身会产生redo,so回滚是expensive。

(6)    回滚段在undo表空间中分配,其作用:回退事务,事务恢复,提供读一致性。

对于DML:

Insert:回滚段只需记录插入的记录的rowid;

Update:回滚段只需记录被更新字段的旧值;

Delete:oracle必须记录整行的数据

所以,对产生undo的情况看,delete产生的undo最多,推荐对大规模数据删除操作时,分批删除,分次提交,以减少对回滚段的占用和冲击。

(7)    oracle区别于其他数据库的一个重要的特征:

通过多版本架构,oracle实现了读取和写入的分离,使得写入不阻塞读取,读取不阻塞写入。

多版本架构是通过一致性读来实现的。

      

  假定scott的薪水为3000:

A:t1时刻我们在session 1 查询可以得到3000;

B:t2时刻session 2进行update,但未提交(此时数据在database buffer cache中已经修改,该buffer为dirty)

C:t3时刻session 1再次查询,注意此时,oracle不会允许其他用户看到未提交的数据,oracle需要通过回滚段记录的旧值进行一致性读,将3000恢复出来给用户,这是一致性读的作用;

D:t4时刻,session 2提交该更改,此时数据修改已被永久化;

F:t5 时刻,其他用户再次查询;将会看到变化后的数据,也就是4000.

       Notice:

              A:每个数据块头部都会记录一个提交的SCN,当数据更改提交后,提交后,提交SCN同时被修改,这个SCN在查询时可以用来进行一致性读的判断。

              B:上图中,假定查询开始的时间为t1,则查询获取的数据块中,如果数据块的提交SCN小于t1,则oracle接收该数据【session 2便是这种情况】;如果提交SCN大于t1或者数据被锁定修改尚未记录提交SCN,则oracle需要通过回滚段构造前镜像来返回结果【session 1便是这种情景】,这就是一致性读的本质含义。

       (8)9i之后,oracle引入了undo表空间,若选择自动的undo表空间管理,,则oracle会动态创建和释放回滚段,自动为事务指定回滚段。

                命令:Show parameter undo

                里面有个参数undo_retention与ORA_01555错误有关。

                这个参数可调:alter system set undo_retention=**;

                Undo_retention:当事务提交后undo信息保留的时间(秒);

                10g对于undo增加了guarantee控制:

                     Alter tablespace undotbs1 retention guarantee | noguarantee

                     区别:

                            若把undo表空间自动扩展属性取消:

                     Alter database datafile ‘/u01/app/oracle/product/10.2.0/oradata/undotbs’

Autoextend off;

                     进行循环删除数据

                     在guarantee设置下,会出现ORA-30036错误;

                     在noguarantee设置下,则可以顺利完成,因为oracle启动自动调整以满足最长运行查询的需要。

       (9) ORA-01555成因与解决

              A:成因:

I)              由于回滚段是循环使用的,当事务提交后,该事务占用的回滚段事务表会被标识为inactive,回滚段表空间可以被覆盖重用。但是,当一个查询需要使用被覆盖的回滚段构造前镜像实现一致性读,那么就会出现著名的ORA-01555错误。

II)           未完待续。。。。。。。。。。

2     大师,你好!
   我在《深入浅出oracle》一书的167页的一句话不清楚,原话是:如果读取的block不满足读一致性需求,则server进程需要通过当前block版本和回滚段构造前镜像返回给用户。‘读一致性’是怎么判断出来的,被修改的数据要作排他锁,别人怎么读取那,盼回复,谢谢!

     根据SCN来判断阿。

3读一致性(Read Consistency),这是数据库的一个关键特性,可以确保用户在查询期间看到一致的数据。也就是说,当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。

linux

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL的許可與其他數據庫系統相比如何?MySQL的許可與其他數據庫系統相比如何?Apr 25, 2025 am 12:26 AM

MySQL使用的是GPL許可證。 1)GPL許可證允許自由使用、修改和分發MySQL,但修改後的分發需遵循GPL。 2)商業許可證可避免公開修改,適合需要保密的商業應用。

您什麼時候選擇InnoDB而不是Myisam,反之亦然?您什麼時候選擇InnoDB而不是Myisam,反之亦然?Apr 25, 2025 am 12:22 AM

選擇InnoDB而不是MyISAM的情況包括:1)需要事務支持,2)高並發環境,3)需要高數據一致性;反之,選擇MyISAM的情況包括:1)主要是讀操作,2)不需要事務支持。 InnoDB適合需要高數據一致性和事務處理的應用,如電商平台,而MyISAM適合讀密集型且無需事務的應用,如博客系統。

在MySQL中解釋外鍵的目的。在MySQL中解釋外鍵的目的。Apr 25, 2025 am 12:17 AM

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

MySQL中有哪些不同類型的索引?MySQL中有哪些不同類型的索引?Apr 25, 2025 am 12:12 AM

MySQL中有四種主要的索引類型:B-Tree索引、哈希索引、全文索引和空間索引。 1.B-Tree索引適用於範圍查詢、排序和分組,適合在employees表的name列上創建。 2.哈希索引適用於等值查詢,適合在MEMORY存儲引擎的hash_table表的id列上創建。 3.全文索引用於文本搜索,適合在articles表的content列上創建。 4.空間索引用於地理空間查詢,適合在locations表的geom列上創建。

您如何在MySQL中創建索引?您如何在MySQL中創建索引?Apr 25, 2025 am 12:06 AM

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

MySQL與Sqlite有何不同?MySQL與Sqlite有何不同?Apr 24, 2025 am 12:12 AM

MySQL和SQLite的主要區別在於設計理念和使用場景:1.MySQL適用於大型應用和企業級解決方案,支持高性能和高並發;2.SQLite適合移動應用和桌面軟件,輕量級且易於嵌入。

MySQL中的索引是什麼?它們如何提高性能?MySQL中的索引是什麼?它們如何提高性能?Apr 24, 2025 am 12:09 AM

MySQL中的索引是數據庫表中一列或多列的有序結構,用於加速數據檢索。 1)索引通過減少掃描數據量提升查詢速度。 2)B-Tree索引利用平衡樹結構,適合範圍查詢和排序。 3)創建索引使用CREATEINDEX語句,如CREATEINDEXidx_customer_idONorders(customer_id)。 4)複合索引可優化多列查詢,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。 5)使用EXPLAIN分析查詢計劃,避

說明如何使用MySQL中的交易來確保數據一致性。說明如何使用MySQL中的交易來確保數據一致性。Apr 24, 2025 am 12:09 AM

在MySQL中使用事務可以確保數據一致性。 1)通過STARTTRANSACTION開始事務,執行SQL操作後用COMMIT提交或ROLLBACK回滾。 2)使用SAVEPOINT可以設置保存點,允許部分回滾。 3)性能優化建議包括縮短事務時間、避免大規模查詢和合理使用隔離級別。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。