控制文件及其创建
				
		
		
				
				 
		
				
						    今天来学习一下Oracle中一个比较重要的文件类型——控制文件。控制文件主要用于记录Oracle实例中的各个系统信息,例如数据文件、日志、名称、版本、检查点SCN等信息,对于数据库的还原、以及一致性控制都有很重要的作用。
				
		
		
				
				 
		
				
						一、控制文件
				
		
		
				
				 
		
				
						    控制文件是一个小型的二进制文件,可以记录数据库的物理结构。包括:
				
		
		
				
						
						
				 
		
				
						    * 数据库名称
				
		
		
				
						    * 数据文件和联机重做日志文件的名称和位置
				
		
		
				
						    * 数据库创建的时标
				
		
		
				
						    * 当前日志的序号
				
		
		
				
						    * 检验点信息
				
		
		
				
						
						
				 
		
				
						    一般Oracle数据库创建时都会创建至少两个或两个以上的控制文件。
				
		
		
				
						
						
				 
		
				
						
								二、控制文件的标准
						
				
		
		
				
						
						
				 
		
				
						
								    1、控制文件的文件名
						
				
		
		
				
						
						
				 
		
				
						    由CONTROL_FILES参数来指定控制文件名。
				
		
		
				
						    若没有指定该参数,则生成默认文件名,默认文件名在各个操作系统中各不相同
				
		
		
				
						
						
				 
		
				
						
								    2、控制文件的复用
						
				
		
		
				
						
						
				 
		
				
						    一般不同的控制文件都存放在不同的磁盘,当某个磁盘损坏时可以通过在其他磁盘上的控制文件进行复用,不需要任何的介质恢复。
				
		
		
				
						
						
				 
		
				
						    * 找到CONTROL_FILES参数列出所有文件名,将相应内容写入所有控制文件
				
		
		
				
						    * CONTROL_FILES中列出的第一个文件是Oracle数据库运行期间唯一可以读取的文件
				
		
		
				
						    * 数据库运行期间,任何控制文件变为不可用,则实例不能继续运行
				
		
		
				
						
						
				 
		
				
						
								    3、备份控制文件
						
				
		
		
				
						
						
				 
		
				
						    进行以下数据库物理结构改变之后,需要备份控制文件
				
		
		
				
						
						
				 
		
				
						    * 添加、取消或重命名数据文件
				
		
		
				
						    * 添加或撤销表空间,或更改表空间读写状态
				
		
		
				
						    * 添加或取消重做日志文件
				
		
		
				
						
						
				 
		
				
						
								    4、控制文件大小管理
						
				
		
		
				
						
						
				 
		
				
						    MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES参数控制
				
		
		
				
						
						
				 
		
				
						
						
				 
		
				
						
								三、创建控制文件
						
				
		
		
				
						
						
				 
		
				
						
								    1、创建初始化控制文件
						
				
		
		
				
						
						
				 
		
				
						    CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
				
		
		
				
						                     /u02/oracle/prod/control02.ctl,
				
		
		
				
						                     /u03/oracle/prod/control03.ctl)
				
		
		
				
						
						
				 
		
				
						    注:若已经存在与指定名同名的文件,则在CREATE DATABASE语句中指定CONTROLFILE REUSE子句。而且新控制文件与原先控制文件的SIZE必须相同。
				
		
		
				
						
						
				 
		
				
						
								    2、创建额外副本、重命名和重定位控制文件
						
				
		
		
				
						
						
				 
		
				
						    ① 关闭数据库
				
		
		
				
						    ② 在操作系统中复制、修改原控制文件
				
		
		
				
						    ③ 修改CONTROL_FILES,添加或修改新的控制文件名
				
		
		
				
						    ④ 重新启动数据库
				
		
		
				
						
						
				 
		
				
						
								    3、创建新的控制文件
						
				
		
		
				
						
						
				 
		
				
						    以下情况可能会需要重新创建新的控制文件:
				
		
		
				
						
						
				 
		
				
						
								    * 数据库所有控制文件都收到永久性损坏,且无任何备份
						
				
		
		
				
						
								
										    * 希望修改数据库参数的永久性设置,例如:SID、MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES等参数
								
						
				
		
		
				
						
								
										
										
								
						
				 
		
				
						
								
										
												    4、创建语句示例
										
								
						
				
		
		
				
						
								
										
										
								
						
				 
		
				
						
								
										    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')
																								
																						
																				
																		
																		
																				
																						
																								
																										    NORESETLOGS
																								
																						
																				
																		
																		
																				
																						
																								
																										    DATAFILE '/u01/oracle/prod/system01.dbf' SIZE 3M,
																								
																						
																				
																		
																		
																				
																						
																								
																										             '/u01/oracle/prod/rbs01.dbf' SIZE 5M,
																								
																						
																				
																		
																		
																				
																						
																								
																										             '/u01/oracle/prod/users01.dbf' SIZE 5M,
																								
																						
																				
																		
																		
																				
																						
																								
																										             '/u01/oracle/prod/temp01.dbf' SIZE 5M
																								
																						
																				
																		
																		
																				
																						
																								
																										    MAXLOGFILES 50
																								
																						
																				
																		
																		
																				
																						
																								
																										    MAXLOGMEMBERS 3
																								
																						
																				
																		
																		
																				
																						
																								
																										    MAXDATAFILES 200
																								
																						
																				
																		
																		
																				
																						
																								
																										    MAXINSTANCES 6
																								
																						
																				
																		
																		
																				
																						
																								
																										    ARCHIVELOG;
																								
																						
																				
																		
																		
																				
																						
																								
																										
																										
																								
																						
																				 
																		
																				
																						
																								
																										    注:CREATE CONTROLFILE 语句可能会损坏数据文件和联机重做日志文件,省略文件名会引起文件中数据的丢失,或失去访问完整数据库的能力,所以在使用这条语句时需要特别小心。
																								
																						
																				
																		
																		
																				
																						
																								
																										
																										
																								
																						
																				 
																		
																				
																						
																								
																										
																												
																														    5、创建步骤(严格遵守)
																												
																										
																								
																						
																				
																		
																
														
												
										 
								
						
				
		 
		
				
						
						
				 
		
				
						
								    ① 制作包括数据库所有数据文件和联机重做日志文件的列表,可以使用以下SQL列出清单
						
				
		
		
				
						
								        selectmemberfrom v$logfile; --联机重做日志文件
								
										
												        select
										
										
										name
										
										
										from
										 v$datafile; 
										
												--
										
										
												
														数据文件
												
												
														
														
												
										
								
								
										
												        select
										
										
										value
										
										
										from
										 v$parameter 
										where
										
										
										name
										=
										'control_files'
										; 
										
												--
										
										
												
														控制文件
												
										
								
						
				
		 
		
				
						
								    ② 关闭数据库(IMMEDIATE、ABORT)
						
				
		
		
				
						
								    ③ 备份数据库的所有数据文件和联机重做日志文件
						
				
		
		
				
						
								    ④ 启动一个新的实例,但不要装载和打开数据库(NOMOUNT)
						
				
		
		
				
						
								    ⑤ 使用CREATE CONTROLFILE语句创建一个新的控制文件
						
				
		
		
				
						
								        注:若重命名数据库,或联机重做日志文件丢失,可使用RESETLOGS子句
						
				
		
		
				
						
								    ⑥ 在离线存储设备上存储新的控制文件备份
						
				
		
		
				
						
								    ⑦ 编辑CONTROL_FILES初始化参数,若重命名数据库,则编辑DB_NAME参数
						
				
		
		
				
						
								
										    ⑧ 进行数据库恢复(如果需要的话
								
								
										)
								
						
				
		
		
				
						
								        注:若指定RESETLOGS,则需要加入USING BACKUP CONTROL FILE来恢复数据库
						
				
		
		
				
						
								    ⑨ 打开数据库(ALTER DATABASE OPEN;)