控制文件是一个跟踪数据库的物理组成的二进制文件,在数据库工作时至少需要一个控制文件,最多可以指定8个控制文件,在MOUNT时第一次被读取,OPEN之后时刻被使用,控制文件的位置和个数是由参数文件决定的(control_files)如果控制文件丢失,需要还原和恢复,所有控制文件都是镜像关系,读的时候读第一个控制文件(MASTER CONTROL FILE),写的时候所有的控制文件并行写。
控制文件相关数据字典
col name for a50
select * from v$controlfile;
STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- -------------------------------------------------- --- ---------- --------------
+DATA/sundb/controlfile/current.260.974086781 NO 16384 594
+FLASH/sundb/controlfile/current.256.974086781 YES 16384 594
Elapsed: 00:00:00.00
select TYPE,RECORD_SIZE,RECORDS_TOTAL,RECORDS_USED from v$controlfile_record_section;
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
DATABASE 316 1 1
CKPT PROGRESS 8180 11 0
REDO THREAD 256 8 1
REDO LOG 72 16 3
DATAFILE 520 100 5
FILENAME 524 2298 12
TABLESPACE 68 100 6
TEMPORARY FILENAME 56 100 1
RMAN CONFIGURATION 1108 50 0
LOG HISTORY 56 292 49
OFFLINE RANGE 200 163 0
ARCHIVED LOG 584 28 0
BACKUP SET 40 409 0
BACKUP PIECE 736 200 0
BACKUP DATAFILE 200 245 0
BACKUP REDOLOG 76 215 0
DATAFILE COPY 736 200 1
BACKUP CORRUPTION 44 371 0
COPY CORRUPTION 40 409 0
DELETED OBJECT 20 818 1
PROXY COPY 928 246 0
BACKUP SPFILE 124 131 0
DATABASE INCARNATION 56 292 2
FLASHBACK LOG 84 2048 0
RECOVERY DESTINATION 180 1 1
INSTANCE SPACE RESERVATION 28 1055 1
REMOVABLE RECOVERY FILES 32 1000 0
RMAN STATUS 116 141 0
THREAD INSTANCE NAME MAPPING 80 8 8
MTTR 100 8 1
DATAFILE HISTORY 568 57 0
STANDBY DATABASE MATRIX 400 31 31
GUARANTEED RESTORE POINT 212 2048 0
RESTORE POINT 212 2083 0
DATABASE BLOCK CORRUPTION 80 8384 0
ACM OPERATION 104 64 6
FOREIGN ARCHIVED LOG 604 1002 0
37 rows selected.
Elapsed: 00:00:00.02
这里显示的控制文件内容的大小是实际控制文件大小的一半,因为控制文件在写内容的时候是由冗余的,防止因为某些坏块导致控制文件不可用。
查看参数文件中控制文件的信息
show parameter control_files
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string +DATA/sundb/controlfile/curren
t.260.974086781, +FLASH/sundb/
controlfile/current.256.974086
781
我们减少控制文件数量
alter system set control_files='+DATA/sundb/controlfile/current.260.974086781' scope=spfile;
另外,参数值得修改是静态的,需要重启数据库后才能生效
重启实例
shutdown immediate
startup
查询参数文件中控制文件参数
show parameter control_files
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_files string +DATA/sundb/controlfile/current.260.974086781
col name for a50
select * from v$controlfile;
STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- -------------------------------------------------- --- ---------- --------------
+DATA/sundb/controlfile/current.260.974086781 NO 16384 594
Elapsed: 00:00:00.01
在grid用户下查看磁盘组状态
su - grid
sqlplus / as sysasm
select name,state from v$asm_diskgroup;
NAME STATE
------------------------------ -----------
DATA MOUNTED
FLASH MOUNTED
删除相应的控制文件
asmcmd
cd flash/orcl/controlfile
ls
Current.260.975082355
rm -rf Current.260.975082355
增加控制文件
alter system set control_files=
'+DATA/sundb/controlfile/current.260.974086781',
'+DATA/sundb/controlfile/control02.ctl'
scope=spfile;
shut immediate
然后切换到grid用户下对控制文件进行复制(这里需要注意的是,在数据库打开的状态下是无法对控制文件进行备份的)
asmcmd -p
cd data/sundb/controlfile
cp Current.260.974086781 +data/sundb/controlfile/control02.ctl
然后重新启动实例
startup
col name for a50
select * from v$controlfile;
STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- -------------------------------------------------- --- ---------- --------------
+DATA/sundb/controlfile/current.260.974086781 NO 16384 594
+DATA/sundb/controlfile/control02.ctl NO 16384 594
Elapsed: 00:00:00.00