在oracle中,每个控制文件(control file)的内容都是相同的。一个控制文件记录了整个数据库的物理结构,它包含以下信息:
1.数据库名
2.数据文件和重做日志文件的文件名和路径
3.数据库创建的时间戳
为了安全起见,oracle一般会设置3-5个控制文件,这些都是在pfile或者spfile中指定的,我们也可以在pfile或spfile中指定添加一些新的控制文件。
控制文件部分丢失了,也就是少了其中的一个或者几个,那么数据库是一定无法开启的,那么我们可以采用拷贝控制文件的方式来解决此问题。下面将给大家模拟此过程。
在数据库打开的情况下,我们可以通过v$controlfile视图查看当前的控制文件的使用情况:
SQL> select name from v$controlfile;
由以上查询结果可知,我们一共用了3个控制文件,接下来我们在 /u01/app/oracle/oradata/orcl 目录中删除control03.ctl 模拟控制文件部分丢失。
$ rm control03.ctl
关闭数据库,并且重新启动数据库会报出控制文件验证错误。
这个时候我们可以采取复制控制文件的方式来恢复控制文件,在存放控制文件的目录/u01/app/oracle/oradata/orcl中执行以下命令来复制一个控制文件,控制文件命名为control03.ctl。
$ cp control01.ctl control03.ctl
于是,我们控制文件便恢复了,此时,我们再尝试打开数据库,这个时候数据库是肯定可以开启成功的。如下图所示:
通过以上步骤我们就解决由于数据库控制文件部分丢失所造成的数据库无法开启的问题了。