前言–问题背景:适用于服务器容量不能申请扩容,且容量基本已被表空间占用。否则可直接给表空间增加新的数据文件。
前言–前提条件:一个文件系统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
本文档描述了在Linux系统中,当Oracle数据库表空间接近满载时,如何通过备份、删除原表并重命名备份表来释放空间。详细步骤包括登录数据库、查看表空间状况、找出最大占用表、停用Tomcat、执行DMP备份、删除原表及后续的验证和清理工作。
1483

被折叠的 条评论
为什么被折叠?



