controlfile

浏览: 77 发布日期: 2016-12-01 分类: oracle

控制文件(CONTROLFILE)
每个数据库都必须有一个控制文件。在装载数据库时,ORACLE会根据初始化参数文件中的control_file参数来定位控制文件;在启动例程时,ORACLE会根据控制文件中的数据库名称和位置,在例程和数据库只见建立关联;打开数据库时,ORACLE会根据控制文件中的数据文件名称和位置、重做日志文件名称和位置,打开这些文件。

一、控制文件概述
控制文件是一个相当小的二进制文件。它含有数据库的结构信息(构成数据库的数据文件、重做日志文件)。在创建数据库时会自动创建控制文件,在数据库发生物理变化时会自动修改控制文件;在出现“检查点”事件时,CKPT进程会自动修改控制文件,以便数据文件和重做日志文件保持同步,并能据此恢复数据库;当数据库处于ARCHIVELOG方式时,ARCn进程会自动用归档日志文件名和日志序列号之类的信息修改控制文件;使用RMAN执行备份操作时,RMAN的备份信息会被记录到控制文件中。
控制文件主要包含以下内容:
数据库创建的时间信息;
数据库的名称,一个控制文件只能管理一个数据库;
表空间名称;
相关的数据文件、重做日志文件的名称、位置、联机或脱机状态信息;
重做日志存档信息;
当前重做日志的序号(log sequence number)。它是一个在重做日志文件切换时被递增和记录的唯一性标识号;
当前的检验点信息;
撤销段的开始与结束信息;
Recovery Manager(RMAN,恢复管理器)的备份信息。RMAN是DBA用来备份恢复数据库的实用工具。

默认情况下,在创建数据库时至少要创建一个控制文件副本。
在数据库还没有关闭时,除了可以将控制文件复制到其他位置外,不能也不可能删除、打开、修改、重命名正在使用的控制文件。

二、管理控制文件的准则
在创建数据库的同时会创建控制文件。在数据库创建之后,如果要改变对控制文件的管理策略,DBA可能需要修改、重新创建控制文件。此外,为了提高数据库的可靠性,DBA还需要经常对控制文件进行备份。
执行针对控制文件的管理工作,需要有ALTER DATABASE系统权限。

(一)提供控制文件的文件名
在创建数据库之前,可以在初始化参数文件中用CONTROL_FILES参数指定该数据库的控制文件名称。如果没有指定CONTROL_FILES参数,但是使用了OMF(ORACLE MANAGEMED FILES,ORACLE可管理文件)特性,即使用了初始化参数DB_CREATE_FILE_DEST或者DB_CREATE_ONLINE_LOG_DEST_n指定了文件夹。那么ORACLE将在这些指定的位置创建一个ORACLE管理的控制文件,其命名有固定的规则;如果既没有指定CONTROL_FILES参数,又没有使用OMF特性,那么ORACLE将根据操作系统的不同而采取相应的默认行为,即在默认的位置创建一个默认名称的控制文件。这个文件不是OMF管理点,以后必须将其添加到初始化参数文件的CONTROL_FILES参数中。
在创建数据库之后,可以调整、修改初始化参数CONTROL_FILES,以便重新指定控制文件名。例程启动时将据此识别和打开所有列出的控制文件,在例程运行过程中将写入并维护这些控制文件。

(二)多路复用控制文件
每个ORACLE数据库都应该至少有两个以上控制文件(最多可以有8个)。并且应该分别存储在不同的、独立的磁盘上进行多路复用。
初始化参数CONTROL_FILES列出了所有多路复用的控制文件名。ORACLE会同时修改所有的多路复用控制文件,但只读取其中的第一个控制文件中的信息。在整个数据库运行期间,如果任何一个控制文件变为不可用,那么例程就不能再继续运行,而且还会终止这个例程。
必须在关闭数据库的情况下复制控制文件,这样才能保证在复制过程中原始的控制文件不会被ORACLE修噶,即这样才能产生相同的控制文件。
多路复用控制文件之后,如果某个控制文件丢失或损坏了,数据库将无法加载。

(三)适当放置控制文件
控制文件的每个副本都应该存储在不同的、独立的磁盘上。如果重做日志文件是多路复用的,有一个很实用的办法,就是将控制文件的副本存储在每个存储有重做日志文件组成员的独立磁盘上。通过在这些地方存储控制文件,可以尽量减少一个磁盘失败导致丢失所有控制文件和所有联机重做日志文件组的风险。

