![b65f858ab421777ca20a23f5c920b0ec.png](https://img-blog.csdnimg.cn/img_convert/b65f858ab421777ca20a23f5c920b0ec.png)
![dfe0412fca0ea03064b0b14a1a2829d1.png](https://img-blog.csdnimg.cn/img_convert/dfe0412fca0ea03064b0b14a1a2829d1.png)
Oracle控制文件是Oracle数据库存储信息的重要文件,它是一个二进制文件,控制文件主要用来存放数据库名字、数据文件位置等信息的文件。Oracle控制文件是至关重要的,没有了它,数据库就不能启动。数据库启动报控制文件损坏,如果有备份是最好的,直接用备份启动,但是如果没有备份,就需要手工重建控制文件。
![cf1b86228d56a2561317ad828f65ffde.gif](https://img-blog.csdnimg.cn/img_convert/cf1b86228d56a2561317ad828f65ffde.gif)
现模拟没有控制文件备份,手工重建控制文件,首先把数据库启动到nomount状态,
把cluster_database参数修改为FALSE。
alter system set cluster_database=FALSE scope=spfile sid='*';
2下面是创建控制文件的脚本,这里面需要数据库的实列名,在线日志路径,各个表空间数据文件的路径,数据库的字符集等写在里面。
在数据库nomount状态把cluster_database参数修改为true
alter system set cluster_database=true scope=spfile sid='*' 4启动数据库
startup mount force ;
alter database open resetlogs/noresetlogs
5在生产数据库中手工重建控制文件是非常复杂,而且风险高。有两点建议是可以避免的:
第一、把数据库控制文件做多路复用,这样即使出现一个控制文件有问题,其他两个控制文件能保证数据库正常运行。第二、涉及数据库重启时,备份控制文件到本地,当出现控制文件损坏,可以使用备份控制文件启动数据库。
下面是控制文件多路复用方案![1eb5f305f018202e074c1066537e2537.png](https://img-blog.csdnimg.cn/img_convert/1eb5f305f018202e074c1066537e2537.png)
写这篇文章目的是希望大家不是在出现故障后被动的处理,而是应该在平时多挖掘隐患,及时消除隐患,避免因为这些隐患而造成的故障,当涉及数据库重启时一定要备份,如监听状态、参数文件、控制文件、有集群的备份集群状态等。
本期作者![63c16d15bd2fc62e80ad042f7d556c89.png](https://img-blog.csdnimg.cn/img_convert/63c16d15bd2fc62e80ad042f7d556c89.png)
本期作者 | 黄导:拥有5年oracle和mysql数据库运维经验。熟悉oracle、Mysql数据库性能调优、故障诊断、环境部署(包括rac、dataguard、goldengate、mysql),数据库升级、psu升级