一、简介
控制文件是一个很小的二进制文件,用于记录数据库的物理结构的当前状态。一个控制文件只属于一个数据库。当数据库的物理结构改变的时候,Oracle会更新控制文件。用户不能编辑控制文件,控制文件的修改由Oracle完成,一旦控制文件损坏,数据库将会宕机。
二、内容
我们可以通过v$controlfile_record_section 视图查看控制文件里包含的内容。
SQL> select * from v$controlfile_record_section;
在数据库有物理结构变化时会记到备份控制文件,以包含新增的物理文件或者其它变更后物理文件的信息
此时可以查询的视图详见:
select name from v$fixed_table;
三. 备份与恢复- 设置事件
alter system set events'immediate trace name controlf level 10';
- 备份
alter database backup controlfile to filename;
- RMAN
RMAN> backup current controlfile;
- 转储
- alter database backup controlfile to trace;
- 使用如下SQL 查询对应的trace 文件:
SELECT D.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' || P.SPID || '.trc' TRACE_FILE_NAME FROM (SELECT P.SPID FROM V$MYSTAT M, V$SESSION S, V$PROCESS P WHERE M.STATISTIC# = 1 AND S.SID = M.SID AND P.ADDR = S.PADDR) P, (SELECT T.INSTANCE FROM V$THREAD T, V$PARAMETER V WHERE V.NAME = 'thread' AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))) I, (SELECT VALUE FROM V$PARAMETER WHERE NAME = 'user_dump_dest') D;
- cat /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_1651.trc
四. 控制文件的重建
- db 启动到mount状态
- 创建控制文件
CREATE CONTROLFILE REUSE DATABASE ORCL NORESETLOGS ARCHIVELOG LOGFILE GROUP 1 '/oradata/orcl/redo01.log', GROUP 2 '/oradata/orcl/redo02.log', GROUP 3 '/oradata/orcl/redo03.log' DATAFILE '/oradata/orcl/sysaux01.dbf', '/oradata/orcl/system01.dbf', '/oradata/orcl/undotbs01.dbf', '/oradata/orcl/users01.dbf' CHARACTER SET ZHS16GBK;
- 开启数据库
使用resetlogs 打开的数据库,就需要对DB做一次备份。
使用resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置联机重做日志内容,这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间差)。SQL>alter database open resetlogs;
- 添加TEMP 表空间
ALTER TABLESPACE TEMP ADD TEMPFILE '/oradata/orcl/temp01.dbf' size 100M;