三、管理控制文件的大小
在创建数据库的CREATE DATABSE语句中有一个关于控制文件的子句CONTROLFILE REUSE,其中要用到MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES这个永久参数的值。同样,在创建控制文件的CREATE CONTROLFILE语句中,也要用到这些永久参数。
MAXLOGFILES指定重做日志文件的最大个数
MAXLOGMEMBERS指定重做日志文件中每个组的成员的最大个数
MAXLOGHISTORY指定控制文件可记载的重做日志历史的最大个数
MAXDATAFILES指定数据文件的最大个数
MAXINSTANCES指定可以同时访问数据库例程的最大个数
控制文件是一个二进制文件,按照一定的格式,它被分割成许多部分,分别记录各种类型(type)的信息。每一类信息被称为一个记录文档段,其中各个记录文档段的大小(record_size)或记录总计是固定的,由上述参数决定。
如果在创建数据库时使用MAXDATAFILES参数指定了数据库最多只能具有100个数据文件,那么ORACLE会在控制文件中只为DATAFILE记录文档段预先分配存储100个数据文件信息的空间。因此,添加或重命名数据文件都不会改变数据文件的大小。如果数据库中数据文件的数量超出了100个,就不能在控制文件中保存相应的信息了。实际上,控制文件就是用这种方法来控制数据库的各种物理结构的。
因此,控制文件的大小主要取决于这几个值。增大这些参数的值将增大相关数据库的控制文件的大小。
另外,使用RMAN执行数据库备份时,RMAN的备份信息会被记载到控制文件中,这可能会使控制文件变的较大。初始化参数CONTROL_FILE_RECORD_TIME指定了RMAN备份信息在控制文件中的保留天数,其默认值是7天。该值越大,RMAN备份信息的保留时间越长,控制文件也就会越大。但是,控制文件的大小最终会受限于存储控制文件的那台计算机上的那个磁盘的大小。
如果使用RMAN备份数据库,那么控制文件的大小就会动态变化;否则在不改变永久参数的情况下,控制文件的大小不会发生任何变化。

(四)备份控制文件
为了提高数据库的可靠性,减少由于丢失控制文件而造成的灾难性后果,DBA除了要多路复用控制文件外,还应该定期备份控制文件,尤其是在改变了数据库的物理结构之后都需要重新备份控制文件。
数据库的物理结构改变包括:
添加、取消或重命名数据文件;
添加或删除表空间,或更改表空间的读写状态;
添加或删除重做日志文件或重做日志组。

备份了控制文件后,如果保存控制文件的磁盘坏了,只需要先用STARTUP NOMOUNT命令启动数据库,然后使用ALTER SYSTEM SET control_files=...SCOPE=SPFILE语句将初始化参数文件SPFILE中的contorl_files参数设置成指向备份的控制文件,然后关闭数据库,就可以重新启动数据库了;如果磁盘没有损坏,则只需要将备份的控制文件复制到被损坏的控制文件的位置上,并将文件名改成原来的控制文件名,就可以重新启动数据库了。
假如多路复用的控制文件不相同,如用一个老的、不能反应当前数据库物理结构的控制文件来替换当前一个控制文件,那么在启动数据库时会有错误提示。
备份控制文件需要使用ALTER DATABASE BACKUP CONTROLFILE语句。有两种方法可以进行控制文件的备份。

1.将控制文件备份为二进制文件
将控制文件备份为二进制文件,实际上是在数据库运行期间原封不动的复制当前的控制文件。
ALTER DATABASE BACKUP CONTROLFILE TO 'e:/control01.ctl';将在E盘下产生一个备份的控制文件control01.ctl。如果某个控制文件丢失或损坏,则可以用这个备份的控制文件来替换。

2.将控制文件备份为文本文件
将控制文件备份为文本文件,被称为跟踪备份(backup to trace)。跟踪备份被存放在由初始化参数USER_DUMP_DEST指定的目录中。
跟踪备份的文件名称的格式是_ora_.trc。其中,SID是该数据库的系统标识符;PID是进行备份的操作系统进程ID。
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
跟踪备份本质上不是一个跟踪文件,而是一个SQL脚本。它给出了创建新的控制文件的CREATE CONTROLFILE语句的格式和创建的基本步骤。

