oracle数据库通过控制文件保持数据库的完整性,一旦控制文件被破坏数据库将无法启动,因此建议采用多路控制文件或者备份控制文件的方法。
控制文件是数据库建立的时候自动生成的二进制文件,只能通过实例进行修改,如果手动修改的话会造成控制文件与物理信息不符合,从而导致数据库不能正常工作。
控制文件主要包括下面内容:1,数据库名字和标识符2,数据库创建时间戳3,表空间名字(添加或删除表空间时记录)4,数据文件和redo日志文件的名字和位置5,当前redo日志文件序列号(做log switch时记录)6,检查点信息(做checkpoint时记录)7,undo段的起始点和结束点8,redo日志归档信息(日志归档时记录)9,备份信息(由RMAN负责维护)
其中,数据库名称,标识和创建时间在数据库创建时写入;数据文件和重做日志名称和位置在增加,重命名或者删除的时候更新;表空间信息在增加或者删除表空间的时候进行更新。
在初始化参数文件中control_files参数主要来描述控制文件的文件名跟物理路径,如下所示:control_files=("d:oracleoradataoradbcontrol01.ctl")该参数只设置一个,也可以设置多个,如下所示:control_files=("d:oracleoradataoradbcontrol01.ctl"
"e:oracleoradataoradbcontrol02.ctl",
"f:oracleoradataoradbcontrol03.ctl")
这个方法叫做多路控制文件,oracle可以利用这个方法恢复被破坏的控制文件,oracle最多允许设置8个多路控制文件。必须所有的多路控制文件都完整正确数据库才能正常启动,只要丢失一个或者一个内容不正确数据库就不能顺利启动。
对控制文件的管理原则:1.明确控制文件的名称很存储路径参数设置错误将无法打开数据库,数据库打开以后,实例将同时写入所有的控制文件但是只会读取第一个控制文件的内容。2.为数据库创建多路控制文件a.多路控制文件内容必须完全一样,oracle实例同时将内容写入到control_files变量所设置的控制文件中。b.初始化参数control_files中列出的第一个文件是数据库运行期间唯一可读取的控制文件。c.创建,恢复和备份控制文件必须在数据库关闭的状态下运行,这样才能保证操作过程中控制文件不被修改。d.数据库运行期间如果一个控制文件变为不可用,那么实例将不再运行,应该终止这个实例,并对破坏的控制文件进行修复。3.将多路控制文件放在不同的硬盘上4.采用操作系统镜像方式备份控制文件5.手工方式备份控制文件应该及时备份特别是发生了如下的操作的时候:添加删除重命名数据文件添加删除表空间,改变表空间读写状态添加删除重做日志文件如果手工备份不及时的话,就会产生备份的控制文件与正在使用的控制文件不一致,那么利用备份的控制文件启动数据库时会破坏数据库的一致性完整性,甚至不能启动数据库,因此手工备份控制文件要注意及时备份。
创建多路控制文件
利用spfile文件创建多路控制文件1.利用SYS帐号登陆SQL*PLUS,查询一下控制文件信息视图SQL>select name from v$controlfile;结果显示为:NAME
----------------------------------
d:oracleoradataoradb01control01.ctl
e:oracleoradataoradb01control02.ctl
f:oracleoradataoradb01control03.ctl这里列出了控制文件的名称以及位置
2.更改spfile中控制文件的信息,增加一个新的控制文件SQL>alter system set control_files=
'd:oracleoradataoradb01control01.ctl',
'e:oracleoradataoradb01control02.ctl',
'f:oracleoradataoradb01control03.ctl',
'g:oracleoradataoradb01control04.ctl'
scope=spfile结果显示为:系统已经更改。
3.关闭数据库
4.在操作系统中将已有的控制文件复制,修改名称保存到刚才增加控制文件的指定位置。(这步必须做的,否则数据库无法启动)
5.重新启动控制文件,使控制文件改变生效。
利用pfile创建多路控制文件1.利用SYS用户登陆SQL*PLUS,关闭数据库
2.在操作系统中将原有的控制文件复制一份保存到不同的位置上去,比如说将原有的'd:oracleoradataoradb01control01.ctl'控制文件复制一份保存到G盘的oracleoradata目录下去。
3.用文本编辑器打开pfile进行编辑,一般是在ORACLE_BASEadminpfile里面,把新添加的控制文件信息添加进去。
4.重新启动数据库,使控制文件生效。注意在9i中,默认的控制文件是spfile,所以修改了pfile以后启动要:SQL>startup pfile=ORACLE_BASEadminpfileinit.ora
管理控制文件
备份控制文件1.命令:alter database backup controlfile to '........bkp';命令给出的路径一定要实现就建好,否则系统会报错。控制文件丢失或者出错的时候就可以在初始化参数文件中把control_files参数指向备份后的路径,或者是把备份后的控制文件复制到原来的控制文件的位置覆盖掉。2.使用命令:alter database backup controlfile to trace;在ORACLE_BASEadminudump里面生成跟踪文件(使用show parameter user_dump语句可以可以获取跟踪文件存放目录),其中就有创建文件的SQL脚本,可以利用脚本来重建新的控制文件。
问题:1.把备份的文件放到原有的控制文件的位置还是不能用。2.要怎样利用脚本重建新的控制文件?
删除控制文件(删除某一路的控制文件)
spfile文件1.利用SYS帐号登陆SQL*PLUS,查询一下控制文件信息视图SQL>select name from v$controlfile;结果显示为:NAME
----------------------------------
d:oracleoradataoradb01control01.ctl
e:oracleoradataoradb01control02.ctl
f:oracleoradataoradb01control03.ctl
g:oracleoradataoradb01control04.ctl这里列出了控制文件的名称以及位置
2.更改spfile中控制文件的信息,删除一个新的控制文件SQL>alter system set control_files=
'd:oracleoradataoradb01control01.ctl',
'e:oracleoradataoradb01control02.ctl',
'f:oracleoradataoradb01control03.ctl',
scope=spfile结果显示为:系统已经更改。
3.关闭数据库
4.在操作系统中删除控制文件
5.重新启动数据库,使控制文件生效
pfile文件
1.利用SYS用户登陆SQL*PLUS,关闭数据库
2.用文本编辑器打开pfile进行编辑,一般是在ORACLE_BASEadminpfile里面,找到control_files参数把不需要的控制文件删除。
3.在操作系统中删除该控制文件。
4.重新启动数据库,使控制文件生效。
[@more@]