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

windows2008下一个C盘数据库磁盘空间快不足了

原创 jieguo 2024-04-25
235

windows2008下一个C盘数据库磁盘空间快不足了:
image.png
并且alert日志也提示了磁盘空间不足。
image.png

这是一个老库,库不大,业务小,所以基本没怎么关注。好在是虚机环境,处理灵活。

处理思路:

1.清理C盘的无用文件:

比如日志之类。推荐用TreeSize free工具,只管找到占用大的垃圾文件做清理。
能删的删了清理完,也就腾出2G空间,太少了。

2.直接扩容C盘:

发现磁盘灰色,无法扩容(关机后还是灰色,比较奇怪)–暂时先不考虑了
image.png

3.缩小数据库文件:

发现SYSAUX表空间占用最大,约20G,所以考虑清理awr数据,尝试收缩文件。
由于数据文件本身就一个,而且是默认自动增长,所以高水位基本就在文件末端。
对象位置都处在末端,对象太多,放弃考虑。

统计信息保留时间调整为7天:
SQL> exec dbms_stats.alter_stats_history_retention(7);

PL/SQL 过程已成功完成。

SQL>  select dbms_stats.get_stats_history_retention from dual;

GET_STATS_HISTORY_RETENTION
---------------------------
                          7--默认是31

清理awr表数据:
SQL> col segment_name format a30
SQL> col owner format a10
SQL> col tablespace_name format a10
SQL> col segment_type format a15
SQL> select * from(select segment_name,owner,tablespace_name,bytes/1024/1024 "SIZE(MB)",segment_type from dba_segments where tablespace_name='SYSAUX' order by bytes desc) a where rownum<10;

SEGMENT_NAME                   OWNER      TABLESPACE   SIZE(MB) SEGMENT_TYPE
------------------------------ ---------- ---------- ---------- ---------------
WRH$_ACTIVE_SESSION_HISTORY    SYS        SYSAUX           5925 TABLE PARTITION
WRH$_SQLSTAT                   SYS        SYSAUX            993 TABLE PARTITION
WRH$_LATCH                     SYS        SYSAUX            949 TABLE PARTITION
WRH$_EVENT_HISTOGRAM_PK        SYS        SYSAUX            882 INDEX PARTITION
WRH$_EVENT_HISTOGRAM           SYS        SYSAUX            848 TABLE PARTITION
WRH$_SEG_STAT                  SYS        SYSAUX            720 TABLE PARTITION
WRH$_ACTIVE_SESSION_HISTORY_PK SYS        SYSAUX            640 INDEX PARTITION
WRH$_SYSSTAT_PK                SYS        SYSAUX            640 INDEX PARTITION
WRH$_LATCH_MISSES_SUMMARY      SYS        SYSAUX            612 TABLE PARTITION

已选择9行。

SQL> truncate table WRH$_ACTIVE_SESSION_HISTORY;

表被截断。

SQL> truncate table WRH$_LATCH;

表被截断。

SQL> truncate table WRH$_SQLSTAT;

表被截断。

SQL> truncate table WRH$_SEG_STAT;

表被截断。

SQL> truncate table WRH$_EVENT_HISTOGRAM;

表被截断。

找处在文件末端高水位的对象:
SQL> select file#,name from v$datafile;

     FILE#
----------
NAME
--------------------------------------------------------------------------------
         1
C:\ORACLE\ORADATA\KHGL\SYSTEM01.DBF

         2
C:\ORACLE\ORADATA\KHGL\SYSAUX01.DBF
         3
C:\ORACLE\ORADATA\KHGL\UNDOTBS01.DBF


     FILE#
----------
NAME
--------------------------------------------------------------------------------
         4
C:\ORACLE\ORADATA\KHGL\USERS01.DBF

SQL> select max(block_id) from dba_extents where file_id=2;

MAX(BLOCK_ID)
-------------
      2530304

SQL>  select 2530304*8/1024/1024 from dual;

2530304*8/1024/1024
-------------------
         19.3046875

