--创建undo表空间时固定表空间的大小

sys@TDB112>create
undo tablespace undo_small


datafile'/u01/app/oracle/oradata/TDB112/undo_small.dbf'

3  size
2m


autoextend off;

--切换表空间为定义的小的undo表空间

sys@TDB112>alter
system set undo_tablespace=undo_small;

--创建测试表,并且要求数据是随机产生的

sys@TDB112>create
table t

2  as


select * from all_objects


order by dbms_random.random;

--创建一个主键约束,目的是创建一个索引:

sys@TDB112>alter
table t add constraint t_pk primary key(object_id);

--收集表的统计信息,目的是让优化器使用索引:

sys@TDB112>exec
dbms_stats.gather_table_stats( user, 'T', cascade=> true );

--大量更新操作

sys@TDB112>begin

2  for
x in ( select rowid rid from t )

3  loop


update t set object_name = lower(object_name) where rowid = x.rid;


commit;

6  end
loop;

7  end;

8  /

--

在运行这个修改的同时,我们在另一个会话中运行一个查询。这个查询要读表T,并处理每个记录。

获取下一个记录之前处理每个记录所花的时间大约为1/100
秒(使用DBMS_LOCK.SLEEP(0.01)来模拟)。在

查询中使用了FIRST_ROWS
提示,使之使用前面创建的索引,从而通过索引(按OBJECT_ID 排序)来读出表

中的行。由于数据是随机地插入到表中的,我们可能会相当随机地查询表中的块。这个查询只运行几秒就

会失败:

sys@TDB112>declare


cursor c is


select /*+ first_rows */ object_name

4  from
t


order by object_id;


l_object_name t.object_name%type;


l_rowcnt number := 0;


begin

9  open
c;

10  loop

11 
fetch c into l_object_name;

12  exit
when c%notfound;

13 
dbms_lock.sleep( 0.1 );

14 
l_rowcnt := l_rowcnt+1;

15  end
loop;

16 
close c;

17 
exception

18  when
others then

19 
dbms_output.put_line( 'rows fetched = ' || l_rowcnt );

20 
raise;

21  end;

22  /

declare

*

ERROR at line 1:

ORA-01555: snapshot
too old: rollback segment number 14 with name "_SYSSMU14_2266994445$"
too small

ORA-06512: at line
20

报错分析:

1、undo表空间太小;

2、因为在更新是一行一行按照原来插入数据的顺序地更新的,减少了对每个指定行更新前的查找记录的时间;相反,对于上面的查询来说,

因为不是按照原来插入数据的顺序查找数据的,而是按照自己object_id排好序的顺序查找数据的。所以下面的查询语句必定比上面的更

新语句执行的慢,所需要的时间也比较的长。这样就有可能发生这样的情况:当查询语句需要查一行数据时,但是该行数据已经被更新语

句在很久以前就已经被更新修改过并且已经提交掉,因为UNDO表空间很小,又由于更新采用的是循环更新操作,使得UNDO表空间被循环利用,

在循环中后面的更新语句所产生的UNDO数据会覆盖掉之前产生的UNDO数据,造成此时查询语句查找不到在查找开始的时间点上该行记录的

数据,则会报ORA-01555。

-----------------------------------------------------------------------------------------------------

对上面出现的问题进行解决需要做两件事情:

1、对UNDO_RETENTION参数需要设置的大点,设置为允许读数据进程全部完成所需要的最长时间;

2、在调大UNDO_RETENTION参数值同时,需要将undo_tablespace的大小也需要设置的大点;

如果是自动管理UNDO表空间,则设置为自动增长;

如果是手动管理UNDO表空间则分配更多的磁盘空间给UNDO表空间

对于上面的例子:

1)对于上面的查询需要的时间小于900s,执行时间大概为780s,通过

sys@TDB112>show
parameter undo_retention

NAME                                 TYPE        VALUE

------------------------------------
----------- ------------------------------

undo_retention                       integer     900

查询UNDO_RETENTION原来的值为900s,UNDO_RETENTION参数值是足够的,所以先不需要修改;

2)由于原来的UNDO表空间为2M,是不可以自动增长的,所以设置UNDO表空间为自动增长,以1M的速度增长,并且最大设置为2G;

sys@TDB112>select
file_name

2  from
dba_data_files


where tablespace_name='UNDO_SMALL';

FILE_NAME

-----------------------------------------------

/u01/app/oracle/oradata/TDB112/undo_small.dbf

sys@TDB112>alter database datafile
'/u01/app/oracle/oradata/TDB112/undo_small.dbf' autoextend on next 1m maxsize
2048m;

做了上面的修改操作之后,下面来重新同时执行上面的更新语句和查询语句,就不会有ORA-01555错误产生;

11g官方文档叙述:

ORA-01555: snapshot too old: rollback segment number string with name "string" too small

Cause: rollback records
needed by a reader for consistent read are overwritten by other writers

