控制文件是一個跟蹤數據庫的物理組成的二進制文件,在數據庫工作時至少需要一個控制文件,最多可以指定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