暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

重建undo表空间

原创 virvle 2023-06-15
827

undo表空间扩展很大的需要缩容,或出现undo块部分故障的时候,可以考虑对undo表空间进行重建

1. 查询undo表空间及数据文件

-- 查询undo表空间(2钟方式) select * from v$tablespace where name like '%UNDO%'; select * from dba_tablespaces where contents='UNDO'; -- 一般默认UNDOTBS1 ,ts#为2 SELECT * FROM v$datafile where TS#=<ts#>;-- 按需
复制

2. 查看undo表空间是否在使用中

-- 确认UNDOTBS1上没有活动的事务,若有,则等待 select usn,xacts,status from v$rollstat where xacts != 0; -- 查看正在使用UNDO的段 select * from v$rollname; -- 查看undo表空间当前状态 select tablespace_name,status,sum(bytes)/1024/1024 MB from dba_undo_extents group by tablespace_name,status; -- 查询正在使用undo的段,若有数据,不允许切换undo表空间 select s.username, u.name ,s.SQL_ID,s.MACHINE from v$transaction t,v$rollstat r, v$rollname u,v$session s where s.taddr=t.addr and t.xidusn=r.usn and r.usn=u.usn order by s.username;
复制

3. 若undo在使用,可以通过sql_id查看到执行的语句,进而考虑是否等待完成还是结束会话

-- 正在执行的SQL SELECT to_char(SQL_FULLTEXT) 正在执行的SQL FROM v$process a, v$session b, v$sqlarea c WHERE a.addr = b.paddr AND b.sql_hash_value = c.hash_value and b.STATUS='ACTIVE' and c.SQL_ID='<sql_id>'; -- 替换查找正在使用undo的sql_id
复制

新增临时undo表空间(若嫌麻烦,可以直接用这个,不在转换)

-- 新增 create undo tablespace undotbs3 datafile '/mnt/oradata/UNDOTBS31.dbf' size 512m AUTOEXTEND ON NEXT 512M MAXSIZE 32767M; -- 扩容 alter tablespace undotbs3 add datafile '/mnt/oradata/UNDOTBS32.dbf' size 5120m AUTOEXTEND ON NEXT 512M MAXSIZE 32767M;
复制

确认无使用时候,切换当前表空间(这里,若spfile值为空,会报错)

alter system set undo_tablespace=UNDOTBS3 scope=both; -- 若spfile值为空,使用下面的,后续重启数据库时候的时候,注意检查undo表空间 alter system set undo_tablespace=UNDOTBS3 ;
复制

4. 确认都没有用原先旧的undo后,删除undo表空间

drop tablespace UNDOTBS1 including contents and datafiles;
复制

5.可能会遇到的问题

  1. 若还有未完成的事务,是不允许删除的
SQL> drop tablespace UNDOTBS1 including contents and datafiles; drop tablespace UNDOTBS1 including contents and datafiles * ERROR at line 1: ORA-30013: undo tablespace 'UNDOTBS1' is currently in use
复制

2.在日志文件中也可以看到,且可以看到切换完成输出

Wed Jun 14 17:25:04 2023 drop tablespace UNDOTBS1 including contents and datafiles ORA-30013 signalled during: drop tablespace UNDOTBS1 including contents and datafiles... Wed Jun 14 17:25:34 2023 [8496] Undo Tablespace 2 successfully switched out.
复制

PS:若有需要,重复上面步骤,可与将undo表空间换回是 UNDOTBS1

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 1. 查询undo表空间及数据文件
  • 2. 查看undo表空间是否在使用中
  • 3. 若undo在使用,可以通过sql_id查看到执行的语句,进而考虑是否等待完成还是结束会话
  • 4. 确认都没有用原先旧的undo后,删除undo表空间
  • 5.可能会遇到的问题