本文所述内容根据Oracle Database Administrator’s Guide 11g Release 2(11.2)--" 管理控制文件 " 章节学习整理而得。
一、控制文件概述
控制文件是一种二进制文件,它记录了数据库的物理结构。在控制文件当中包含以下信息:
1、数据库名称
2、与当前数据库相关联的数据文件和重做日志文件的名称和位置
3、数据库创建的时间
4、当前日志的序号
5、检查点信息
数据库打开时,必须保证数据库能够向控制文件写入信息。如果控制文件丢失或损坏,数据库将无法启动到mount状态,并会给数据库的恢复带来一定的困难。
控制文件是随数据库的创建而创建的。默认情况下,至少会为其自身创建一个副本,在许多操作系统上都会为控制文件创建多个副本。在数据库创建期间,我们可以选择创建两个或更多的控制文件。如果丢失(损坏)或是想修改控制文件中的个别项目,也可以在以后创建它。
二、创建控制文件
在数据库创建之前,通过oracle参数文件中的CONTROL_FILE参数指定控制文件的名字和保存的位置。在数据库startup期间,由实例识别和打开控制文件中包含的所有文件,在数据库操作期间,由实例负责写入信息和维护控制文件。
在创建数据库之前,如果未设置CONTROL_FILE初始化参数,则:
1、如果没有使用OMF,oracle将以默认的名称和路径创建控制文件
2、如果使用了OMF,oracle将根据OMF的设置确定控制文件的名称和路径
3、如果使用Orale的自动存储管理,通过设置DB_CREATE_FILE_DEST和DB_RECOVER_FILE_DEST初始化参数,Oracle ASM将自动在适当的位置创建控制文件。
之前所述的控制文件的创建是在创建数据库(create database)的同时创建控制文件,那么该在何时创建新的控制文件?又该如何创建新的控制文件呢?oracle的官方文档中给出了如下说明:
1、何时创建新的控制文件
a、在控制文件发生永久性的损坏且之前未对控制文件进行备份
b、需要修改控制文件中的某些内容
2、如何创建新的控制文件
a、收集重做日志文件,数据文件,控制文件的信息
select group#,member from v$logfile;
select name,bytes from v$datafile;
select value from v$parameter where name='control_files';
b、关闭数据库
c、备份数据文件和重做日志文件
d、启动实例到nomount状态
e、使用create controlfile语句创建新的控制文件,如下
f、备份新建控制文件
g、修改control_file初始化参数,建立控制文件的多路复用,如果修改了数据库的名字,还需要修改初始化参数文件中的DB_NAME参数
h、以如下方式打开数据库:
alter database open;
alter database open resetlog;
3、控制文件创建后的问题处理
在使用新建的控制文件打开数据库后,应查看告警日志中是否记录了诸如数据字典和控制文件不一致之类的信息。例如:某个数据文件在数据字典中存在但是在控制文件中却没有对应的记录等等。
如果某个文件在数据字典中存在而在控制文件中不存在,数据库将在控制文件中创建一个名为MISSINGnnnn的占位符条目,nnnn是以十进制表示的数据文件编号。控制文件中的MISSINGnnnn标志意味着文件号为nnnn的数据文件被离线且需要介质恢复。
与此相反,如果某个数据文件的信息在控制文件中存在而在数据字典中却不存在,数据库将移除该信息。在上述的两种情况中,我们都可以从数据库的告警日志中得到相关的说明信息,所以说,在使用新建的控制文件打开数据库时,一定不要忘了查看告警日志中是否提示了相关的异常信息。
4、创建控制文件期间的错误处理
当使用新建的控制文件mount和open数据库时,如果出现了ORA错误信息(通常有 ORA-01173, ORA-01176, ORA-01177, ORA-01215, ORA-01216),绝大多数的原因为:在create controlfile语句中遗漏了相关文件的信息或包含了不该有的文件的信息,这时只能重新创建控制文件了。
三、多路复用控制文件
Oracle推荐最好将控制文件分布在不同的物理磁盘上。如果由于磁盘故障导致控制文件发生损坏,与之相关联的实例应被关闭。一旦磁盘被修复,可以通过其他磁盘上的控制文件恢复损坏的控制文件。待恢复完成后实例就可以重新启动,不需要进行介质恢复。
多路复用控制文件是如何进行工作的呢?
1、数据库启动时,仅读取control_file中第一个参数文件的信息
2、数据库打开时,将会向control_file中所有的控制文件更新信息
3、在数据库操作期间,如果任意一个控制文件不可用,实例将无法操作。
四、备份与恢复控制文件
1、何时需要备份控制文件:
a、添加、删除或重命名数据文件
b、添加、删除一个表空间或修改表空间的读写状态 //在添加,删除或重命名的前后都需要进行备份吗?文档没有说明,我认为应该这样。
c、添加、删除重做日志文件或组
2、备份控制文件的方法如下:
a、以二进制文件的形式备份控制文件:alter database backup controlfile to '/u02/backup';
b、以SQL语句的形式备份控制文件便于以后可以重建:alter database backup controlfile to trace;该备份的存放位置可以通过查看alert告警日志获知。
3、恢复控制文件的方法如下:
a、假设control_file参数中的一个参数文件发生损坏,但是控制文件的存放目录仍然可以访问,这时可以:关闭数据库-->cp控制文件另一副本覆盖损坏控制文件--> startup
b、假设control_file参数中的一个参数文件发生发生介质损坏,这时可以:关闭数据库 --> 在新介质上恢复控制文件 --> 修改control_file参数 --> startup
4、删除控制文件
关闭数据库 --> 修改control_file参数(删除对于信息) --> startup,该系列操作不会删除操作系统上的物理文件,需要手动删除。
五、记录控制文件相关信息的数据字典视图
1、v$database:记录数据库中关于控制文件的信息。
例如:
SQL> select controlfile_type,controlfile_created,controlfile_change#,controlfile_time from v$database;
CONTROLFILE_TY CONTROLFILE_CR CONTROLFILE_CHANGE# CONTROLFILE_TI
-------------- -------------- ------------------- --------------
CURRENT 31-1月 -14 1237887 11-3月 -14
2、v$controlfile:显示控制文件的路径和名称。
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
D:\APP\ORACLE\ORADATA\ORCL\CONTROL01.CTL
D:\APP\ORACLE\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL
3、v$controlfile_record_section:该数据字典视图的作用不清楚。
SQL> select * from v$controlfile_record_section;
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
DATABASE 316 1 1 0 0 0
CKPT PROGRESS 8180 11 0 0 0 0
REDO THREAD 256 8 1 0 0 0
REDO LOG 72 16 3 0 0 3
DATAFILE 520 100 6 0 0 40
FILENAME 524 2298 10 0 0 0
TABLESPACE 68 100 7 0 0 3
TEMPORARY FILENAME 56 100 1 0 0 1
RMAN CONFIGURATION 1108 50 0 0 0 0
LOG HISTORY 56 292 13 1 13 13
OFFLINE RANGE 200 163 0 0 0 0
ARCHIVED LOG 584 28 0 0 0 0
BACKUP SET 40 409 0 0 0 0
BACKUP PIECE 736 200 0 0 0 0
BACKUP DATAFILE 200 245 0 0 0 0
BACKUP REDOLOG 76 215 0 0 0 0
DATAFILE COPY 736 200 1 1 1 1
BACKUP CORRUPTION 44 371 0 0 0 0
COPY CORRUPTION 40 409 0 0 0 0
DELETED OBJECT 20 818 1 1 1 1
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
PROXY COPY 928 246 0 0 0 0
BACKUP SPFILE 124 131 0 0 0 0
DATABASE INCARNATION 56 292 2 1 2 2
FLASHBACK LOG 84 2048 0 0 0 0
RECOVERY DESTINATION 180 1 1 0 0 0
INSTANCE SPACE RESERVATION 28 1055 1 0 0 0
REMOVABLE RECOVERY FILES 32 1000 0 0 0 0
RMAN STATUS 116 141 0 0 0 0
THREAD INSTANCE NAME MAPPING 80 8 8 0 0 0
MTTR 100 8 1 0 0 0
DATAFILE HISTORY 568 57 0 0 0 0
STANDBY DATABASE MATRIX 400 31 31 0 0 0
GUARANTEED RESTORE POINT 212 2048 0 0 0 0
RESTORE POINT 212 2083 0 0 0 0
DATABASE BLOCK CORRUPTION 80 8384 0 0 0 0
ACM OPERATION 104 64 6 0 0 0
FOREIGN ARCHIVED LOG 604 1002 0 0 0 0
37 rows selected
4、v$parameter:说明在初始化参数中是由那个参数决定控制文件的名称和路径的。
SQL> select name from v$parameter where name='control_files';
NAME
--------------------------------------------------------------------------------
control_files
一、控制文件概述
控制文件是一种二进制文件,它记录了数据库的物理结构。在控制文件当中包含以下信息:
1、数据库名称
2、与当前数据库相关联的数据文件和重做日志文件的名称和位置
3、数据库创建的时间
4、当前日志的序号
5、检查点信息
数据库打开时,必须保证数据库能够向控制文件写入信息。如果控制文件丢失或损坏,数据库将无法启动到mount状态,并会给数据库的恢复带来一定的困难。
控制文件是随数据库的创建而创建的。默认情况下,至少会为其自身创建一个副本,在许多操作系统上都会为控制文件创建多个副本。在数据库创建期间,我们可以选择创建两个或更多的控制文件。如果丢失(损坏)或是想修改控制文件中的个别项目,也可以在以后创建它。
二、创建控制文件
在数据库创建之前,通过oracle参数文件中的CONTROL_FILE参数指定控制文件的名字和保存的位置。在数据库startup期间,由实例识别和打开控制文件中包含的所有文件,在数据库操作期间,由实例负责写入信息和维护控制文件。
在创建数据库之前,如果未设置CONTROL_FILE初始化参数,则:
1、如果没有使用OMF,oracle将以默认的名称和路径创建控制文件
2、如果使用了OMF,oracle将根据OMF的设置确定控制文件的名称和路径
3、如果使用Orale的自动存储管理,通过设置DB_CREATE_FILE_DEST和DB_RECOVER_FILE_DEST初始化参数,Oracle ASM将自动在适当的位置创建控制文件。
之前所述的控制文件的创建是在创建数据库(create database)的同时创建控制文件,那么该在何时创建新的控制文件?又该如何创建新的控制文件呢?oracle的官方文档中给出了如下说明:
1、何时创建新的控制文件
a、在控制文件发生永久性的损坏且之前未对控制文件进行备份
b、需要修改控制文件中的某些内容
2、如何创建新的控制文件
a、收集重做日志文件,数据文件,控制文件的信息
select group#,member from v$logfile;
select name,bytes from v$datafile;
select value from v$parameter where name='control_files';
b、关闭数据库
c、备份数据文件和重做日志文件
d、启动实例到nomount状态
e、使用create controlfile语句创建新的控制文件,如下
点击(此处)折叠或打开
-
CREATE CONTROLFILE
-
SET DATABASE prod --指定数据库的名字
-
LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log',
-
'/u01/oracle/prod/redo01_02.log'),
-
GROUP 2 ('/u01/oracle/prod/redo02_01.log',
-
'/u01/oracle/prod/redo02_02.log'),
-
GROUP 3 ('/u01/oracle/prod/redo03_01.log',
-
'/u01/oracle/prod/redo03_02.log')
-
RESETLOGS --重置日志xuhao
-
DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
-
'/u01/oracle/prod/rbs01.dbs' SIZE 5M,
-
'/u01/oracle/prod/users01.dbs' SIZE 5M,
-
'/u01/oracle/prod/temp01.dbs' SIZE 5M
-
MAXLOGFILES 50
-
MAXLOGMEMBERS 3
-
MAXLOGHISTORY 400
-
MAXDATAFILES 200
-
MAXINSTANCES 6
- ARCHIVELOG;
g、修改control_file初始化参数,建立控制文件的多路复用,如果修改了数据库的名字,还需要修改初始化参数文件中的DB_NAME参数
h、以如下方式打开数据库:
alter database open;
alter database open resetlog;
3、控制文件创建后的问题处理
在使用新建的控制文件打开数据库后,应查看告警日志中是否记录了诸如数据字典和控制文件不一致之类的信息。例如:某个数据文件在数据字典中存在但是在控制文件中却没有对应的记录等等。
如果某个文件在数据字典中存在而在控制文件中不存在,数据库将在控制文件中创建一个名为MISSINGnnnn的占位符条目,nnnn是以十进制表示的数据文件编号。控制文件中的MISSINGnnnn标志意味着文件号为nnnn的数据文件被离线且需要介质恢复。
与此相反,如果某个数据文件的信息在控制文件中存在而在数据字典中却不存在,数据库将移除该信息。在上述的两种情况中,我们都可以从数据库的告警日志中得到相关的说明信息,所以说,在使用新建的控制文件打开数据库时,一定不要忘了查看告警日志中是否提示了相关的异常信息。
4、创建控制文件期间的错误处理
当使用新建的控制文件mount和open数据库时,如果出现了ORA错误信息(通常有 ORA-01173, ORA-01176, ORA-01177, ORA-01215, ORA-01216),绝大多数的原因为:在create controlfile语句中遗漏了相关文件的信息或包含了不该有的文件的信息,这时只能重新创建控制文件了。
三、多路复用控制文件
Oracle推荐最好将控制文件分布在不同的物理磁盘上。如果由于磁盘故障导致控制文件发生损坏,与之相关联的实例应被关闭。一旦磁盘被修复,可以通过其他磁盘上的控制文件恢复损坏的控制文件。待恢复完成后实例就可以重新启动,不需要进行介质恢复。
多路复用控制文件是如何进行工作的呢?
1、数据库启动时,仅读取control_file中第一个参数文件的信息
2、数据库打开时,将会向control_file中所有的控制文件更新信息
3、在数据库操作期间,如果任意一个控制文件不可用,实例将无法操作。
四、备份与恢复控制文件
1、何时需要备份控制文件:
a、添加、删除或重命名数据文件
b、添加、删除一个表空间或修改表空间的读写状态 //在添加,删除或重命名的前后都需要进行备份吗?文档没有说明,我认为应该这样。
c、添加、删除重做日志文件或组
2、备份控制文件的方法如下:
a、以二进制文件的形式备份控制文件:alter database backup controlfile to '/u02/backup';
b、以SQL语句的形式备份控制文件便于以后可以重建:alter database backup controlfile to trace;该备份的存放位置可以通过查看alert告警日志获知。
3、恢复控制文件的方法如下:
a、假设control_file参数中的一个参数文件发生损坏,但是控制文件的存放目录仍然可以访问,这时可以:关闭数据库-->cp控制文件另一副本覆盖损坏控制文件--> startup
b、假设control_file参数中的一个参数文件发生发生介质损坏,这时可以:关闭数据库 --> 在新介质上恢复控制文件 --> 修改control_file参数 --> startup
4、删除控制文件
关闭数据库 --> 修改control_file参数(删除对于信息) --> startup,该系列操作不会删除操作系统上的物理文件,需要手动删除。
五、记录控制文件相关信息的数据字典视图
1、v$database:记录数据库中关于控制文件的信息。
例如:
SQL> select controlfile_type,controlfile_created,controlfile_change#,controlfile_time from v$database;
CONTROLFILE_TY CONTROLFILE_CR CONTROLFILE_CHANGE# CONTROLFILE_TI
-------------- -------------- ------------------- --------------
CURRENT 31-1月 -14 1237887 11-3月 -14
2、v$controlfile:显示控制文件的路径和名称。
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
D:\APP\ORACLE\ORADATA\ORCL\CONTROL01.CTL
D:\APP\ORACLE\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL
3、v$controlfile_record_section:该数据字典视图的作用不清楚。
SQL> select * from v$controlfile_record_section;
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
DATABASE 316 1 1 0 0 0
CKPT PROGRESS 8180 11 0 0 0 0
REDO THREAD 256 8 1 0 0 0
REDO LOG 72 16 3 0 0 3
DATAFILE 520 100 6 0 0 40
FILENAME 524 2298 10 0 0 0
TABLESPACE 68 100 7 0 0 3
TEMPORARY FILENAME 56 100 1 0 0 1
RMAN CONFIGURATION 1108 50 0 0 0 0
LOG HISTORY 56 292 13 1 13 13
OFFLINE RANGE 200 163 0 0 0 0
ARCHIVED LOG 584 28 0 0 0 0
BACKUP SET 40 409 0 0 0 0
BACKUP PIECE 736 200 0 0 0 0
BACKUP DATAFILE 200 245 0 0 0 0
BACKUP REDOLOG 76 215 0 0 0 0
DATAFILE COPY 736 200 1 1 1 1
BACKUP CORRUPTION 44 371 0 0 0 0
COPY CORRUPTION 40 409 0 0 0 0
DELETED OBJECT 20 818 1 1 1 1
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID
---------------------------- ----------- ------------- ------------ ----------- ---------- ----------
PROXY COPY 928 246 0 0 0 0
BACKUP SPFILE 124 131 0 0 0 0
DATABASE INCARNATION 56 292 2 1 2 2
FLASHBACK LOG 84 2048 0 0 0 0
RECOVERY DESTINATION 180 1 1 0 0 0
INSTANCE SPACE RESERVATION 28 1055 1 0 0 0
REMOVABLE RECOVERY FILES 32 1000 0 0 0 0
RMAN STATUS 116 141 0 0 0 0
THREAD INSTANCE NAME MAPPING 80 8 8 0 0 0
MTTR 100 8 1 0 0 0
DATAFILE HISTORY 568 57 0 0 0 0
STANDBY DATABASE MATRIX 400 31 31 0 0 0
GUARANTEED RESTORE POINT 212 2048 0 0 0 0
RESTORE POINT 212 2083 0 0 0 0
DATABASE BLOCK CORRUPTION 80 8384 0 0 0 0
ACM OPERATION 104 64 6 0 0 0
FOREIGN ARCHIVED LOG 604 1002 0 0 0 0
37 rows selected
4、v$parameter:说明在初始化参数中是由那个参数决定控制文件的名称和路径的。
SQL> select name from v$parameter where name='control_files';
NAME
--------------------------------------------------------------------------------
control_files
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29515435/viewspace-1106595/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29515435/viewspace-1106595/
1427

被折叠的 条评论
为什么被折叠?