(五)创建控制文件
创建控制文件有两种方法:
1.在创建数据库时创建初始控制文件,在参数文件中设置了3个控制文件的存储参数。在创建数据库时,ORACLE会自动创建控制文件,并按控制文件存储参数的设置,对控制文件进行镜像。
2.在创建数据库之后创建新的控制文件,这种情况主要发生在控制文件被损坏、修改了数据库名称或永久参数之后。

(一)创建初始控制文件
当发布CREATE DATABASE语句时,会创建ORACLE数据库的初始控制文件。控制文件的名称是由数据库创建期间使用的初始化参数文件中的CONTROL_FILES参数指定的。CONTROL_FILES参数指定的文件名称应该是完整的,并且这个名称应该因操作系统而异。
如果当前已经存在与指定名称同名的控制文件,那么必须在CREATE DATABASE语句中指定CONTROLFILE REUSE子句。而且,如果原来的那个控制文件的大小与新控制文件的SIZE参数设定值有差异,就不能使用REUSE选项。
在创建控制文件时,需要指定数据文件、重做日志文件的列表信息。
创建数据库之后可以改变初始化参数文件SPFILE中CONTROL_FILES的值,以便添加更多的控制文件或者改变现有控制文件的名称或位置。

(二)创建新的控制文件
在以下情况下必须要创建新的控制文件:
1.所有的控制文件都收到永久性的损坏,并且没有备份过数据库;
2.希望改变某个数据库参数的永久性设置,这些参数最初是在CREATE DATABASE语句中指定的。这些设置包括:MAXLOGFILES,MAXLOGMEMBERS,MAXLOGHISTORY,MAXDATAFILES,MAXINSTANCES;
3.希望改变数据库名称。

(1)所有的控制文件全部损坏,并且备份过数据库
如果控制文件损坏了,就无法进入GUI的SQL*Plus环境中。
在命令提示符中,也只能通过SQLPLUS应用程序进入SQL*Plus环境,将数据库启动到NOMOUNT状态而不能启动到MOUNT状态,因而无法使用数据库,所以必须重新创建控制文件。
如果将以前复制的或备份的二进制控制文件复制到原来控制文件的位置,也会因为控制文件是一个旧的控制文件(即现在的数据文件比原来的控制文件更新),而使数据文件无法通过验证,即使将数据库启动到了MOUNT状态也无法启动到OPEN状态,因而也就无法使用数据库,所以必须重新创建控制文件。
创建新的控制文件的步骤:
1.创建控制文件必须提供正确的数据文件和重做日志文件列表。可以手动的方法凭记忆通过查找操作系统文件来定位构成数据库的所有数据文件和重做日志文件。
LOGFILE
GROUP 1 'C:/ORACLE/PRODUCT/10.1.0/ORADATA/TEST/REDO01.LOG' SIZE 10M,
GROUP 2 'C:/ORACLE/PRODUCT/10.1.0/ORADATA/TEST/REDO02.LOG' SIZE 10M,
GROUP 3 'C:/ORACLE/PRODUCT/10.1.0/ORADATA/TEST/REDO03.LOG' SIZE 10M
--STANDBY LOGFILE
DATAFILE
'C:/ORACLE/PRODUCT/10.1.0/ORADATA/TEST/SYSTEM01.DBF',
'C:/ORACLE/PRODUCT/10.1.0/ORADATA/TEST/UNDOTBS01.DBF',
'C:/ORACLE/PRODUCT/10.1.0/ORADATA/TEST/SYSAUX01.DBF',
'C:/ORACLE/PRODUCT/10.1.0/ORADATA/TEST/USERS01.DBF'
2. 修改初始化参数文件SPFILE中的control_files参数值。假如不想利用初始化参数文件SPFILE中的control_files参数值来创建新的控制文件,也可以修改control_files参数的值。尽管控制文件被破坏了,但仍然可以也只能将数据库启动到NOMOUNT转台,然后修改该参数。
3.关闭数据库。为了使修改后的control_files参数生效,并为了在数据库处于NOMOUNT状态下创建新的控制文件按,必须关闭数据库。
4.重新将数据库启动到NOMOUNT状态。
5.创建新的控制文件。其中,REUSE选项表示允许重用或覆盖现有的控制文件;NORESETLOGS选项表示不重新设置当前的重做日志文件。创建新的控制文件总会重新设置当前的数据文件,所以不能用旧的控制文件来将数据库启动到OPEN状态。
6.将数据库启动到OPEN状态。创建控制文件后,ORACLE会打开控制文件,并将例程启动熬MOUNT状态。为了使用户可以访问数据库,必须再手动的将其启动到OPEN状态。
7.重建临时表空间的临时文件。打开数据库后,重建临时表空间中的临时文件,以便用户可以顺利的进行大型的排序操作。
8.现在就可以使用数据库了。

