select * from v$controlfile_record_section;
配置多个 control_files,控制文件最好是 3 个(最多 8 个)。多路复用是相互镜像
修改参数,在 FRA 快速回复区增加一个控制文件
SYS@PROD1>alter system set
control_files='/u01/app/oracle/oradata/PROD1/control01.ctl',
'/u01/app/oracle/oradata/PROD1/control02.ctl',
'/u01/flash/control03.ctl' scope=spfile;
一致性关库,启动到 nomount 状态查看
SYS@PROD1>shutdown immediate;
SYS@PROD1>startup nomount;
SYS@PROD1>show parameter control_files;
复制控制文件,Oracle 建议分配在不同的物理磁盘上
SYS@PROD1>! cp /u01/app/oracle/oradata/PROD1/control01.ctl /u01/flash/control03.ctl
三个 control 文件要一致(镜像关系)
SYS@PROD1>alter database mount;
SYS@PROD1>alter database open;
RMAN 备份恢复控制文件
3.1 控制文件自动备份
[oracle@ocm1 ~]$ rman target /
RMAN> show all;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> list backup of controlfile;
RMAN> backup tablespace users;
[oracle@ocm1 ~]$ rman target /
RMAN> list failure;
RMAN> list failure;
RMAN> advise failure;
RMAN> repair failure preview;
recover database ;
alter database open resetlog;
备份 backup controlfile
数据库打开时是不能直接操作系统界别 cp 控制文件的,可以使用 backup 语句
SYS@PROD1>alter database backup controlfile to '/u01/app/oracle/oradata/PROD1/control.ctl.bk';
可以在 mount 或 open 模式生成一个 trace 文件,包含重建控制文件的语句
默认文件内容保存在 Default Trace File 中
SYS@PROD1>alter database backup controlfile to trace;
可以存到自己起的文件名里
SYS@PROD1>alter database backup controlfile to trace as '/u01/app/oracle/oradata/PROD1/control.trc';
SYS@PROD1>select * from v$diag_info;
恢复(重建)控制文件方法
控制文件一旦损坏,系统将不能正常工作。受损的控制文件会记录在告警日志中,重建控制
文件必须使系统在 NOMOUNT 下
1)单个文件损坏了:参照多元化章节,通过简单复制解决。
2)所有的控制文件丢失:
①如果有 binary 控制文件备份,利用备份恢复控制文件,
②如果没有备份,利用 trace 脚本文件重新创建控制文件(代价:丢失归档记录信息和 RMAN
备份信息)
重建控制文件
5.1 Mount 或 open 下生成 trace 脚本
SQL>alter database backup controlfile to trace as '/u01/app/oracle/oradata/PROD1/control.trc';
nomount 状态 执行重建控制文件语句
more control.trc
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "PROD1" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/PROD1/redo01.log' SIZE 50M
BLOCKSIZE 512,
GROUP 2 '/u01/app/oracle/oradata/PROD1/redo02.log' SIZE 50M
BLOCKSIZE 512,
GROUP 3 '/u01/app/oracle/oradata/PROD1/redo03.log' SIZE 50M
BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/u01/app/oracle/oradata/PROD1/system01.dbf',
'/u01/app/oracle/oradata/PROD1/sysaux01.dbf',
'/u01/app/oracle/oradata/PROD1/undotbs01.dbf',
'/u01/app/oracle/oradata/PROD1/users01.dbf',
'/u01/app/oracle/oradata/PROD1/example01.dbf'
CHARACTER SET AL32UTF8
;
可以看到执行后三个控制文件又重新建立了。这时数据库已在 mount 下
说明:这个重建控制文件的过程主要有两大部分内容:
第一部分是脚本中的可见信息:
1)定义 db_name,
2)指定几个参数限定控制文件的最大值,
3)在线日志的物理信息,
4)数据文件的物理信息,
5)使用的字符集。
第二部分是隐含的不可见信息,比如 SCN 信息,重建复制了当前所有数据文件头部的最新 SCN
信息复制到了控制文件中。以便接下来打开数据库。
SQL> select file#,checkpoint_change# from v$datafile; ##控制文件里记录
SQL> select file#,checkpoint_change# from v$datafile_header; ###数据文件记录
添加临时数据文件信息
ALTER TABLESPACE TEMP ADD TEMPFILE
'/u01/app/oracle/oradata/PROD1/temp01.dbf'
SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
使用旧的控制文件做基于取消的不完全恢复
SYS@PROD1> recover database using backup controlfile;
select file#,checkpoint_change#,last_change#,name from v$datafile;
select file#,checkpoint_change#,name from v$datafile_header;
1)v$recover_file 查看需要恢复的 datafile
2)v$recovery_log 查看 recover 需要的 redo 日志
3)v$archvied_log 查看已经归档的日
创建空数据文件
SYS@PROD1> alter database create datafile
'/u01/app/oracle/PROD1uct/11.2.0/dbhome_1/dbs/UNNAMED00006'
as '/u01/app/oracle/oradata/PROD1/testtbs01.dbf';
继续使用旧的控制文件 recover
基于取消的不完全恢复(当前日志组文件损坏或丢失)
SYS@PROD1> recover database using backup controlfile;
recover database using backup controlfile until cancel;
SYS@PROD1> alter database open resetlogs;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




