暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

多余临时表空间偶然用起报错ORA-01157&ORA-01110

原创 virvle 2024-05-23
842

收到某数据库服务器容量超90%限值告警,排查处理要么删除些数据,要么扩容
然后就关注到临时表空间这块,发现部分临时表空间的数据文件一直未更新,日期还是去年的,接下来具体来看看是怎么回事

1. 查询临时表空间文件触发报错

image.png

SQL> select round(bytes/1024/1024/1024,2) as bytes,tf.* from dba_temp_files tf; select round(bytes/1024/1024/1024,2) as bytes,tf.* from dba_temp_files tf ORA-01157: 无法标识/锁定数据文件 2015 - 请参阅 DBWR 跟踪文件 ORA-01110: 数据文件 2015: '/mnt/oradata/tempp01.dbf'

2. 原因分析

2.1 究竟是怎么回事,OS层面查询,发现文件确实是不存在的;

猛然想起,数据库缩容做迁移的时候,只处理数据文件,并新增了个临时表空间 temp2,对原有的临时表 tempp 空间没有给予理会,初步判断应该是一个无用的临时表空间,难怪一直没有发现他有问题

[oracle@virdb mnt]$ ll -h /mnt/oradata/tempp01.dbf ls: 无法访问/mnt/oradata/tempp01.dbf: 没有那个文件或目录

为了防止出错,进一步确认

2.2 查看所有临时表空间名字及文件名

发现tempp临时表空间包含的部分文件确实不存在与操作系统了

select f.file#,t.ts#,f.name "File",t.name "Tablespace" from v$tempfile f,V$tablespace t where f.ts# = t.ts# ;

2.3 查看当前用户的默认表空间

select distinct temporary_tablespace from dba_users;

查询后发现都是temp2

2.4 查看会话正在使用的表空间

SELECT se.username, sid, serial#, sql_address, machine, program, tablespace, segtype, contents FROM v$session se, v$sort_usage su WHERE se.saddr=su.session_addr;

查询后发现都是temp2

到此,可以确认:tempp确实是无用的,可以进行删除。
由于涉及较多的文件,为了加快速度,先删除部分表空间包含的文件,最后删除临时表空间(谨慎)

4. 解决问题:删除无用临临时表空间tempp

4.1 删除临时表空间包含的数据文件

SQL> alter tablespace TEMPP drop tempfile '/mnt/oradata/tempp02.dbf'; Tablespace altered. SQL> alter tablespace TEMPP drop tempfile '/mnt/oradata/tempp03.dbf'; alter tablespace TEMPP drop tempfile '/mnt/oradata/tempp04.dbf'; Tablespace altered. SQL> Tablespace altered.

4.2 删除临时空间及其文件

SQL> drop tablespace TEMPP including contents and datafiles ; Tablespace dropped.

到此,再次查询之前遇到报错的语句,已经可以正常执行了。
迁移无小事,还是要多查看多验证

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论