zoukankan      html  css  js  c++  java
  • 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_tablespaceGCOMM2.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_tablespaceGCOMM2.dbf' RESIZE 5000M;

  • 相关阅读:
    GirdView实现折叠式效果
    asp.net MVC出错解决
    C#如何实现从内存中加载程序集
    从线程池看《操作系统》专业课的作用【转自杨中科学生大本营】
    JavaScript的10个非常有用的方法【转】
    JQuery最佳实践:JQuery自定义事件的应用
    C#的委托事件在winform窗体中实现传值备忘
    asp.net异步获取datatable并显示
    ASP.NET 请求处理流程【转】
    温故而知新:WinForm/Silverlight多线程编程中如何更新UI控件的值
  • 原文地址:https://www.cnblogs.com/dacude/p/12023611.html
Copyright © 2011-2022 走看看