li
  当前位置:主页 > 性能优化 > 文章内容
li
oracle ORA-01555错误完全解析之二
来源: www.ixdba.net  作者: IXDBA.NET官方    时间:2008-03-28   阅读:17  
本文章共9169字,分6页,当前第1页,快速翻页:
 

紧接上篇:http://www.ixdba.net/article/35/1458.html

1555错误发生的情况

下面我们就模拟一下1555错误发生的情况。

测试环境

首先建立测试环境。由于我们只是要模拟1555错误的发生,所以需要建立一个小的回滚表空间,并且设置undo_retention时间为1(秒),以便回滚数据尽快被覆盖(呵呵,要防止1555错误发生,这就一定要避免的)。

 

CREATE UNDO TABLESPACE rbs_ts

                                                                                                DATAFILE 'rbs_ts2.dbf' SIZE 10M AUTOEXTEND OFF;
 
alter system set undo_retention=1 scope=spfile;
 
alter system set undo_management=auto scope=spfile;
 
alter system set undo_tablespace=rbs_ts scope=spfile;
 
startup force
 
alter tablespace rbs_ts online;
 
create table demo.t_dual as select * from dual;

www.ixdba.net


 
insert into t_dual values(1);
 
commit;
 

 

一致性读导致的1555错误

开始读取表。

SQL>
SQL> var cl refcursor
SQL> begin
  2  open :cl for select * from demo.t_multiver;
  3  end;
  4  /
 
PL/SQL procedure successfully completed.
 
SQL>

 

更新表数据,产生回滚信息。

SQL> update demo.t_multiver set b = 111 where a = 1;
 
1 row updated.
 
SQL> commit;
 
Commit complete.
 

 

运行大批其他事务,充满所有回滚段,以致覆盖上面的回滚信息。回滚段可以通过dba_rollback_segs查看。

SQL> begin
  2    for i in 1..20000 loop
  3      update demo.t_dual set dummy=1;
  4      commit;
  5    end loop;
  6  end;
  7
  8  /
 
PL/SQL procedure successfully completed.
 
SQL> /
 
PL/SQL procedure successfully completed.
 

 

查询到更新过的数据记录,回滚信息已经被覆盖,所以报1555错误。

SQL> print :cl
ERROR:
ORA-01555: snapshot too old: rollback segment number 18 with name "_SYSSMU18$"
too small
 
 
 
no rows selected
 
SQL>

延迟块清除导致的1555错误

开始读取表。

SQL> var cc refcursor
SQL>
SQL> begin
  2  open :cc for select * from t_multiver;
  3  end;
  4  /
 

 

这时一个事务更新了该数据块,但在提交前,我们手工将buffer cache中的数据做了flush,再做提交。这时的数据块上只记录了锁标志,没有事务标志和Commit SCN

PL/SQL procedure successfully completed.
 
SQL>
SQL> update t_multiver set b=115 where a=1;
 
1 row updated.
 
SQL>
SQL> alter system flush buffer_cache; 					  


阅读更多内容1 · 2 · 3 · 4 · 5 · 6 · 下一页>>


  上一篇: 根据statspack来获取生成环境中t...   下一篇: oracle 高级复制中ORA-25207错误...
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·根据statspack来获取生成环境中t...
·oracle创建逻辑standby数据库
·oracle ORA-01555错误完全解析
·高级复制下如何强制删除废弃复制...
·Oracle数据库中高级复制的功能介...
·高级复制下如何强制删除复制组
·Oracle9i与Oracle10g之间的高级复...
·oracle高级复制需要注意的几点问...
·ORACLE的高级复制实现内外网数据...
·物化视图高级复制中ORA-23313错误...
·oracle 高级复制中ORA-25207错误...
·高级复制的整体规划策略
·如何将高级复制队列表移出系统(S...
·Oracle中的Hash Join详解
·oracle中各种sql语句的多种写法
·ORA-600 [qmxiUnpPacked2]错误的...
·ORA-01599与max_rollback_segmen...
·ORA-01650:unable to extend rol...
·ORA-01652:unable to extend tem...
·ORA-01578:Oracle data block co...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接