目录
控制文件概念
oracle的控制文件是数据库中及其重要的文件,该文件是一个比较小的二进制文件,它记载了物理数据库的当前状态。每个控制文件只属于一个数据库,但为了防止控制文件丢失,一个数据库一般不止一个控制文件。这些控制文件中的内容完全一样。在数据库装载或打开之前,oracle服务器必须能够访问控制文件。当数据库打开状态下,oracle服务器会随时修改控制文件中的内容。任何用户,包括数据库管理员都不能修改控制文件中的数据。如果由于某种原因oracle服务器不能访问控制文件了,那么数据库就无方正常工作了。如果一个数据库的所有控制文件都出现了问题,那么这个数据库就需要进行恢复,因此,实际的商用数据库至少需要2个控制文件,为了防止磁盘的物理故障,这些控制文件最好放在不同的物理磁盘上,而且最好放在不同的物理磁盘控制器上。
控制文件存放的数据库的信息
数据库名字
数据库标识符。
数据库创建的时间戳
联机重做日志文件的名字和准确位置。当在增加重做做日志文件、删除重做日志文件和修改重做日志文件时,oracle会修改相关的信息。
当前日志的序列号,它是在日志切换时oracle记录的。
校验(检查)点信息。
日志的历史信息
归档日志文件的准确位置和状态。
数据文件的名字和准确位置
表空间的信息
备份的准确位置和状态、
如何限定控制文件的大小
oracle数据库管理员可以间接地决定控制文件的大小。控制文件由两大部分组成:可重用的部分和不可重用的部分。
可重用的部分的大小可用control_file_record_keep_time参数来控制。该参数的默认值为7天,即可重用的部分的内容保留7天,一周之后这部分的内容可能会被覆盖。可重用的部分是供恢复管理器使用的,这部分的内容可以自动扩展。可以使用create database或create controlfile语句中下列关键字来间接影响不可重用的部分的大小。
maxdatafiles
maxinstances
maxlogfiles
maxloghistory
maxlogmembers
读者在create database语句中包含了maaxdatafiles 1024时,oracle就在控制文件中预留1024个记录的空间,因此为了使控制1文件尽可能小,应该在创建数据库时把以上的参数设置得尽可能小,但这样的风险是,一旦数据库需要扩展,而且所需的规模超过了所设置的参数大小,就可能需要重建数据库。在实际工作中是在能够保持控制文件尽可能小的同时,又为数据库今后的扩展留下够用的空间。
查看控制文件的配置
SQL> 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 4
DATAFILE 520 100 12
FILENAME 524 2298 20
TABLESPACE 68 100 13
TEMPORARY FILENAME 56 100 4
RMAN CONFIGURATION 1108 50 0
LOG HISTORY 56 292 15
OFFLINE RANGE 200 163 0
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
ARCHIVED LOG 584 28 9
BACKUP SET 40 409 0
BACKUP PIECE 736 200 0
BACKUP DATAFILE 200 245 0
BACKUP REDOLOG 76 215 0
DATAFILE COPY 736 200 0
BACKUP CORRUPTION 44 371 0
COPY CORRUPTION 40 409 0
DELETED OBJECT 20 818 0
PROXY COPY 928 246 0
BACKUP SPFILE 124 131 0
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
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 0
DATAFILE HISTORY 568 57 0
STANDBY DATABASE MATRIX 400 31 31
GUARANTEED RESTORE POINT 212 2048 0
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
RESTORE POINT 212 2083 0
DATABASE BLOCK CORRUPTION 80 8384 0
ACM OPERATION 104 64 6
FOREIGN ARCHIVED LOG 604 1002 0
已选择37行。
SQL> select type,record_size,records_total,records_used from v$controlfile_record_section where type in ('DATAFILE','TABLESPACE','REDO LOG');
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED
---------------------------- ----------- ------------- ------------
REDO LOG 72 16 4
DATAFILE 520 100 12
TABLESPACE 68 100 13
查看控制文件的位置
select value from v$parameter where name='control_files';
VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/XE/control.dbf
怎么添加和移动控制文件
有两种方式添加和移动控制文件
1.在已经安装oracle中使用正文初始化参数文件添加或移动控制文件步骤如下:
a.利用数据字典v$controlfile来获取现有的控制文件名字
b.正在关闭oracle,如shutdown或shutdown immediate
c.将新的控制文件添加到参数文件的control_files参数中。
d.使用操作系统的复制命令将现有控制文件复制到指定位置。
e,重启oracle 如:startup
f.利用数据字典v$controlfile来验证新的控制文件名是否正确
g.如果有误,重做上述操作,如果无误,删除无用的旧控制文件。
2.使用二进制初始化参数文件
a.利用数据字典v$controlfile来获取现有控制文件名字。
b.修改SPFILE,使用alter system set control_files 命令来改变控制文件的位置
c.正在关闭oracle,如shutdown或shutdown immediate
d.使用操作系统的复制命令将现有控制文件复制到指定位置。
e.重启oracle 如:startup
f. 利用数据字典v$controlfile来验证新的控制文件名是否正确
g.如果有误,重做上述操作,如果无误,删除无用的旧控制文件。
SQL> conn sys as sysdba
已连接。
SQL> select value from v$parameter where name='control_files';
VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/XE/control.dbf
SQL> alter system set control_files='/u01/app/oracle/oradata/XE/control1.ctl' scope=spfile;
系统已更改。
SQL> shutdown
数据库已经关闭。
bash-4.2$ mv control.dbf /backup/
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 413372416 bytes
Fixed Size 2227040 bytes
Variable Size 322962592 bytes
Database Buffers 83886080 bytes
Redo Buffers 4296704 bytes
ORA-00205: ?????????, ??????, ???????
SQL> select value from v$parameter where name='control_files';
VALUE
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/XE/control1.ctl
控制文件的备份
由于控制文件是一个极其重要的文件,除了将1控制文件的多个副本存在不同的硬盘上的保护措施外,数据库的结构变化之后,应立即对控制文件进行备份。
alter database backup controlfile to '/backup/control.bak'