Oracle UNDOTBS表空间的查看与扩容
1.查看UNDO表空间使用情况
select tablespace_name,
round(sum(decode(status, 'ACTIVE', bytes, 'UNEXPIRED', bytes, 0)) * 100 /
sum(bytes),
2) || '%' "used %"
from DBA_UNDO_EXTENTS
group by tablespace_name
order by 1;
V$ROLLSTAT
只有在 automatic undo management mode 模式下有效,包含回滚段的一些行为。
V$UNDOSTAT
这个视图只在 automatic undo management mode 模式下才有意义。包含监控和调试 UNDO 表空间的信息,通过这个视图可以估计现有数据库所需的 UNDO 表空间的大小。
2.查看回滚段信息
select rownum,sys.dba_rollback_segs.segment_name Name,v$rollstat.extents Extents,
v$rollstat.rssize Size_in_Bytes,v$rollstat.xacts XActs,
v$rollstat.gets Gets,v$rollstat.waits Waits,v$rollstat.writes Writes,sys.dba_rollback_segs.status status
from v$rollstat,sys.dba_rollback_segs,v$rollname
where v$rollname.name(+) = sys.dba_rollback_segs.segment_name and v$rollstat.usn(+) = v$rollname.usn
order by rownum;
3.查看表空间数据文件所在位置
select file_name,tablespace_name from dba_data_files where tablespace_name = 'UNDOTBS1';
检查数据库的undo表空间是否自动扩展
select FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE,STATUS,MAXBYTES,USER_BYTES from dba_data_files where tablespace_name like '%UNDO%';
4.修改UNDO表空间数据文件大小
alter database datafile '/oradata/datafile/UNDOTBS01.DBF' resize 300M;
alter database datafile '/oradata/datafile/UNDOTBS01.DBF' AUTOEXTEND ON NEXT 100M MAXSIZE 1000M;
5.UNDO表空间添加数据文件
SQL> alter tablespace UNDOTBS1 add datafile '/oradata/datafile/undotbs1_02.dbf' size 32000M;
Tablespace altered.
如果是自动扩展改成
SQL> alter tablespace UNDOTBS1 add datafile '/oradata/datafile/undotbs1_02.dbf' SIZE 5000M AUTOEXTEND ON NEXT 1000M MAXSIZE 32000M;
6.也可以考虑切换UNDO表空间
方法一
新建undo表空间,switch到新表空间,在把旧的undo表空间删除,具体操作如下:(不关闭数据库的情况下)
create tablespace new_name datafile 'D:\APP\ORADATA\ORCL\EXAMPLE01.DBF' size 2G;
alter system set undo_tablespace=new_name;
等待旧的undo表空间事物全部结束后执行:
alter database datafile 'D:\APP\SUNMI\ORADATA\ORCL\UNDOTBS01.DBF' offline;
alter database datafile 'D:\APP\SUNMI\ORADATA\ORCL\UNDOTBS01.DBF' offline drop ;
方法二
把数据库先mount起来,在把undo表空间删除,重新建立,在打开数据库就可以了(关闭数据库的情况)
7.undo_retention设置以及优化(默认900秒)
针对自动拓展的undo表空间设置undo_retention是有效的,在undo_retention的范围内,undo表空间中的数据将尽量不被重新覆盖,仅仅是尽量,不是完全。但是打开了自动拓展之后,有可能在undo_retention时间段内扩展到很大,造成隐患。
针对没有开自动拓展的undo表空间,设置了undo_retention之后,在oracle 10g之后会忽略掉该设置,而是根据undo表空间的大小和使用率来自动调整undo信息的保留时间。
ALTER SYSTEM SET undo_retention=10800 SCOPE=BOTH;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了