Oracle undo表空间爆满的处理方法

  1. Oracle undo表空间爆满的处理方法  
  2.   
  3. Oracle undo表空间爆满的解决步骤:  
  4.   
  5. 1. 启动SQLPLUS,并用sys登陆到数据库。  
  6. #su - oracle    
  7. $>sqlplus / as sysdba   
  8.   
  9. 2. 查找数据库的UNDO表空间名,确定当前例程正在使用的UNDO表空间:  
  10. Show parameter undo_tablespace。  
  11.   
  12. 3. 确认UNDO表空间;  
  13. SQL> select name from v$tablespace;    
  14. NAME    
  15. ------------------------------    
  16. UNDOTBS1   
  17.   
  18. 4. 检查数据库UNDO表空间占用空间情况以及数据文件存放位置;  
  19. SQL>select file_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'UNDOTBS%';  
  20.   
  21. 5. 查看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间(特别是生产环境)。  
  22. SQL> select s.username, u.name from v$transaction t,v$rollstat r, v$rollname u,v$session s    
  23. where s.taddr=t.addr and t.xidusn=r.usn and r.usn=u.usn order by s.username;   
  24.   
  25. 6. 检查UNDO Segment状态;  
  26. SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks  
  27. from v$rollstat order by rssize;  
  28. USN  XACTS  RSSIZE/1024/1024/1024  HWMSIZE/1024/1024/1024  SHRINKS  
  29. 1    0    0     0.000358582             0.000358582               0  
  30. 2    14   0     0.796791077             0.796791077               735  
  31. 3    44   1     0.00920867919921875     3.99295806884766          996  
  32. 这还原表空间中还存在3个回滚的对象。  
  33.   
  34. 7. 创建新的UNDO表空间,并设置自动扩展参数;  
  35. SQL> create undo tablespace undotbs2 datafile '/opt/oracle/oradata/ge01/UNDOTBS2.dbf' size 100m reuse autoextend on next 50m maxsize 5000m;   
  36. Tablespace created.  
  37.   
  38. 8. 切换UNDO表空间为新的UNDO表空间 , 动态更改spfile配置文件;  
  39. SQL> alter system set undo_tablespace=undotbs2 scope=both;    
  40. System altered.   
  41.   
  42. 9.验证当前数据库的 UNDO表空间   
  43. SQL> show parameter undo  
  44. NAME                                 TYPE        VALUE  
  45. ------------------------------------ ----------- --------------  
  46. undo_management                      string      AUTO  
  47. undo_retention                       integer     900  
  48. undo_tablespace                      string      UNDOTBS2  
  49. 9. 等待原UNDO表空间所有UNDO SEGMENT OFFLINE;  
  50. select usn,xacts,status,rssize/1024/1024,hwmsize/1024/1024, shrinks from v$rollstat order by rssize;   
  51. select t.segment_name,t.tablespace_name,t.segment_id,t.status from dba_rollback_segs t;  
  52.       SEGMENT_NAME      TABLESPACE_NAME SEGMENT_ID   STATUS  
  53. 1     SYSTEM             SYSTEM          0           ONLINE  
  54. 2     _SYSSMU1$          UNDOTBS1        1           OFFLINE  
  55. 3     _SYSSMU2$          UNDOTBS1        2           OFFLINE  
  56. 4     _SYSSMU47$         UNDOTBS1        47          OFFLINE  
  57. 上面对应的UNDOTBS1还原表空间所对应的回滚段均为OFFLINE  
  58.    
  59. 10.到$ORACLE_HOME/dbs/init$ORACLE_SID.ora如下内容是否发生变更:  
  60. #cat $ORACLE_HOME/dbs/initddptest.ora  
  61. ……  
  62. *.undo_management=’AUTO’  
  63. *.undo_retention=10800  
  64. *.undo_tablespace=’UNDOTBS2’  
  65. ……  
  66. 如果没有发生变更请执行如下语句:  
  67. SQL> create pfile from spfile;  
  68. File created.  
  69.   
  70. 11. 删除原有的UNDO表空间;  
  71. SQL> drop tablespace undotbs1 including contents;  
  72.   
  73. 最后需要在重启数据库或者重启计算机后到存储数据文件的路径下删除数据文件(为什么要手动删除呢:以上步骤只是删除了ORACLE中undo表空间的逻辑关系,即删除了数据文件在数据字典中的关联,不会自动删除项关联的数据文件)。  
  74.    
  75. drop tablespace undotbs1 including contents and datafiles; 

转自:http://www.linuxidc.com/Linux/2012-08/69275.htm

你可能感兴趣的:(undo,爆满)