Chinaunix首页 | 论坛 | 博客
  • 博客访问: 24004
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-22 10:52
文章分类
文章存档

2015年(2)

2014年(4)

我的朋友

分类: Oracle

2015-06-26 08:39:46

对于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) |
0

上一篇:高并发的epoll+线程池,业务在线程池内

下一篇:没有了

给主人留下些什么吧!~~