解决误删datafile导致数据库无法启动的问题

本文介绍了一种解决Oracle数据库因误删datafile而导致无法启动的方法。通过一系列步骤,包括以mount模式启动数据库、离线丢失的datafile并最终删除无效的tablespace,实现了数据库的正常启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:解决误删datafile导致数据库无法启动的问题 作者:pan_trix2

对于Oracle我的知识几乎为零,使用它只是为了产生一些真实的数据交易IO来测试后端的存储。今天遇到个恼人的问题:tablespace的datafile是创建在从NFS server mount到服务器的share文件夹中的,而NFS server(也就是后端存储)被意外的全部清空了,这导致DB启动时由于找不到datafile而报错,DB不能打开:

ORA-01122: database file 32 failed verification check
ORA-01110: data file 32: '/mnt/dbstore2/tpcctbs2.dbf'

Google了老半天,找了一些文章,但是没有哪篇可以直接解决问题。我的目的只是要正常启动DB,然后把无效的tablespace删除就可以了,数据本身并不需要保留或者备份。
尝试了一整天,终于把解决问题的流程试出来了,这里记录下来,希望对大家有帮助。

首先以mount方式打开DB,切换到需要进行操作的container:
shutdown normal;
startup mount;
alter session set container=PDBORCL;


将上面日志中提到的文件进行offline操作 (以下两条指令顺序不能改变,否则执行不成功,搞不懂为什么):
alter database datafile '/mnt/dbstore2/tpcctbs2.dbf' offline drop;  
alter database datafile 32 offline;


退出并重新进入sqlplus, 然后关闭DB:
shutdown normal;

到了这一步,由于我对Oracle非常不熟,在做以下操作时又遇到一些问题,所以干脆先重启了一下server,然后打开DB:
lsnrctl start
dbstart


这时查看启动日志,DB已经正常启动了。
进入sqlplus,再次切换到需要进行操作的container:
alter pluggable database pdborcl open;
alter session set container=PDBORCL;


然后查看已有的tablespace:
SELECT dd.tablespace_name tablespace_name, dd.file_name file_name FROM sys.dba_data_files dd;

最后就可以把已经无效的tablespace删除掉了:
drop tablespace tpcctab INCLUDING CONTENTS and datafiles CASCADE CONSTRAINTS;
drop tablespace tpcctemp INCLUDING CONTENTS and datafiles CASCADE CONSTRAINTS;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值