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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM