当前位置:   article > 正文

oracle 服务器硬盘满了,oracle服务器硬盘磁盘空间满了

oracle磁盘空间不足,释放空间后,服务依然存在问题

问题描述:oracle服务器硬盘磁盘空间满了,没有空间写入数据;

解决思路:

a、服务器是虚拟机还是实体机?

虚拟机,->物理机上有空间直接给它扩容,再给数据库的相关表空间添加文件就可;

实体机,->确定是否还有oracle收缩磁盘硬盘插槽,能新增物理硬盘,买+接入;

b、删数据以及降低高水位;

通常思路是:找占用磁盘最大的表空间TS_1,找该表空间下巨大的表tableA,删除历史数据,降低高水位(table move),缩小表空间文件,腾出空间;

1、查询 表空间各文件 --找出占用磁盘最大的表空间

--1.1、查询 表空间、以及大小 --找出占用磁盘最大的表空间

SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size

FROM dba_tablespaces t, dba_data_files d

WHERE t.tablespace_name = d.tablespace_name

GROUP BY t.tablespace_name

order by ts_size desc;

--1.2、按数据库文件查看使用情况

select /*+ ordered use_hash(a,b,c) */

a.file_id,a.file_name,a.filesize, b.freesize,

(a.filesize-b.freesize) usedsize,

c.hwmsize,

c.hwmsize - (a.filesize-b.freesize) unsedsize_belowhwm,

a.filesize - c.hwmsize canshrinksize

from

(

select file_id,file_name,round(bytes/1024/1024) filesize from dba_data_files

) a,

(

select file_id,round(sum(dfs.bytes)/1024/1024) freesize from dba_free_space dfs

group by file_id

) b,

(

select file_id,round(max(block_id)*8/1024) HWMsize from dba_extents

group by file_id) c

where a.file_id = b.file_id

and a.file_id = c.file_id

order by unsedsize_belowhwm desc

查看数据文件使用情况

结果说明:

File_id : 文件编号

File_name: 文件名称

File_size: 数据文件占用磁盘空间大小

Freesize:文件中被标记为free的空间大小

Usedsize: 使用的空间大小。

Hwmsize: 已经分配出去的空间大小,如果希望通过alter database datafile … resize integerM回收空间,将需要这个值作为参考,不能回收到这个值之下,否则会报错。

Freee_belowhwm_size: 在HWM(高水位标记线之下的空闲空间数),这个是理论上的可以回收的空间大小。

Curr_can_shrink: 这个是实际大小与HWM标记之间的差,就是还没有分配出去的空间大小。

1.3、在表空间下 列出表占用的空间 --找出最大的表

--1.3、在表空间下 列出表占用的空间 --找出最大的表

Select Segment_Name,Sum(bytes)/1024/1024 x From User_Extents Group By Segment_Name

order by x desc

分析这3个结果,如果表空间下有剩余空间,找到对应文件,可以直接减少文件大小,释放空间给别人用;

ALTER DATABASE DATAFILE 'D:\ora_tablespace\GCOMM2.dbf' RESIZE 5000M;

如没有,,确定要要动哪个表空间下哪个表。那就需要删数据和降低高水位了。

2、按字段的时间 删除数据

2.1、查询 一个表中 几条数据 看下 字段

select * from SD_KLFX_LXDM_ES where rownum <20

2.2把要留的数据新建表 存起来

create table new_LXDM as select * from SD_KLFX_LXDM_ES where day > to_date('2019-10-15 00:00:00','yyyy-mm-dd hh24:mi:ss');

2.3 truncate 把原表数据都删掉

truncate table SD_KLFX_LXDM_ES

2.4 把新表数据还原回老表 insert into SD_KLFX_LXDM_ES select * from new_LXDM

确认下数据一致,老表数据是否有、条数一致

select * from SD_KLFX_LXDM_ES where rownum <20

select count(1) from new_LXDM;

select count(1) from SD_KLFX_LXDM_ES;

2.5 销毁新表 drop table new_LXDM

3、alter table test move 移动表,降低高水位;

--alter table move主要有两方面的作用

3.1.用来移动table到其他表空间

3.2.用来减少table中的存储碎片,优化存储空间和性能

重建索引

SQL> alter index idx_t_object_id rebuild;

4、减少文件的大小

ALTER DATABASE DATAFILE 'D:\ora_tablespace\GCOMM2.dbf' RESIZE 5000M;

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号