Oracle控制文件解析

宁愿做一朵篱下的野花,不愿做一朵受恩惠的蔷薇。与其逢迎献媚,偷取别人的欢心,毋宁被众人所鄙弃!---------《莎士比亚》

今朝有心,他朝有路,今日有情,明日有邻!掌握大脑,赢取人生。Oracle控制文件,管理数据库的状态及描述数据库的物理结构,是实现异步通信的重要手段之一,对保证Oracle实例的正常工作具有重要的作用。

一、oracle控制文件内容

控制文件至少包含以下信息:

  1. 数据库名

  2. 数据库标识符(DBID)

  3. 数据库创建时间戳

  4. 数据库字符集

  5. 数据文件信息

  6. 临时文件信息

  7. 在线重做日志信息

  8. 近期的归档日志信息

  9. 表空间信息

  10. RMAN备份文件信息

  11. 检查点信息

  12. 损坏的数据块注册表

  13. 还原点信息

  14. 重设日志SCN

  15. 脏数据块的数量

二、转储控制文件内容

    控制文件是一个二进制文件,为了查看其内容,我们可以通过oracle命令转储出来进行查看(以下命令来自oracle 11g):

SQL> alter session set events 'immediate trace name controlf level 8';

Session altered.

SQL> select value from v$diag_info where name='Default Trace File';

         VALUE

---------------------------

/oracle/app/oracle/diag/rdbms/orcl/ORCL/trace/ORCL_ora_8575.trc

    也可以如下命令进行:

SQL> oradebug setmypid
Statement processed.
SQL> alter session set events 'immediate trace name controlf level 8';

Session altered.

SQL>  oradebug tracefile_name;
/oracle/app/oracle/diag/rdbms/orcl/ORCL/trace/ORCL_ora_7340.trc
SQL> 

    打开跟踪日志文件,查看转储内容:

2.1,查看到数据库ID、名称等内容

2.2,数据库条目的详细信息

    其中包括数据库文件及日志文件数量、检查点等信息:

2.3,检查点计数条目

2.4,补充数据库条目

2.5,redo进程条目

2.6,redo文件条目

2.7,数据文件条目

2.8,其他

    由于内容太多,有兴趣的朋友可以自己转储控制文件进行查看,转储内容后续还有临时文件条目、表空间条目、rman配置条目、闪回日志文件条目、进程实例映射条目等多个记录信息。

三、控制文件操作

3.1,视图信息

    有3种途径查看控制文件信息:

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/oracle/app/data/ORCL/control01.ctl
/oracle/app/oracle/flash_recovery_area/ORCL/control02.ctl

SQL> 
SQL> show parameter control_file;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      /oracle/app/data/ORCL/control0
                                                 1.ctl, /oracle/app/oracle/flas
                                                 h_recovery_area/ORCL/control02
                                                 .ctl
SQL> 
SQL> select name,value from v$parameter where name='control_files';

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
control_files
/oracle/app/data/ORCL/control01.ctl, /oracle/app/oracle/flash_recovery_area/ORCL
/control02.ctl


SQL> 

3.2,控制文件记录内容

3.3,普通查看控制文件内容

a,通过strings查看