(2)修改永久参数
与多路复用控制文件原理相同,为了防止重做日志文件成员的损坏,DBA也应该多路复用重做日志成员。但这个成员的数量受到永久参数MAXLOGMEMBERS的限制。
为了修改永久参数MAXLOGFILES,MAXLOGMEMBERS,MAXDATAFILES,MAXINSTANCES,MAXLOGHISTORY,必须重新创建(其实是修改)控制文件。
1.将数据库启动到NOMOUNT状态。
2.创建新的控制文件。
3.将数据库启动到OPEN状态。创建控制文件之后,ORACLE会打开控制文件,并将例程启动到MOUNT状态。
4.重建临时表空间中的临时文件。
5.现在就可以使用数据库了。

(3)修改数据库名称
一般情况下不需要修改数据库的名称。如果修改了,客户机端就必须重新进行网络服务名的配置,才能连接到数据库。
1.修改初始化参数DB_NAME的值。一个控制文件是针对一个数据库的,其中有数据库名称的信息。而数据库的名称是用初始化参数文件SPFILE中的DB_NAME参数来标识的,所以要先修改该文件中的DB_NAME参数。
由于SPFILE是一个二进制文件,不能手动进行编辑,所以必须先将其导出成PFILE。因为不可能覆盖正在使用的SPFILE,所以先将PFILE转换成一个放置在临时位置的SPFILE。
2.关闭数据库。为了用新的SPFILE覆盖原来的SPFILE,为了使修改后的DB_NAME参数生效,为了在数据库处于NOMOUNT状态下创建新的控制文件,必须关闭数据库。
3.用新的SPFILE覆盖了原来的SPFILE。
4.将数据库启动到NOMOUNT状态。
5.创建新的控制文件。其中SET选项表示用DATABASE之后的数据库名称更改现有的数据库名称;RESETLOGS选项表示重新设置当前的重做日志文件。
6.将数据库启动到OPEN状态。因为在创建控制文件时指定了RESETLOGS选项,所以在启动数据库时也必须指定该选项。
7.重建临时表空间中的临时文件。
8.现在就可以使用数据库了。

六、删除控制文件
可以从数据库中删除某个控制文件。
为了安全起见,数据库最好还是应该保留至少两个控制文件,以便多路复用。
1.在数据库处于NOMOUNT状态或OPEN状态时,用ALTER SYSTEM SET control_files=... SCOPE=SPFILE;语句修改数据库初始化参数文件SPFILE中的初始化参数control_files,删除不需要的控制文件的名称。
2.关闭数据库。
3.第一步中的ALTER SYSTEM SET control_files=... SCOPE=SPFILE;语句并不能从磁盘上物理的删除不再使用的控制文件。如果想从磁盘中物理的删除不再需要的控制文件,可以在WINDOW系统山删除或者使用HOST DEL命令。
4.启动数据库。

七、移动控制文件
在创建数据库时可以指定控制文件放置的位置和名称。
既然控制文件是一种物理存储结构,所以就可以将其移动到一个新的位置。创建数据库后,如果需要,可以将控制文件移动到一个新的位置。移动控制文件必须关闭或停止数据库,这是与移动数据文件、重做日志文件的区别,他们可以在数据库处于OPEN状态时移动。
移动控制文件的步骤:
1.在数据库处于NOMOUNT状态或OPEN状态时,用ALTER SYSTEM SET control_files=... SCOPE=SPFILE;语句修改数据库初始化参数文件SPFILE中的初始化参数control_files,指出移动之后的控制文件的位置和名称。
2.关闭数据库。
3.第一步中的ALTER SYSTEM SET control_files=... SCOPE=SPFILE;语句并不能从磁盘中物理的移动文件。如果想从磁盘中物理的移动文件,可以在WINDOWS平台上移动文件或者使用HOST COPY命令。必须做这一步,否则不能将数据库启动到MOUNT和OPEN状态。
4.启动数据库。

返回顶部