UNDO表空间越来越大,产生问题的原因主要以下两点:1. 有较大的事务量曾经让Oracle Undo自动扩展2. 有较大事务长时间没有提交曾经
UNDO表空间越来越大,产生问题的原因主要以下两点:
1. 有较大的事务量曾经让Oracle Undo自动扩展
2. 有较大事务长时间没有提交曾经让Oracle Undo自动扩展
UNDO表空间变大后,把空间回收比较麻烦,Shrink命令经常不成功,但是可以通过切换UNDO表空间的方法,回收磁盘空间
解决步骤:
1. 启动SQLPLUS,并用sys登陆到数据库2. 查找数据库的UNDO表空间名show parameter undoNAME TYPE VALUE
-
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS23. 检查数据库UNDO表空间占用空间情况以及数据文件存放位置select tablespace_name, sum(bytes/1024/1024) “"SIZE(M)“"
from dba_data_files
where tablespace_name = “‘UNDOTBS2“‘group by tablespace_name;
4. 查看回滚段的使用情况,哪个用户正在使用回滚段的资源,一般停掉业务系统,重新启动数据库后操作比较好,,。select s.username, u.namefrom v$transaction t,v$rollstat r, v$rollname u,v$session swhere s.taddr=t.addrand t.xidusn=r.usnand r.usn=u.usnorder by s.username;5. 创建新的UNDO表空间,并设置自动扩展;create undo tablespace undotbs1datafile “‘/oradata/oradata/ddptest/UNDOTBS1.dbf“‘ size 1000m autoextend on next 800m maxsize unlimited;6. 更改spfile配置;alter system set undo_tablespace=undotbs1 scope=both;7. 重新启动数据库, 删除原有的UNDO表空间;drop tablespace undotbs2 including contents;8. 册除原UNDO表空间的数据文件,回收磁盘空间#rm $ORACLE_BASE/oradata/$ORACLE_SID/undotbs02.dbf
- /*系统UNDO表空间的重建*/
- --1. 创建新的UNDO表空间
- CREATE UNDO TABLESPACE "UNDOTEMP"
- DATAFILE '/opt/oracle/product/9.2.0.4/dbs/undo01.ora' SIZE 5 m
- /
- --2. 在OEM控制台修改系统默认的UNDO表空间名, 由UNDOTBS改为UNDOTEMP, 或通过下面的命令修改默认UNDO表空间的标识
- ALTER SYSTEM SET undo_tablespace = undotemp
- /
- --3. 删除原来的系统默认UNDO表空间, 并重建UNDOTBS
- DROP TABLESPACE "UNDO02" INCLUDING CONTENTS AND DATAFILES
- /
- CREATE UNDO TABLESPACE "UNDOTBS"
- DATAFILE '/opt/oracle/product/9.2.0.4/dbs/undo01.dbf' SIZE 200 m
- AUTOEXTEND ON NEXT 4096 k --MAXSIZE 500M
- /
- --4. 在OEM控制台修改系统默认的UNDO表空间名, 由 UNDOTEMP 改为 UNDOTBS, 改回原有的UNDO表空间标识
- ALTER SYSTEM SET undo_tablespace = undotbs
- /
- --5. 删除临时创建的UNDO表空间UNDOTEMP
- DROP TABLESPACE "UNDOTEMP" INCLUDING CONTENTS AND DATAFILES