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;

标签:1024,空间,磁盘空间,select,file,oracle,LXDM,id,硬盘

来源: https://www.cnblogs.com/dacude/p/12023611.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值