控制文件直接相关联的进程:CKPT,CKPT 进程向控制文件和数据文件头部更新检查点信息,来体现数据库的状态信息。
物理状态记录在控制文件中:
select name from v$datafile;
select member from v$logfile;
查看控制文件位置:
show parameter control;
select name from v$controlfile;
通常使用多个控制文件存放在不同位置(多路复用),互为镜像
cd /u01/app/oracle/oradata/ORCL
① 当增加、重命名、删除一个数据文件或者一个联机日志文件时,Oracle服务器进程会立即更新控制文件以反映数据库结构的变化
② 日志写进程LGWR负责把当前日志序列号记录到控制文件中
③ 检查点进程CKPT负责把校验点的信息记录到控制文件中
④ 归档进程ARCN负责把归档日志的信息记录到控制文件中
通过视图v$controlfile_record_section可以了解到控制文件中记录了大量的数据库当前状态信息
配置多个控制文件,最好是3个(最多8个),多路复用是相互镜像
① 启动实例:parameter file参数文件 ---> 记录控制文件的位置信息control_files=
② 挂载存储:打开控制文件mount ---> database open
注:尽量把控制文件放在不同目录下
查看控制文件的位置信息
show parameter control
修改控制文件的位置信息(此处实验不再存放不同目录)
alter system set control_files=‘/u01/app/oracle/oradata/ORCL/control01.ctl‘,‘/u01/app/oracle/oradata/ORCL/control02.ctl‘,‘/u01/app/oracle/oradata/ORCL/control03.ctl‘ scope=spfile;
shutdown immediate
startup nomount
show parameter control
!cp /u01/app/oracle/oradata/ORCL/control01.ctl /u01/app/oracle/oradata/ORCL/control03.ctl
alter database mount;
alter database open;
数据库运行情况下不能在系统层级cp控制文件的,可以使用backup语句
alter database backup controlfile to ‘/u01/app/oracle/oradata/ORCL/control.ctl.bak‘;
可以在mount或者open模式下生成一个trace文件,包含重建控制文件的语句,默认文件内容保存在Default Trace File中
alter database backup controlfile to trace;
select * from v$diag_info;
也可以存放到自定义的文件夹里
alter database backup controlfile to trace as ‘/u01/app/oracle/oradata/ORCL/control.trc‘;
控制文件一旦损坏,系统将不能正常工作。受损的控制文件会记录在告警日志中,重建控制文件必须使系统在NOMOUNT状态下
1)单个文件损坏了:参照多元化章节,通过简单复制解决
2)所有的控制文件丢失:
① 如果有binary控制文件备份,利用备份恢复控制文件
② 如果没有备份,利用trace脚本文件重新创建控制文件(代价:丢失归档记录信息和RMAN备份信息)
alter database backup controlfile to trace as ‘/u01/app/oracle/oradata/ORCL/control.trc‘;
shutdown immediate
cd /u01/app/oracle/oradata/ORCLrm -f control0*
startup
cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace/
tail -100f alert_orcl.log
vi /u01/app/oracle/oradata/ORCL/control.trc
找到下面的内容并执行重建控制文件:
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ‘/u01/app/oracle/oradata/ORCL/redo01.log‘ SIZE 200M BLOCKSIZE 512,
GROUP 2 ‘/u01/app/oracle/oradata/ORCL/redo02.log‘ SIZE 200M BLOCKSIZE 512,
GROUP 3 ‘/u01/app/oracle/oradata/ORCL/redo03.log‘ SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
‘/u01/app/oracle/oradata/ORCL/system01.dbf‘,
‘/u01/app/oracle/oradata/ORCL/sysaux01.dbf‘,
‘/u01/app/oracle/oradata/ORCL/undotbs01.dbf‘,
‘/u01/app/oracle/oradata/ORCL/users01.dbf‘
CHARACTER SET AL32UTF8
;
可以看到执行后三个控制文件又重新建立了。这时数据库已在mount下说明:这个重建控制文件的过程主要有两大部分内容:
第一部分是脚本中的可见信息:
第二部分是隐含的不可见信息,比如SCN信息,重建复制了当前所有数据文件头部的最新SCN信息复制到了控制文件中。以便接下来打开数据库。
select file#,checkpoint_change# from v$datafile;
select file#,checkpoint_change# from v$datafile_header;
alter database open;
ALTER TABLESPACE TEMP ADD TEMPFILE ‘/u01/app/oracle/oradata/ORCL/temp01.dbf‘ SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
原文:https://www.cnblogs.com/jsxxd/p/14631583.html