对于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;
阅读(835) | 评论(0) | 转发(0) |