控制文件记录着数据库的物理文件信息和数据库的状态信息 非常重要
一个控制文件是定义当前物理数据库当前状态的一个小的二进制文件
Oracle 服务器在数据库使用的过程中会不断更新控制文件
何时涉及改控制文件
每次在线日志文件、数据文件的新增、修改、删除,归档等都会更新控制文件
热备份的时候
触发系统事件时
CKPT进程将每三秒会触发检查点进程去写控制文件
SELECT * FROM V$CONTROLFILE;
idle> col type for a30
idle> select * from v$controlfile_record_section;
控制文件的内容:
数据库名
创建数据库时的时间戳
表空间名
物理结构,包括日志文件,数据文件的名字和地址
当前日志的序列号
检查点信息
回滚段的信息
日志归档的历史
备份与恢复的信息(RMAN)
数据库启动时使用几个控制文件由参数文件决定
control_files
idle> select value from v$parameter where name='control_files';
VALUE
-----------------------------------------------------------------
/home/oracle/oradata/demon/control01.ctl
idle>
控制文件很重要 所以控制文件需要多元化管理
最少1个 最多8个 多个控制文件都是镜像关系
默认文件系统存储位置 $ORACLE_BASE/oradata/$ORACLE_SID/controlNN.ctl
增加控制文件
1.修改参数 增加一个新指针
control_files='/home/oracle/oradata/demon/control01.ctl','/home/oracle/oradata/demon/control02.ctl'
判断当前是pfile 还是spfile
show parameter pfile
value 有值就是spfile 没值就是pfile
判断这个参数是否支持动态修改
idle> select NAME,ISSYS_MODIFIABLE from v$system_parameter where NAME='control_files';
NAME ISSYS_MODIFIABLE
-------------------------------------------------- ---------------------------
control_files FALSE
vim $ORACLE_HOME/dbs/initdemon.ora
control_files='/home/oracle/oradata/demon/control01.ctl','/home/oracle/oradata/demon/control02.ctl'
:wq
idle> shut immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
idle> startup
ORACLE instance started.
Total System Global Area 289406976 bytes
Fixed Size 1219016 bytes
Variable Size 234882616 bytes
Database Buffers 50331648 bytes
Redo Buffers 2973696 bytes
ORA-00205: error in identifying control file, check alert log for more info
查看日志 $ORACLE_BASE/admin/bdump/alert_demon.log
idle> ! cp $ORACLE_BASE/oradata/demon/control01.ctl $ORACLE_BASE/oradata/demon/control02.ctl
idle> alter database mount ;
Database altered.
idle>
练习 减少,移动,改名控制文件
控制文件的备份
两种备份方法
1.产生二进制文件
SQL> alter database backup controlfile to '/home/oracle/control.bak';
Database altered.
2.产生文本文件
SQL> alter database backup controlfile to trace as '/home/oracle/control.sql';
Database altered.
SQL>
实验:
对一致的数据库建立控制文件
先停库 建立一致的数据文件和日志文件
shut immediate
删除控制文件
rm -rf $ORACLE_BASE/oradata/seker/control*
conn / as sysdba
startup
启动数据库出错 找不到控制文件
创建控制文件
noresetlogs 不重置日志; resetlogs 重置日志(联机日志文件损坏时使用)
重置日志后open时写 alter database open resetlogs;
create controlfile reuse database seker noresetlogs
maxinstances 8
maxloghistory 1
maxlogfiles 16
maxlogmembers 3
maxdatafiles 100
datafile
'/u01/oracle/oradata/seker/system01.dbf',
'/u01/oracle/oradata/seker/undotbs01.dbf',
'/u01/oracle/oradata/seker/sysaux01.dbf'
logfile
group 1 '/u01/oracle/oradata/seker/redo01.log' size 50M,
group 2 '/u01/oracle/oradata/seker/redo02.log' size 50M;
控制文件建立完成后数据库自动启动到open
重建完控制文件后 再建立临时文件(因为之前的数据库有临时文件存在 所以加重用参数reuse)
alter tablespace temp add tempfile '/u01/oracle/oradata/seker/temp01.dbf' reuse;
采用resetlogs方式重建congtrolfile,scn来自于datafile;
采用noresetlogs方式重建controlfile,scn来自于redo
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24756465/viewspace-717775/ ,如需转载,请注明出处,否则将追究法律责任。