多余临时表空间偶然用起报错ORA01157&ORA01110

2024年 5月 23日 78.5k 0

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

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

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

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.

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

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论