数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle回滚段空间回收步骤


发布日期:2021年03月17日
 
Oracle回滚段空间回收步骤

是谁偷偷的用了那么多空间呢(本来有几十个G的Free磁盘空间的)?

检查数据库表空间占用空间情况:

SQL> select tablespace_namesum(bytes)/// GB

from dba_data_files group by tablespace_name

union all

select tablespace_namesum(bytes)/// GB

from dba_temp_files group by tablespace_name order by GB;

TABLESPACE_NAME GB

USERS

UNDOTBS

SYSTEM

SYSAUX

WAPCM_TS_VISIT_DETAIL

HY_DS_DEFAULT

MINT_TS_DEFAULT

MMS_TS_DATA

MMS_IDX_SJH

MMS_TS_DEFAULT

IVRCN_TS_DATA

TABLESPACE_NAME GB

MMS_TS_DATA

CM_TS_DEFAULT

TEMP

UNDOTBS

rows selected

不幸的发现UNDO表空间已经扩展至G而TEMP表空间也扩展至G个表空间加起来占用了G的磁盘空间导致了空间不足

显然曾经有大事务占用了大量的UNDO表空间和Temp表空间Oracle的AUM(Auto Undo Management)从出生以来就经常出现只扩展不收缩(shrink)的情况(通常我们可以设置足够的UNDO表空间大小然后取消其自动扩展属性)

现在我们可以采用如下步骤回收UNDO空间:

确认文件

SQL> select file_namebytes// from dba_data_files

where tablespace_name like UNDOTBS;

FILE_NAME

BYTES//

+ORADG/danaly/datafile/undotbs

检查UNDO Segment状态

SQL> select usnxactsrssize///hwmsize///shrinks

from v$rollstat order by rssize;

USN XACTS RSSIZE/// HWMSIZE/// SHRINKS

rows selected

创建新的UNDO表空间

SQL> create undo tablespace undotbs;

Tablespace created

切换UNDO表空间为新的UNDO表空间

SQL> alter system set undo_tablespace=undotbs scope=both;

System altered

此处使用spfile需要注意以前曾经记录过这样一个案例:Oracle诊断案例Spfile案例一则

等待原UNDO表空间所有UNDO SEGMENT OFFLINE

SQL> select usnxactsstatusrssize///hwmsize///shrinks

from v$rollstat order by rssize;

USN XACTS STATUS RSSIZE/// HWMSIZE/// SHRINKS

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

USN XACTS STATUS RSSIZE/// HWMSIZE/// SHRINKS

PENDING OFFLINE

rows selected

再看:

:: SQL> /

USN XACTS STATUS RSSIZE/// HWMSIZE/// SHRINKS

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

ONLINE

rows selected

Elapsed: ::

删除原UNDO表空间

:: SQL> drop tablespace undotbs including contents;

Tablespace dropped

Elapsed: ::

检查空间情况

由于我使用的ASM管理可以使用gR提供的信工具asmcmd来察看空间占用情况

[oracle@danaly ~]$ export ORACLE_SID=+ASM

[oracle@danaly ~]$ asmcmd

ASMCMD> du

Used_MB Mirror_used_MB

ASMCMD> exit

空间已经释放

               

上一篇:ORACLE临时表空间的清理

下一篇:Oracle PL/SQL语言入门