ORA-0155 表空间的添加、修改、删除

来源:这里教程网 时间:2026-03-03 16:10:41 作者:

今天遇到ORA-01555 快照过旧出现ORA-01555错误,通常有2种情况:            (1)SQL语句执行时间太长,或者UNDO表空间过小,或者事务量过大,或者过于频繁的提交,导致执行SQL过程中进行一致性读时,SQL执行后修改的前镜像(即UNDO数据)在UNDO表空间中已经被覆盖,不能构造一致性读块(CR blocks)。  这种情况最多。            (2)SQL语句执行过程中,访问到的块,在进行延迟块清除时,不能确定该块的事务提交时间与SQL执行开始时间的先后次序。 这种情况很少。 解决方法:第1种情况解决的办法:(1)增加UNDO表空间大小 ALTER TABLESPACE UNDO1 ADD DATAFILE      '/oradata/******/UNDO02.dbf' size 50M(2)增加undo_retention 时间,默认只有15分钟ALTER SYSTEM SET undo_retention=10800 SCOPE=BOTH; (3)优化出错的SQL,减少查询的时间,首选方法(4)避免频繁的提交 具体做法:1 查询数据文件位置 select * from dba_data_files 2 扩展undo表空间 ALTER TABLESPACE UNDO1 ADD DATAFILE      '/oradata/******/UNDO02.dbf' size 50M 3 查询UNDO表空间GUARANTEE功能(查询结果NOGUARANTEE) select tablespace_name,block_size,extent_management , segment_space_management,contents,retention  from dba_tablespaces; 4 启用UNDO表空间的GUARANTEE功能 sql> alter tablespace UNDO1 retention guarantee;设置完后,在查询第3步进行验证 5 调整与UNDO表空间相关的参数sql>show parameter undo; NAME               TYPE                 VALUE ------------------ -------------------- ------------- undo_management    string               AUTO undo_retention     integer              900 undo_tablespace    string               UNDOTBS1 sql> alter system set undo_retention=10800 SCOPE=BOTH;

ORACLE推荐我们将表空间中的datafile 设定MAXSIZE ,不要让它一直自动扩展,如果ORACLE获得了自动扩展的能力,不好控制

1 查看有哪些数据文件是自增长的select FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE,STATUS,MAXBYTES,USER_BYTES from dba_data_files; 2 设置表空间关闭自动增长alter database datafile '/oradata/test/JIA_DATA.dbf' autoextend off; 3 创建新的表空间--自动增长,无限大 create tablespace TRASDATA datafile '/oradata/zhibao2/TRASDATA.dbf' size 200m autoextend on next 100m maxsize unlimited ; --非自动增长,200m create tablespace TRASDATA datafile '/oradata/zhibao2/TRASDATA.dbf' size 200m ; 4 添加数据文件ALTER TABLESPACE JIA_DATA ADD DATAFILE '/oradata/test/JIA_DATA01.dbf' size 10m autoextend off; 其实不写autoextend off默认也是非自动增长  

相关推荐