控制文件

控制文件

1. 功能和特点

  • 记录当前数据库的物理状态
  • 维护数据库的一致性
  • 是一个二进制小文件
  • 在mount阶段被读取
  • 记录RMAN备份的元数据库

控制文件直接相关联的进程: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

 

2. 实时更新机制

① 当增加、重命名、删除一个数据文件或者一个联机日志文件时,Oracle服务器进程会立即更新控制文件以反映数据库结构的变化

日志写进程LGWR负责把当前日志序列号记录到控制文件中

检查点进程CKPT负责把校验点的信息记录到控制文件中

归档进程ARCN负责把归档日志的信息记录到控制文件中

通过视图v$controlfile_record_section可以了解到控制文件中记录了大量的数据库当前状态信息

 

3. 控制文件多元化(多路复用)

配置多个控制文件,最好是3个(最多8个),多路复用是相互镜像

3.1 控制文件多路复用的过程

① 启动实例:parameter file参数文件 ---> 记录控制文件的位置信息control_files=

② 挂载存储:打开控制文件mount ---> database open

3.2 增加一个控制文件(数据库默认是2个)

注:尽量把控制文件放在不同目录下

3.2.1 启动实例:修改control_files=3个控制文件

查看控制文件的位置信息

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;

3.2.2 重启数据库到nomount状态

shutdown immediate
startup nomount
show parameter control

3.2.3 打开控制文件:在磁盘上生成一个新的控制文件

!cp /u01/app/oracle/oradata/ORCL/control01.ctl /u01/app/oracle/oradata/ORCL/control03.ctl
alter database mount;
alter database open;

 

4. 备份与重建控制文件

4.1 备份backup controlfile

数据库运行情况下不能在系统层级cp控制文件的,可以使用backup语句

alter database backup controlfile to '/u01/app/oracle/oradata/ORCL/control.ctl.bak';

4.2 备份到trace文件

可以在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';

4.3 恢复控制文件方法

控制文件一旦损坏,系统将不能正常工作。受损的控制文件会记录在告警日志中,重建控制文件必须使系统在NOMOUNT状态

1)单个文件损坏了:参照多元化章节,通过简单复制解决

2)所有的控制文件丢失:

  ① 如果有binary控制文件备份,利用备份恢复控制文件

  ② 如果没有备份,利用trace脚本文件重新创建控制文件(代价:丢失归档记录信息和RMAN备份信息)

4.4 【实战案例】重建控制文件

4.4.1 Mountopen下生成trace脚本

alter database backup controlfile to trace as '/u01/app/oracle/oradata/ORCL/control.trc';

4.4.2 正常关库,模拟控制文件全部丢失

shutdown immediate
cd /u01/app/oracle/oradata/ORCLrm -f control0*

4.4.3 启动数据库报错,查看报警日志

startup

cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace/
tail -100f alert_orcl.log

4.4.4 nomount状态下:恢复控制文件(手工重建控制文件)

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说明:这个重建控制文件的过程主要有两大部分内容:

第一部分是脚本中的可见信息:

  • 定义 db_name,
  • 指定几个参数限定控制文件的最大值,
  • 在线日志的物理信息
  • 数据文件的物理信息
  • 使用的字符集

第二部分是隐含的不可见信息,比如SCN信息,重建复制了当前所有数据文件头部的最新SCN信息复制到了控制文件中。以便接下来打开数据库。

select file#,checkpoint_change# from v$datafile;
select file#,checkpoint_change# from v$datafile_header;

4.4.5 将数据库切换到open状态

alter database open;

4.4.6 添加临时数据文件信息

ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/ORCL/temp01.dbf' SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

posted @ 2021-06-05 19:35  chchcharlie、  阅读(251)  评论(0编辑  收藏  举报