SQL>  select * from (select extent_id,file_id,block_id,blocks,segment_name,segment_type,owner from dba_extents where tablespace_name='SYSAUX' order by block_id desc) where rownum<10;

 EXTENT_ID    FILE_ID   BLOCK_ID     BLOCKS SEGMENT_NAME
---------- ---------- ---------- ---------- ------------------------------
SEGMENT_TYPE    OWNER
--------------- ----------
       152          2    2530304       1024 WRH$_SYSSTAT
TABLE PARTITION SYS

        89          2    2525184       1024 WRH$_SERVICE_WAIT_CLASS_PK
INDEX PARTITION SYS

       156          2    2524160       1024 WRH$_SYSSTAT_PK
INDEX PARTITION SYS


 EXTENT_ID    FILE_ID   BLOCK_ID     BLOCKS SEGMENT_NAME
---------- ---------- ---------- ---------- ------------------------------
SEGMENT_TYPE    OWNER
--------------- ----------
       150          2    2513920       1024 WRH$_LATCH_MISSES_SUMMARY
TABLE PARTITION SYS

       130          2    2511872       1024 WRH$_PARAMETER
TABLE PARTITION SYS

        33          2    2511744        128 WRH$_TABLESPACE_STAT
TABLE PARTITION SYS


 EXTENT_ID    FILE_ID   BLOCK_ID     BLOCKS SEGMENT_NAME
---------- ---------- ---------- ---------- ------------------------------
SEGMENT_TYPE    OWNER
--------------- ----------
       145          2    2510720       1024 WRH$_PARAMETER_PK
INDEX PARTITION SYS

       146          2    2509696       1024 WRH$_LATCH_MISSES_SUMMARY_PK
INDEX PARTITION SYS

       119          2    2505600       1024 WRH$_SYSTEM_EVENT
TABLE PARTITION SYS


已选择9行。

SQL> truncate table WRH$_SYSSTAT;

表被截断。

SQL>  select * from (select extent_id,file_id,block_id,blocks,segment_name,segment_type,owner from d
ba_extents where tablespace_name='SYSAUX' order by block_id desc) where rownum<10;

 EXTENT_ID    FILE_ID   BLOCK_ID     BLOCKS SEGMENT_NAME
---------- ---------- ---------- ---------- ------------------------------
SEGMENT_TYPE    OWNER
--------------- ----------
        89          2    2525184       1024 WRH$_SERVICE_WAIT_CLASS_PK
INDEX PARTITION SYS

       150          2    2513920       1024 WRH$_LATCH_MISSES_SUMMARY
TABLE PARTITION SYS

       130          2    2511872       1024 WRH$_PARAMETER
TABLE PARTITION SYS


 EXTENT_ID    FILE_ID   BLOCK_ID     BLOCKS SEGMENT_NAME
---------- ---------- ---------- ---------- ------------------------------
SEGMENT_TYPE    OWNER
--------------- ----------
        33          2    2511744        128 WRH$_TABLESPACE_STAT
TABLE PARTITION SYS

       145          2    2510720       1024 WRH$_PARAMETER_PK
INDEX PARTITION SYS

       146          2    2509696       1024 WRH$_LATCH_MISSES_SUMMARY_PK
INDEX PARTITION SYS


 EXTENT_ID    FILE_ID   BLOCK_ID     BLOCKS SEGMENT_NAME
---------- ---------- ---------- ---------- ------------------------------
SEGMENT_TYPE    OWNER
--------------- ----------
       119          2    2505600       1024 WRH$_SYSTEM_EVENT
TABLE PARTITION SYS

       140          2    2503552       1024 WRH$_SERVICE_STAT_PK
INDEX PARTITION SYS

       103          2    2498432       1024 WRH$_SYSTEM_EVENT_PK
INDEX PARTITION SYS


已选择9行。

SQL> truncate table WRH$_SERVICE_WAIT_CLASS;

表被截断。

