Linux下解决表空间数据文件使用比较大

Linux环境下优化Oracle数据库表空间
本文档描述了在Linux系统中,当Oracle数据库表空间接近满载时,如何通过备份、删除原表并重命名备份表来释放空间。详细步骤包括登录数据库、查看表空间状况、找出最大占用表、停用Tomcat、执行DMP备份、删除原表及后续的验证和清理工作。

前言–问题背景:适用于服务器容量不能申请扩容,且容量基本已被表空间占用。否则可直接给表空间增加新的数据文件。
前言–前提条件:一个文件系统Use%100,另一个文件系统Use%还有剩余较多空间的情况下。
前言–目的:将占表空间最大的表备份,然后删除原表,然后重命名备份表,以达到表空间使用比变小的目的。

问题描述

1、sqlplus / as sysdba 报错
ORA-09817:Write to audit file failed.
Linux-x86_64 Error: 28: No space left on device.
2、tomcat日志表明无法操作数据库,具体报错略。

0、登录进数据库

1、(如果2不能直接操作)(最好让运维帮忙做)删掉 oracle服务所在文件磁盘上的 一点点可删的文件,让你至少可以登录进oracle服务
2、登录进oracle服务所在服务器
3、su - oracle
4、df -h
假设看到打印如下:
Filesystem Used
原文件磁盘 100%
备用文件磁盘 10%
5、sqlplus /nolog
6、切换用户 conn 用户名/用户名密码

1、查看表空间情况

SELECT A.TABLESPACE_NAME AS "表空间名",
         A.BYTES / 1024 / 1024 AS "表空间大小(M)",
         (A.BYTES - B.BYTES) / 1024 / 1024 AS "已使用空间(M)",
         B.BYTES / 1024 / 1024 "空闲空间(M)",
         ROUND(((A.BYTES - B.BYTES) / A.BYTES) * 100, 2) "使用比"
    FROM (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES
            FROM DBA_DATA_FILES
           GROUP BY TABLESPACE_NAME) A,
         (SELECT TABLESPACE_NAME, SUM(BYTES) BYTES, MAX(BYTES) LARGEST
            FROM DBA_FREE_SPACE
           GROUP BY TABLESPACE_NAME) B WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME ORDER BY((A.BYTES - B.BYTES) / A.BYTES) DESC;

2.1、让tomcat能先跑起来看看

可以看看能不能先把表空间名为SYSTEM的表空间扩大下,让tomcat能先跑起来。

2.2、找到最占空间的表

把占表空间大小最大的表空间名找到,并查询其相对应的 数据库的用户和表名。

比如:其相对应的 数据库的用户和表名为sisp_test.T_YTH_TEST

3、停tomcat

以免在复制表的过程中业务表被改,复制表

create table T_YTH_TEST_BAK as select * from T_YTH_TEST;

复制完成后,可以检查下T_YTH_TEST_BAK和T_YTH_TEST条数是不是一样的。

4、(先exit)备份dmp

exp sisp_test/该用户名对应密码@host:port/service_name file=备用文件磁盘路径 T_YTH_TEST.dmp tables=T_YTH_TEST;

exp sisp_test/sisp_test@127.0.0.1:1521/orcl file=/home/oracle2/T_YTH_TEST.dmp tables=T_YTH_TEST

然后可以查看下备用文件磁盘路径下的dmp是否存在。

5、(先登录进数据库)删除原表,重命名复制的表

drop table T_YTH_TEST;
alter table T_YTH_TEST_bak rename to T_YTH_TEST;

6、服务跑几天没什么问题的话,就把T_YTH_TEST.dmp删除

 rm -f T_YTH_TEST.dmp
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值