[oracle@oracle11g ORCL]$ strings control01.ctl | more
}|{z
QORCL
TAG20150521T193139
~"fn
x44x
u4ORCL
u4ORCL
ORCL
ORCL
/oracle/app/data/ORCL/redo01.log
/oracle/app/data/ORCL/redo03.log
/oracle/app/data/ORCL/redo02.log
/oracle/app/data/ORCL/DT_TPC_DAT.DBF
/oracle/app/data/ORCL/users01.dbf
/oracle/app/data/ORCL/undotbs01.dbf
/oracle/app/data/ORCL/sysaux01.dbf
/oracle/app/data/ORCL/system01.dbf
/oracle/app/data/ORCL/temp01.dbf
/oracle/app/data/ORCL/DT_CAT_DAT.DBF
/oracle/app/data/ORCL/DT_TEST_DAT.DBF
/oracle/app/data/ORCL/redo01.log
/oracle/app/data/ORCL/redo03.log
/oracle/app/data/ORCL/redo02.log
/oracle/app/data/ORCL/DT_TPC_DAT.DBF
/oracle/app/data/ORCL/users01.dbf
/oracle/app/data/ORCL/undotbs01.dbf
/oracle/app/data/ORCL/sysaux01.dbf
/oracle/app/data/ORCL/system01.dbf
/oracle/app/data/ORCL/temp01.dbf
/oracle/app/data/ORCL/DT_CAT_DAT.DBF
/oracle/app/data/ORCL/DT_TEST_DAT.DBF
SYSTEM
SYSAUX
UNDOTBS1
USERS
DT_TPC_DAT
TEMP
DT_CAT_DAT
DT_TEST_DAT
DT_TEST_DAT
SYSTEM
SYSAUX
UNDOTBS1
USERS
DT_TPC_DAT
TEMP
DT_CAT_DAT
DT_TEST_DAT
DT_TEST_DAT
DEVICE TYPE
DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET
CONTROLFILE AUTOBACKUP
DEVICE TYPE
DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET
<v43x
^~4v
<v43x
^~4v
oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2015_05_19/o1_mf_1_131_boqzh8yg_.arc
oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2015_05_19/o1_mf_1_132_boqzh95f_.arc

b,备份出来查看

SQL> alter database backup controlfile to trace as '/oracle/app/control180116.ora';

Database altered.

SQL> 
[oracle@oracle11g app]$ more control180116.ora 
-- The following are current System-scope REDO Log Archival related
-- parameters and can be included in the database initialization file.
--
-- LOG_ARCHIVE_DEST=''
-- LOG_ARCHIVE_DUPLEX_DEST=''
--
-- LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf
--
-- DB_UNIQUE_NAME="ORCL"
--
-- LOG_ARCHIVE_CONFIG='SEND, RECEIVE, NODG_CONFIG'
-- LOG_ARCHIVE_MAX_PROCESSES=4
-- STANDBY_FILE_MANAGEMENT=MANUAL
-- STANDBY_ARCHIVE_DEST=?/dbs/arch
-- FAL_CLIENT=''
-- FAL_SERVER=''
--
-- LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST'
-- LOG_ARCHIVE_DEST_1='MANDATORY NOREOPEN NODELAY'
-- LOG_ARCHIVE_DEST_1='ARCH NOAFFIRM EXPEDITE NOVERIFY SYNC'
-- LOG_ARCHIVE_DEST_1='NOREGISTER NOALTERNATE NODEPENDENCY'
-- LOG_ARCHIVE_DEST_1='NOMAX_FAILURE NOQUOTA_SIZE NOQUOTA_USED NODB_UNIQUE_NAME'
-- LOG_ARCHIVE_DEST_1='VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILES)'
-- LOG_ARCHIVE_DEST_STATE_1=ENABLE

--
-- Below are two sets of SQL statements, each of which creates a new
-- control file and uses it to open the database. The first set opens
-- the database with the NORESETLOGS option and should be used only if
-- the current versions of all online logs are available. The second
-- set opens the database with the RESETLOGS option and should be used
-- if online logs are unavailable.
-- The appropriate set of statements can be copied from the trace into
-- a script file, edited as necessary, and executed when there is a
-- need to re-create the control file.
--
--     Set #1. NORESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- Additional logs may be required for media recovery of offline
-- Use this only if the current versions of all online logs are
-- available.

-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
--  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 300
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/oracle/app/data/ORCL/redo01.log'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 '/oracle/app/data/ORCL/redo02.log'  SIZE 50M BLOCKSIZE 512,

3.4,控制文件个数修改

a,减少控制文件(spfile)

SQL>startup

SQL>alter system set control_files='/opt/oracle/data/orcl/control01.ctl';

SQL>shutdown immediate

SQL>startup

b,增加控制文件个数

SQL>alter system set control_files='/opt/oracle/data/orcl/control01.ctl','/opt/oracle/data/orcl/contorl02.ctl' scope=spfile

    如果出现control file版本不一致的情况,那么把版本高的拷贝给版本低的

    再执行:

SQL>alter database mount;

SQL>alter database open;

3.5,控制文件备份

alter database backup controlfile to '/opt/oracle/data/orcl/control2013.bak';(归档模式下才有用)

alter databae backup controlfile to trace as '';(任何模式下)

    rman备份:

backup current controlfile;

backup database include current controlfile;

四,控制文件问题

4.1,控制文件丢失,尚存在部分控制文件

SQL> show parameter control_files;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /oracle/app/data/ORCL/control0
                                                 1.ctl, /oracle/app/oracle/flas
                                                 h_recovery_area/ORCL/control02
                                                 .ctl
SQL> 

    根据参数显示的控制文件个数,拷贝尚存在的控制文件到不存在的控制文件

4.2,控制文全部丢失

a,非归档模式下

     先全备,然后建立新的控制文件即可

    建立控制文件过程:

  • (1),确认数据文件个数和路径
  • (2),确认重做日志文件个数和路径
  • (3),查看alert_sid.log日志信息,查看数据库信息(做过控制文件信息转出)
  • (4),创建控制文件
SQL>create controlfile reuse database orcl noarchivelog noresetlogs

maxlogfiles 16

maxinstances 8

maxlogmembers 3

maxloghistory 1

datafile

'/u01/oracle/oradata/orcl/example01.dbf',

'/uo1/oracle/oradata/orcl/system01.dbf',

'/u01/oracle/oradata/orcl/sysaux01.dbf',

'u01/oracle/oradata/orcl/undotbs01.dbf'

logfile

group 1 '/u01/oracle/oradata/orcl/redo01.log' size 50M,

group 2 '/u01/oracle/oradata/orcl/redo02.log' size 50M,

group 3 '/u01/oracle/oradata/orcl/redo02.log' size 50M

character set ZHS16GBK

SQL>alter database open;



ERROR at line 1:

ORA-01113:file 1 needs media recovery

ORA-01110:data file 1: 'u01/oracle/oradata/orcl/system01.dbf'



SQL>recover database;

media recovery complete.

SQL>alter database open;

database altered

    注意:如果数据库不能打开,只能通过加隐藏参数来进行数据库打开

    重做控制文件,redo日志文件必须存在

    建立脚本时,需加入noarchivelog,noresetlog

b,归档模式下,控制文件的恢复

SQL>alter database backup controlfile to '/u01/oracle/oradata/ctlbak.ctl';

    控制文件丢失

    恢复之前,先做一起全备

SQL> ho cp /u01/oracle/oradata/ctlbak.ctl /u01/oracle/oradata/orcl/control01.ctl

SQL> ho cp /u01/oracle/oradata/ctlbak.ctl /u01/oracle/oradata/orcl/control02.ctl

SQL> ho cp /u01/oracle/oradata/ctlbak.ctl /u01/oracle/oradata/orcl/control03.ctl



SQL>alter database mount;

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open



SQL>alter database recover database using backup controlfile;

ORA-00279:change 1071696 generated at 09/10/2009 10:09:55 needed for thread 1

ORA-00289:suggestion: ..............

ORA-00280:change 1071696 for thread 1 is in sequence



SQL>alter database recover database using backup controlfile until change 1071696

ORA-00279:change 1071696 generated at 09/10/2009 10:09:55 needed for thread 1

ORA-00289:suggestion: ..............

ORA-00280:change 1071696 for thread 1 is in sequence

    不存在备份,数据库不一致,存在问题

SQL>alter database open resetlogs;

    加入隐藏参数进行问题的解决

SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

SQL>startup force

SQL>alter database open resetlogs;

    如果存在备份

SQL>alter database open resetlogs;

SQL>recover database;



SQL>recover database using backup controlfile

ORA-00279:change 1092015 generated at 09/10/2009 10:30:34 needed for thread 1

ORA-00289:suggestion:

/u01/oracle/flash_recovery_area/ORCL/archivelog/...........

ORA-00280



Specify log:

/u01/oracle/oradata/orcl/redo01.log 

Log applied.

Media recovery complete.

SQL>alter database open resetlogs;

五,概述

    oracle控制文件记录了大量的数据库核心信息,是数据库运行不可缺少的一部分。为保障数据的稳定和安全,学习和了解数据库控制文件的作用及核心极有必要,对于上述内容,如若存在错误和问题,还望指正,谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TPCloud

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值