Oracle的控制文件起着极其重要的作用,我习惯打的一个比喻是:控制文件是数据库的大脑,而SYSTEM表空间是数据库的心脏。
控制文件的内容
既然控制文件在数据库中扮演着重要的角色,那么控制文件中到底存储了哪些重要信息,在数据库运行过程中又是如何发挥重要作用的呢?
首先从文档上得知控制文件中保存着下列信息:
数据库名称以及数据库创建时间等
所有数据文件和重做日志文件的名称和位置信息
表空间信息
OFFLINE数据文件信息
重做日志及归档日志信息
备份集及备份文件信息、
检查点(checkpoint)及SCN信息等
当然这些只是一个粗略的介绍,由于控制文件是个二进制文件,无法直接打开查阅,但是通过上一章介绍的如下命令可以将控制文件内容转储出来便于查看:
alter session set events 'immediate trace name controlf level 8';
以下是来自Oracle Database 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
--------------------------------------------------------------------------------
/opt/oracle/diag/rdbms/11gtest/11gtest/trace/11gtest_ora_5910.trc
注意:从11g开始,可以通过v$diag_info获得当前会话转储文件的名称。
打开这个跟踪文件现在就可以清晰的看到控制文件的内容,最开始的一段是关于数据库ID、名称等的概要信息:
V10 STYLE FILE HEADER:
Compatibility Vsn = 185597952=0xb100000
Db ID=1478080230=0x5819b6e6, Db Name='11GTEST'
Activation ID=0=0x0
Control Seq=1707=0x6ab, File size=594=0x252
File Number=0, Blksiz=16384, File Type=1 CONTROL
接下来是数据库条目的详细信息,包括了数据库的名称、数据文件及日志文件的数量、数据库的检查点及SCN信息等:
***************************************************************************
DATABASE ENTRY
***************************************************************************
(size = 316, compat size = 316, section max = 1, section in-use = 1,
last-recid= 0, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 1, numrecs = 1)
07/04/2008 13:51:34
DB Name "11GTEST"
Database flags = 0x00404001 0x00001200
Controlfile Creation Timestamp 07/04/2008 13:51:35
Incmplt recovery scn: 0x0000.00000000
Resetlogs scn: 0x0000.00000001 Resetlogs Timestamp 07/04/2008 13:51:34
Prior resetlogs scn: 0x0000.00000000 Prior resetlogs Timestamp 01/01/1988 00:00:00
Redo Version: compatible=0xb100000
#Data files = 4, #Online files = 4
Database checkpoint: Thread=1 scn: 0x0000.0008718a
Threads: #Enabled=1, #Open=1, Head=1, Tail=1
enabled threads: 01000000 00000000 00000000 00000000 00000000 00000000
....
Max log members = 3, Max data members = 1
Arch list: Head=1, Tail=1, Force scn: 0x0000.0007fe17scn: 0x0000.0008ebd0
Activation ID: 1478075366
Controlfile Checkpointed at scn: 0x0000.0008ec14 07/07/2008 08:00:29
thread:0 rba:(0x0.0.0)
enabled threads: 00000000 00000000 00000000 00000000 00000000 00000000
....
再接下来是检查点记录信息,这部分内容包含了Low Cache RBA和On Disk RBA信息,在执行数据库实例恢复时,前者是恢复的起点,后者是恢复的终点,其分别指向了日志文件中的确定地址:
***************************************************************************
CHECKPOINT PROGRESS RECORDS
***************************************************************************
(size = 8180, compat size = 8180, section max = 11, section in-use = 0,
last-recid= 0, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 2, numrecs = 11)
THREAD #1 - status:0x2 flags:0x0 dirty:688
low cache rba:(0x1b.16c04.0) on disk rba:(0x1c.a1c.0)
on disk scn: 0x0000.0008ed61 07/07/2008 08:01:59
resetlogs scn: 0x0000.00000001 07/04/2008 13:51:34
heartbeat: 659440589 mount id: 1478276654