前言:一般这个问题是由于dbf 文件删除导致的,然后拿了一个备份文件放回原位置
结果open 完了之后,dbf里面的数据访问不了
看了很多博客,上来就是说删除dbf 文件, 搞笑!你生产环境上能删掉数据文件(千万不要删除dbf文件,除非真的数据是废物,当我没说)
下面说说我的情况
作为一个测试环境,在shutdown的状态下,备份了dbf 文件,然后rm dbf,接着把dbf还原,
数据库可以正常 nomount、mount、open
但是open后的数据库进行查询数据报错
第一反应就是查看scn 是否都一致,结果查看v$datafile、v$datafile_header、v$database的checkpoint_chamge#,果然有两个不一样
查看v$datafile 发现数据文件是offline 状态 首先要想办法把数据文件改成online状态;
alter tablespace 表空间 online
后来看了一个博主的文章 发现copy过来的dbf 所属主成了root 用户组(原来是文件所属组导致我无法online)
chow -R 用户:用户组 文件/文件夹
修改之后重新
alter tablespace 表空间 online;
recover datafile 5;
重启数据库
shutdown immediate;
starup nomont;
startup mount;
startup open;
重启之后Oracle是自动同步scn
参考博客:
ORA-01157: cannot identify/lock data file %s - see DBWR trace file的处理-阿里云开发者社区