Chinaunix首页 | 论坛 | 博客
  • 博客访问: 181985
  • 博文数量: 56
  • 博客积分: 2305
  • 博客等级: 大尉
  • 技术积分: 591
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-13 10:42
文章分类

全部博文(56)

文章存档

2012年(3)

2011年(17)

2010年(36)

我的朋友

分类: LINUX

2011-10-10 16:01:32

Issue:

发现vc服务挂了,看log,发现DB问题,登录DB,发现/u00磁盘分区满了,因为没有设置警告,所以已经是100%了。

u00分区是用来放系统表空间和数据库安装目录的,用户表空间在u01,那为什么u00会满呢,发现是temp tablespace在作怪,已经达到了13G,把本来没有分配足够的表空间全部占满了。

为什么临时表空间这么大呢,主要和vc里大量做排序操作有关,我们有几百个VM,每次查找VM时,要么用搜索,要么直接在GUI上排序,估计是这些操作大量消耗了临时表空间,按理说临时表空间在DB shutdown后会自动释放掉,但可能是因为没有shutdown,又或者是其他原因,我们的临时表空间达到了13G。

在本公司DBA专家Samuel的大力协助下.................................解决办法,先删除一些多余文件,使sqlplus '/ as sysdba'命令可以正常login (100%的时候会报无法login,audit文件写不进去),然后在u01分区创建一个新的临时表空间,将系统的临时表空间迁移过去,然后删除原先的临时表空间:

1. 创建新的临时表空间
create temporary tablespace temp02 tempfile '/u01/oradata/vcdb/temp02.dbf' size 2048M autoextend on;

2. 检查当前的临时表空间使用情况
select username, temporary_tablespace from dba_users;

3. 如果有正在处理的事务,通过这个方法来检查session,如果有,kill掉它
select sid,serial# from v$session s ,v$sort_usage t where s.serial#=t.SESSI
ON_NUM;
ALTER SYSTEM KILL SESSION 'sid,serial#';

4. 将系统临时表空间迁移到新的上去
alter database default temporary tablespace temp02;

5. 检查当前的临时表空间使用情况
select username, temporary_tablespace from dba_users;

6. 删除原有的临时表空间
drop tablespace temp including contents;

7. 删除原有的临时表空间文件,有时运行不了,就退出sql,直接rm -f
alter database tempfile  '/u00/app/oracle/oradata/orcl/temp01.dbf' offline;

8. 检查当前的表空间数据文件
select name from v$datafile;
阅读(995) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~