控制文件是什么,在前面的文章中也已经说过,这里主要说一下重建控制文件
1.查看控制文件所在的位置
这里怎样查看控制文件的位置
SQL> show parameter control_files; NAME TYPE ------------------------------------ --------------------------------- VALUE ------------------------------ control_files string /oradata/orcl/control01.ctl, / oradata/orcl/control02.ctl
2.重建控制文件
使用sqlplus连接到已经mount或open的rac数据库
sql> alter database backup controlfile to trace noresetlogs; ##当执行这个命令是会在alert.log中会记录备库控制文件的日志,且在tracefile中找到整个crontol文件的sql语句
(备份控制文件):
alter database backup controlfile to '/u02/app/oracle/control.ctl';
或者使用这种方法,把控制文件内容给打印出来:建议使用这中方法查看控制文件内容:
alter database backup controlfile to trace as '/tmp/controlfile.log';
3.编写control.sql文件
这里的control.sql文件要根据上面查看到的控制文件进行写入(很简单)
4.关闭数据库的所有实例
srvctl stop database -d db_name -o immeidate
5.备份当前的控制文件
alter database backup controlfile to '/u02/app/oracle/control.ctl';
6.确保所有的设置都是针对thread 1
instance = 1 thread = 1
7.将参数文件中的cluster_database 设置为false
sql> startup nomount sql> alter system set cluster_database=false scope=spfile; sql> shutdown
8.运行脚本(这一步是在第7步和第8步之间的)
sqlplus / as sysdba SQL> @control.sql
9.将参数cluster_database设置为true
sql> alter system set cluster_database=true scope=spfile;
10.关闭数据库
shu immeidate
11.启动所有实例并查看状态
srvctl start database -d db_name srvctl status database -d db_name
##这里想要说几个要注意的点:
1.跑control.sql脚本时,先要把数据置于nomount状态,然后修改参数cluster_database为false,这个参数是rac集群参数,然后再跑control.sql脚本。
2.跑完之后,需要在修改参数cluster_database为true. 然后再shu immeidate数据,最后再用srvctl启动数据。
3.如果是单实例的话,那么就不需要设置cluster_database,直接在nomount状态下执行control.sql语句。