热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

undo系列学习之读一致性(ORA-01555错误机制分析)

undo系列学习之读一致性(ORA-01555错误机制分析)oracle在读的过程中,数据是静止的,没有脏读,也就是,未提交的永远都不会被读到。我们可以理解为,oracle在读的开始时,提前为他今后所要读的内容拍了一张照片,...SyntaxHighlighter.all();

undo系列学习之读一致性(ORA-01555错误机制分析)
 
 oracle在读的过程中,数据是静止的,没有脏读,也就是,未提交的永远都不会被读到。我们可以理解为,oracle在读的开始时,提前为他今后所要读的内容拍了一张”照片“,把所有内容全部定格在一个时间点上,作为接下来读的依据。oracle利用scn来实现这个理论,开始查询时,会确定一个select scn,这样就保证了事务槽里所有的scn都小于select scn。好比如,现在是12:21分,那么我之前所敲的字都在12:21分之前做的。
 
    我们已经知道,undo段是循环使用,并且,oracle只会把inactive的事务给覆盖。若是一个长时间的查询需要读到被覆盖的块时,就会报ora-01555错误。借助v$undostat里面的字段ssolderrcnt来查询在每个10分钟,oracle内是否发生过01555错误。
    下面是一张01555错误的图:
 
    产生01555错误,原因有好多,这里列三个:
    1)undo_retention不够大
    2)undo空间压力大
  www.2cto.com  
    3)sql性能差
    下面我们来模拟01555错误。注意,这里要避免和30036错误相混淆。
    会话1:
[sql] 
hr@ORCL> var i refcursor  
hr@ORCL> exec open :i for select * from t;  
PL/SQL procedure successfully completed.  
  
hr@ORCL> print i;  
  
        ID NAME  
---------- ----------  
         1 a  
         2 b  
hr@ORCL> exec open :i for select * from t;  
PL/SQL procedure successfully completed.  
  www.2cto.com  
    会话2:
 
[sql] 
sys@ORCL> delete from hr.t;  
3 rows deleted.  
sys@ORCL> commit;  
  
Commit complete.  
 
    会话1:
[sql] 
hr@ORCL> print i;  
  
        ID NAME  
---------- ----------  
         1 a  
         2 b  
 
    如果有数据,则证明查询是修改前的;如果没有数据,则证明查询是修改后的。但如果,此时undo里面没有数据,那就会报错。从查询输出,可知,查询是修改前的。
  www.2cto.com  
    会话2:
 
[sql] 
sys@ORCL> create undo tablespace undotbs2 datafile '/u01/app/oracle/oradata/ORCL/datafile/undotbsthi.dbf' size 1m autoextend off;  
  
Tablespace created.  
sys@ORCL> alter system set undo_tablespace=undotbs2;  
System altered.  
sys@ORCL> show parameter undo_tablespace  
  
NAME                                 TYPE        VALUE  
------------------------------------ ----------- ------------------------------  
undo_tablespace                      string      UNDOTBS2  
 
    会话1:
[sql] 
hr@ORCL> select * from t;  
    www.2cto.com  
no rows selected  
  
hr@ORCL> insert into t values (1,'a');  
  
1 row created.  
  
hr@ORCL> insert into t values(2,'b');  
  
1 row created.  
  
hr@ORCL> insert into t values(3,'c');  
  
1 row created.  
  
hr@ORCL> select * from t;  
  
        ID NAME  
---------- ----------  
         1 a  
         2 b  
         3 c  
hr@ORCL> commit;  
Commit complete.  
hr@ORCL> exec open :i for select * from t;  
  
PL/SQL procedure successfully completed.  
  www.2cto.com  
    会话2:
 
[sql] 
sys@ORCL> select a.spid "专用服务器进程",b.process "客户进程"  
  from v$process a,v$session b  
  where a.addr=b.paddr  
  and b.sid=(select sid from v$mystat where rownum=1)  2    3    4    
  5  ;  
专用服务器进 客户进程  
------------ ------------  
8427         8425  
  
sys@ORCL> declare  
i number :=0;  
begin  
loop  
update hr.t set id=i;  
i:=i+1;  
if mod(i,200)=0 then commit;  
end if;  
end loop;  
end;   
 
    会话1:
  www.2cto.com  
[sql] 
hr@ORCL> print i;  
ERROR:  
ORA-01555: snapshot too old: rollback segment number 11 with name "_SYSSMU11$" too small  
    会话3:
[sql] 
[root@localhost ~]# kill -9 8427  
    小结:undo够不够,就看01555.
 
 
作者 linwaterbin

推荐阅读
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细探讨了不同SQL数据库管理系统(DBMS)在限制输出结果、拼接字段和日期时间处理方面的函数差异。通过具体示例,帮助读者理解并掌握如何在不同DBMS中实现相同功能。 ... [详细]
  • 本文介绍了如何在 DB2 环境中创建和删除数据库编目。创建编目是连接新数据库的必要步骤,涉及获取数据库连接信息、使用命令行工具进行配置,并验证连接的有效性。删除编目则用于移除不再需要的数据库连接。 ... [详细]
  • CentOS 7 磁盘与文件系统管理指南
    本文详细介绍了磁盘的基本结构、接口类型、分区管理以及文件系统格式化等内容,并提供了实际操作步骤,帮助读者更好地理解和掌握 CentOS 7 中的磁盘与文件系统管理。 ... [详细]
  • 探讨如何通过编程技术实现100个并发连接,解决线程创建顺序问题,并提供高效的并发测试方案。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 创建第一个 MUI 移动应用项目
    本文将详细介绍如何使用 HBuilder 创建并运行一个基于 MUI 框架的移动应用项目。我们将逐步引导您完成项目的搭建、代码编写以及真机调试,帮助您快速入门移动应用开发。 ... [详细]
  • 梦幻西游挖图奇遇:70级项链意外触发晶清诀,3000W轻松到手
    在梦幻西游中,挖图是一项备受欢迎的活动,无论是小宝图还是高级藏宝图,都吸引了大量玩家参与。通常情况下,小宝图的数量保证了稳定的收益,但特技装备的出现往往能带来意想不到的惊喜。本文讲述了一位玩家通过挖图获得70级晶清项链的故事,最终实现了3000W的游戏币逆袭。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
author-avatar
梦幻星之海洋1997_643
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有