Action: If in Automatic Undo
Management mode, increase undo_retention setting. Otherwise, use larger
rollback segments

ORA-01555经典错误的更多相关文章

  1. iOS开发——项目实战总结&经典错误一

    经典错误一 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7, VA 运行报错 出现的原因:armv7s ...

  2. C#socket通讯两个最经典错误解决方案

    1.经典错误之 无法访问已释放的对象. 对象名:“System.Net.Sockets.Socket”     (1).问题现场   (2).问题叙述 程序中的某个地方调用到了socket.close ...

  3. iOS----------常见经典错误

    最近使用cocoapods集成友盟  发现几个经典错误 1.clang: error: linker command failed with exit code 1 (use -v to see in ...

  4. 10 个 MySQL 经典错误【转】

    Top 1:Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行) 问题还原 mysql> show variables like '%max_connec ...

  5. 四十八:数据库之alembic常用命令和经典错误的解决办法

    常用命令:1.init:创建一个alembic仓库2.reversion:创建一个新的版本3.--autogenerate:自动将当前模型的修改,生成迁移脚本4.-m:message,可以记录本次迁移 ...

  6. Python编程的10个经典错误及解决办法

    接触了很多Python爱好者,有初学者,亦有转行人.不论大家学习Python的目的是什么,总之,学习Python前期写出来的代码不报错就是极好的.下面,严小样儿为大家罗列出Python3十大经典错误及 ...

  7. 抛弃 .NET 经典错误:object null reference , 使用安全扩展方法? 希望对大家有帮助---Bitter.Frame 引用类型的安全转换

    还是一样,我不喜欢长篇大论,除非关乎我设计思想领域的文章.大家过来看,都是想节省时间,能用白话表达的内容,绝不长篇大论.能直接上核心代码的,绝不上混淆代码. 长期从事 .NET 工作的人都知道..NE ...

  8. MySQL数据库“十宗罪”【十大经典错误案例】

    原文作者:张甦 来源:http://blog.51cto.com/sumongodb 今天就给大家列举 MySQL 数据库中,最经典的十大错误案例,并附有处理问题的解决思路和方法,希望能给刚入行,或数 ...

  9. javascript入门经典(第五版)-清华出版社之“经典”错误

    学校教材太烂,于是自己买书. 果然是入门经典,开篇就把我惊着了~ 第九页≯1.4/ch1_example2.html / <script> //script block 2 documen ...

  10. 这十个MySQL经典错误

    今天就给大家列举 MySQL 数据库中,最经典的十大错误案例,并附有处理问题的解决思路和方法,希望能给刚入行,或数据库爱好者一些帮助,今后再遇到任何报错,我们都可以很淡定地去处理.学习任何一门技术的同 ...

随机推荐

  1. 畅通工程续 (dijkstra)

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  2. 开始学习MFC

    <<对0基础MFC者的一点建议>>---------------------摘自某论坛lint2008的回复,不管对错,先看看.     因为上半年自己刚刚学了点MFC,算是对 ...

  3. CSS文字垂直居中和font-family属性

    1.单行文字的垂直居中 单行文字垂直居中比较简单,直接让行高==盒子高度即可. 2.多行文字居中 多行文字居中,只需简单计算一下盒子的上padding即可.计算公式:padding-top=(盒子的高 ...

  4. javascript 基础系列(一)

    闭包: function 内部访问外部的variables function f(){ alert(ysr); } 报错了. Certain language constructs block the ...

  5. Python+Selenuim测试网站,只能打开Firefox浏览器却不能打开网页的解决方法

    最开始我使用的Selenium版本为2.48,Firefox版本为37,自动化打开网站的时候,可以正常打开. 后来由于Firefox的自检测更新,版本更新为47,导致版本不兼容,自动化打开网站浏览器时 ...

  6. FastCgi与Cgi

      转载请注明出处:http://www.cnblogs.com/stonehat/p/6286966.html  他们之间的不同在于   FastCgi的进程是常驻的,监听一个socket, 无线循 ...

  7. (简单) HDU 2612 Find a way,BFS。

    Description Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Nin ...

  8. IT技术网站汇总

    首先是比较著名的博客型的网站!一般来说在国外比较著名的博客基本上都是比较有影响力发起的或者建立的经常发布一些比较有思考力深入分析的文章! 博客媒体网站 1.www.ArsTechnica.com 2. ...

  9. STM32F412应用开发笔记之八:迪文串口屏显示驱动

    迪文的显示屏使用起来比较方便,其使用串口通讯,即可支持RS232,又可以支持TTL电平.在NUCLEO-F412ZG实验板上,USART2已经引到了CN9上,我们就利用USART2来实现与迪文串口屏的 ...

  10. 【转】C\C++代码优化的27个建议

    1. 记住阿姆达尔定律: funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数. 所以,如果你优化了函数TriangleIntersect执行40%的运行时间, ...