参数文件中定义控制文件位置及个数,建议控制文件放在不同位置,最多可以创建8个,多个控制文件间是镜像的关系.
控制文件包含:
数据库名字及标识
数据库创建的时间戳
表空间名字
数据文件和联机重做日志文件的位置和名字
当前联机重做日志文件的sequence号码
检查点信息
回滚段的开始和结束
联机重做日志的归档信息
备份信息
控制文件视图
V$CONTROLFILE
V$PARAMETER
V$CONTROLFILE_RECORD_SECTION
SHOW PARAMETER CONTROL_FILES
select name,value from v$parameter where
name='control_files';
select name ,status from v$controlfile;
控制文件内容查看
strings $ORACLE_BASE/oradata/control01.ctl
alter database backup controlfile to trace;
alter database backup controlfile to trace as
'/home/oracle/control.bak'
desc v$control_record_section
select type,record from v$control_record_section;
转储控制文件内容
alter session set events 'immediate trace name CONTROLF level
1';
show parameter user_d
控制文件的管理(DBA)
1、规划原则:多路复用
2、个数和位置管理
spfile或pfile都可以实现对控制文件个数位置管理
spfile步骤:
修改spfile参数control_files
alter system set
control_files='u01/app/oracle/oradata/control01.ctl','u01/app/oracle/oradata/control02.ctl','u01/app/oracle/oradata/control01.ctl'
scope=spfile;
一致性关不数据库
shutdown immediate
增加或减少控制文件文件
cp u01/app/oracle/oradata/control01.ctl
u01/app/oracle/oradata/control03.ctl
启动数据库使用spfile
验证结果
show parameter conf
pfile步骤
一致性关闭数据库
修改pfile参数
增减或者减少控制文件文件
启动数据库使用pfile
验证结果
3、状态管理
ls /u01/app/oracle/oradata/*.ctl --确认文件都在
df -h
ll -h /u01/app/oracle/oradata/*.ctl
--控制文件物理大小要在100M内,如果接近100M应采取减少控制文件大小的措施处理
4、备份管理
热备:
alter database backup controlfile to '';--热备控制文件,归档下才有效
alter database backup controlfile to trace as
'';--得到建立控制文件的脚本
rman备:
backup current controlfiles;
backup database include current controlfiles;
或者设置控制文件自动备份
RMAN>configure CONTROLFILE AUTOBACKUP on;
5、恢复管理
控制文件不一致,需要找到新的替换旧的或者直接修改control_file使用新的
ORA-00214 控制文件版本不一致
方法1:
show parameter control
cp u01/app/oracle/oradata/control01.ctl
u01/app/oracle/oradata/control02.ctl
alter database mount;
alter database open;
方法2(不推荐使用,不符合多个文件管理):
show parameter control
alter system set
control_files='/u01/app/oracle/oradata/control01.ctl'
scope=spfile;
showdown immediate;
startup;
解决丢失:
确认数据库是否归档模式
不是归档:先全备,然后建立新的控制文件
<1>ORA-00205 控制文件丢失,查看oracle日志可知道哪个控制文件丢失
<2>show parameter control --查看控制文件个数
<3>确认数据库是否归档,无归档,在数据库日志中查找重建控制文件脚本
<4>只是丢失控制文件 非归档 日志全
create controlfile reuse dabatase orcl noarchivelog no
resetlogs
maxlogfiles 16
maxinstances 8
maxlogmembers 3
maxloghistory 1
datafile
'u01/app/oracle/oradata/system01.dbf',
'u01/app/oracle/oradata/example01.dbf',
'u01/app/oracle/oradata/sysux01.dbf',
'u01/app/oracle/oradata/users01.dbf',
'u01/app/oracle/oradata/undotbs01.dbf'
logfile
group 1 '/u01/app/oracle/oradata/redo01.log' size 52M,
group 2 '/u01/app/oracle/oradata/redo02.log' size 52M,
group 3 '/u01/app/oracle/oradata/redo03.log' size 52M
character set ZHS16GBK #以前的字符集
/
<5>alter database open;
<6>recover database;
归档且日志都在:先全备,使用备份的控制文件恢复即可
<1>RMAN>alter database backup controlfile to
'u01/oracle/ctl2018.ctl';
<2>ORA-00205 控制文件丢失,查看oracle日志可知道哪个控制文件丢失
<3>备份全部文件
<4>拷贝文件
cp '/u01/oracle/ctl2018.ctl'
/u01/oracle/oradata/control01.ctl
cp '/u01/oracle/ctl2018.ctl'
/u01/oracle/oradata/control01.ctl
cp '/u01/oracle/ctl2018.ctl'
/u01/oracle/oradata/control01.ctl
<5>alter database mount;
<6>alter database open;提示报错ORA-01589
使用老的控制文件恢复
alter database recover database using backup
controlfile;
shutdown immediate
startup;
alter database recover database using backup controlfile until
change 1071696;
alter database open resetlogs;
--此时报错
ORA-01194
ORA-01110 ##此时调整参数,应急情况下,比较极端慎用,不建议操作
alter system
set"_allow_resetlogs_corrupttion"=true
scope=spfile;
startup;
alter database open resetlogs;##切记日志无效,全库备份
##正常操作
*************************************************************
show parameter control_f
ho ls /u01/oracle/oradata/*.ctl
ho cp '/u01/oracle/ctl2018.ctl'
/u01/oracle/oradata/control01.ctl
ho cp '/u01/oracle/ctl2018.ctl'
/u01/oracle/oradata/control01.ctl
ho cp '/u01/oracle/ctl2018.ctl'
/u01/oracle/oradata/control01.ctl
alter database mount;
alter database open;
alter database open resetlogs;
ORA-01152 ORA-01110
alter database recover database using backup
controlfile;
showdown immediate;
startup;
alter database open resetlogs
ORA-00113 ORA-01110
recover database;
ORA-00283 ORA-01610
alter database recover database using backup
controlfile;
ORA-00279 ORA-00189 ORA-00280
Specify
log:{=suggested|filename|AUTO|CANCEL}
/u01/oracle/oradata/redo01.log
#此时一直输入redolog的路径直至找到相应文件
提示Media recovery complete
alter database open;
alter database open resetlogs;##切记旧日志无效,需要全库备份
archive log list;
************************************************************
show parameter control_f
ho ls /u01/oracle/oradata/*.ctl
ho cp '/u01/oracle/ctl2018.ctl'
/u01/oracle/oradata/control01.ctl
ho cp '/u01/oracle/ctl2018.ctl'
/u01/oracle/oradata/control01.ctl
ho cp '/u01/oracle/ctl2018.ctl'
/u01/oracle/oradata/control01.ctlbase
alter database mount;
alter database open;
ORA-01589
alter database recover database using backup
controlfile;
ORA-00283 ORA-19909 ORA-01110
recover database;
ORA-00283 ORA-01610
alter database recover database using backup
controlfile;
ORA-00279 ORA-00189 ORA-00280
##此处未出现Specify log:{=suggested|filename|AUTO|CANCEL}
执行alter system set"_allow_relogs_corrupttion"=true
scope=spfile;
alter database open resetlogs;
startup;
archive log list;
show parameter _allow
alter system reset"_allow_resetlogs_corrupttion"
scope=spfile sid=*;
**********************************************************
归档但日志不全:先全备,然后建立新的控制文件
6、新建控制文件语句
可以在数据库运行在mount或open的时候
可以执行alter database backup controlfile to trace as '
'得到建立语句
但要注意【no】archivelog 【no】resetlogs 2个参数的区别