SQL> truncate table WRH$_LATCH_MISSES_SUMMARY;

表被截断。
--没什么效果,对象太多,挪太费劲了。换思路。

SQL> alter database datafile 'C:\ORACLE\ORADATA\KHGL\SYSAUX01.DBF' resize 18240M
;
alter database datafile 'C:\ORACLE\ORADATA\KHGL\SYSAUX01.DBF' resize 18240M
*
第 1 行出现错误:
ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据


SQL> alter database datafile 'C:\ORACLE\ORADATA\KHGL\SYSAUX01.DBF' resize 19240M
;
alter database datafile 'C:\ORACLE\ORADATA\KHGL\SYSAUX01.DBF' resize 19240M
*
第 1 行出现错误:
ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据

4.新增磁盘F:给了80G足够

腾挪最大的SYSAUX数据文件20G到新磁盘路径下。
image.png

SQL> select file#,name from v$datafile;

     FILE#
----------
NAME
--------------------------------------------------------------------------------
         1
C:\ORACLE\ORADATA\KHGL\SYSTEM01.DBF

         2
C:\ORACLE\ORADATA\KHGL\SYSAUX01.DBF

         3
C:\ORACLE\ORADATA\KHGL\UNDOTBS01.DBF


     FILE#
----------
NAME
--------------------------------------------------------------------------------
         4
C:\ORACLE\ORADATA\KHGL\USERS01.DBF


SQL> alter tablespace SYSAUX offline;

表空间已更改。

--此时做文件拷贝操作:

image.png
由于SYSAUX offline了,所以此时涉及到该表空间的读写操作将会失败,但几乎不影响业务运行,不影响其它正常表空间的读写。
在alert日志有报错信息,待拷贝完成、数据文件rename和表空间 online后可恢复正常。
image.png


SQL> alter tablespace SYSAUX rename datafile 'C:\ORACLE\ORADATA\KHGL\SYSAUX01.DBF' to 'F:\oradata\khgl\SYSAUX01.DBF';

表空间已更改。

SQL> alter tablespace SYSAUX online;

表空间已更改。

SQL> select file#,name from v$datafile;

     FILE#
----------
NAME
--------------------------------------------------------------------------------
         1
C:\ORACLE\ORADATA\KHGL\SYSTEM01.DBF

         2
F:\ORADATA\KHGL\SYSAUX01.DBF

         3
C:\ORACLE\ORADATA\KHGL\UNDOTBS01.DBF


     FILE#
----------
NAME
--------------------------------------------------------------------------------
         4
C:\ORACLE\ORADATA\KHGL\USERS01.DBF


SQL> select online_status,status,file_name from dba_data_files;

ONLINE_ STATUS
------- ---------
FILE_NAME
--------------------------------------------------------------------------------
SYSTEM  AVAILABLE
C:\ORACLE\ORADATA\KHGL\SYSTEM01.DBF

ONLINE  AVAILABLE
F:\ORADATA\KHGL\SYSAUX01.DBF  --此处看到已经在F盘了。

ONLINE  AVAILABLE
C:\ORACLE\ORADATA\KHGL\UNDOTBS01.DBF


ONLINE_ STATUS
------- ---------
FILE_NAME
--------------------------------------------------------------------------------
ONLINE  AVAILABLE
C:\ORACLE\ORADATA\KHGL\USERS01.DBF

SQL> select status,contents,tablespace_name from dba_tablespaces;

STATUS    CONTENTS  TABLESPACE
--------- --------- ----------
ONLINE    PERMANENT SYSTEM
ONLINE    PERMANENT SYSAUX
ONLINE    UNDO      UNDOTBS1
ONLINE    TEMPORARY TEMP
ONLINE    PERMANENT USERS

正常之后,删除原先C盘的SYSAUX文件即可。此时空间就释放出来了。
image.png

之前另外一个CASE的空间满处理思路与此不同,所以具体问题具体分析,灵活应对。
Oracle磁盘空间马上满了,3千多万的trc文件处理?

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

评论