重现ORA-01555错误

简介: 非常经典的一个一致性快照过旧的错误,Oracle面试必读。

实验步骤如下:
create undo tablespace undotbs2 datafile '/u01/app/oracle/oradata/ocp/undotbs2.dbf' size 10M;
alter system set undo_tablespace=undotbs2;
alter system set undo_retention=2 scope=both;

第1步、session1: 目标是让b表报快照过旧的报错
conn gyj/gyj
create table a (id int,cc varchar2(10));
insert into a values(1,'hello');
commit;
create table b(id int,cc varchar2(10));
insert into b values(10,'AAAAAA');
commit;
select * from a;
select * from b;
var x refcursor;
exec open :x for select * from b;

第2步、session2:修改b表,字段cc前镜像"OK"保存在UDNO段中
update b set cc='BBBBBB' where id= 10;
commit;

第3步、session 3:该条语句就是刷新缓存
conn / as sysdba
SQL> alter session set events = 'immediate trace name flush_cache'; --9i提供强制刷缓存
(alter system flush buffer_cache;--10g提供的一种刷缓存方法)

第4步、 session2: 在A表上行大的事务,多运行几次以确保,回滚段被覆盖
begin
for i in 1..20000 loop
update a set cc='HELLOWWWW';
commit;
end loop;
end;
/

第5步、session 1:在B表上执行查询(第一步的查询)
SQL> print :x
ERROR:
ORA-01555: snapshot too old: rollback segment number 21 with name "_SYSSMU21$" too small

相关文章
|
SQL 监控 Oracle
ORA-600(2662)错误的重现和解决(一)
前两天同事在测试DATA GUARD的时候将主库的ONLINE日志意外覆盖,造成数据库无法打开,采用隐含参数的方法打开又碰到ORA-600错误,最后采用设置EVENTS的方式解决。
1325 0
|
SQL 监控 Oracle
ORA-600(2662)错误的重现和解决(二)
前两天同事在测试DATA GUARD的时候将主库的ONLINE日志意外覆盖,造成数据库无法打开,采用隐含参数的方法打开又碰到ORA-600错误,最后采用设置EVENTS的方式解决。
1360 0
|
SQL Oracle 关系型数据库
如何解决ORA-00845错误
今天刚刚安装了一个oracle 11gr2的数据库,第一次启动时报 ORA-00845错误。oracle@r05a11016.yh.com:/home/oracle>sqlplus "/as sysdba"SQL*Plus: Release 11.
757 0
|
SQL Oracle 关系型数据库
如何解决Ora-04031错误(转)
  诊断并解决ORA-04031 错误   当我们在共享池中试图分配大片的连续内存失败的时候,Oracle首先清除池中当前没使用的所有对象,使空闲内存块合并。如果仍然没有足够大单个的大块内存满足请求,就会产生ORA-04031 错误。
1996 0
ORA-01537 错误及解决方法
Problem Description-------------------You have offline dropped a datafile then try to recreate the datafile (ALTER DATABASE ADD DAT...
2586 0
|
SQL 索引 数据库
关于ORA-01555的问题分析
今天开发的同事发给我一个问题,在运行某一个Job的时候抛出了ORA错误,希望我们看看从数据库层面能不能发现什么。 错误日志如下: Function: EntitySQLCursor::query Line number: 113 ...
1099 0

热门文章

最新文章