Oracle控制文件详解
一、Oracle控制文件 为二进制文件,初始化大小由CREATEDATABASE指定,可以使用RMAN备份 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等等 在参数文件中描述其位置,个数等等。通常采用分散放开,多路复用的原则。在mount阶段被读取,open阶段一直被使用 维护数据库一致性(数据库启动时会比较控制文件与联机日志文件中的ckpt,即起始scn号,如相等则正常启动,否则需要介质恢复) 一个控制文件只能属于一个数据库 控制文件的任意修改将写入到初始化参数中指定的所有控制文件中,读取时则仅读取第一个控制文件 控制文件只能连接一个数据库,控制文件的大小一般不要超过MB,最多为个,最少一个,互为镜像
控制文件中包含的内容 数据库的名字、ID、创建的时间戳 表空间的名字 联机日志文件、数据文件的位置、个数、名字 联机日志的Sequence号码 检查点的信息 撤销段的开始或结束 归档信息 备份信息 二、查看控制文件的相关信息 1.使用相关视图来查看 V$CONTROLFILE--列出实例中所有控制文件的名字及状态信息 V$PARAMETER--列出所有参数的位置及状态信息 V$CONTROLFILE_RECORD_SECTION--列出控制文件中记录的部分信息 SHOW PARAMETER CONTROL_FILES--列出控制文件的名字、状态、位置等 2.使用STRINGS命令来查看控制文件中的具体内容
3.备份控制文件到平面文件(然后查看控制文件中的具体内容) SQL>alterdatabasebackupcontrolfiletotraceas'/u01/app/oracle/ctl.txt'; Databasealtered. 4.转储控制文件内容(查看控制文件中的具体内容) altersessionsetevents'immediate trace name CONTROLF level 12';level表示级别 或--level1块头的内容--level2数据文件内容--levle 10 |12所有内容 oradebug setmypid oradebugdumpcontrolf 12 SQL>altersystemsetevents'immediate trace name controlf level 10'; System altered. SQL>show parameter user_dump; NAMETYPEVALUE ------------------------------------ ----------- ------------------------------ user_dump_deststring/u01/app/oracle/admin/orcl/udu mp 三、控制文件的管理 规划原则:多路复用,建议存放到不同的磁盘或同一磁盘不同的分区 个数与位置及状态管理: 查看控制文件的状态是否与参数定义中的相吻合,当数据库发生结构修改时,将修改内容同时写入控制文件 备份管理 恢复管理 新建控制文件语句 spfile或pfile都可以实现对控制文件的个数及位置管理 spfile步骤 修改spfile参数中的control_files-- alter system ... scope = spfile | both |memory 一致性关闭数据库 增加或减少控制文件(cpormv) 启动数据库使用spfile 验证结果 pfile步骤 修改pfile参数(vi或vim)修改*.control_files=......这一段 启动数据库使用pfile --演示spfile修改控制文件 SQL>show parameter control_file control_file_record_keep_timeinteger7 control_filesstring/u01/app/oracle/oradata/orcl/c ontrol01.ctl,/u01/app/oracle/ oradata/orcl/control02.ctl,/u 01/app/oracle/oradata/orcl/con trol03.ctl --将控制文件减少到一个 SQL>altersystemsetcontrol_files='/u01/app/oracle/oradata/orcl/control01.ctl'scope=spfile; SQL>shutdownimmediate; Databaseclosed. Databasedismounted. ORACLE instance shut down. SQL>startup mount ORACLE instance started. Total System Global Area251658240 bytes FixedSize1218796 bytes VariableSize88082196 bytes DatabaseBuffers159383552 bytes Redo Buffers2973696 bytes Databasemounted. --再次查看参数文件,已显示为一个 ontrol01.ctl --增加控制文件(在nomount状态下即可修改) SQL>altersystemsetcontrol_files='/u01/app/oracle/oradata/orcl/control01.ctl', 2'/u01/app/oracle/oradata/orcl/control02.ctl',242)"> 3'/u01/app/oracle/oradata/orcl/control03.ctl' 4scope=spfile; --启动时可以看到在实例阶段出现了版本号不一致的问题 SQL>startup force ORA-00214:controlfile'/u01/app/oracle/oradata/orcl/control01.ctl'version 1051 inconsistentwithfile'/u01/app/oracle/oradata/orcl/control02.ctl' version 1049 --处理办法,用版本号高的控制文件覆盖版本号低的控制文件 SQL>host cp/u01/app/oracle/oradata/orcl/control01.ctl/u01/app/oracle/oradata/orcl/control02.ctl; SQL>host cp/u01/app/oracle/oradata/orcl/control01.ctl/u01/app/oracle/oradata/orcl/control03.ctl; SQL>alterdatabasemount; SQL>alterdatabaSEOpen; 对于控制文件丢失的情况下,通过查看参数文件中设置,使用操作系统命令逐个查看这些文件是否存在 SQL>host ls/u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control01.ctl SQL>host ls/u01/app/oracle/oradata/orcl/control02.ctl /u01/app/oracle/oradata/orcl/control02.ctl 查看控制文件所在的目录可用空间及控制文件的大小,建议不要超过100MB SQL>host ls/u01/app/oracle/oradata/orcl/c*.ctl-lh -rw-r----- 1 oracle oinstall 6.8M May 23 10:55 /u01/app/oracle/oradata/orcl/control01.ctl -rw-r----- 1 oracle oinstall 6.8M May 23 10:55 /u01/app/oracle/oradata/orcl/control02.ctl -rw-r----- 1 oracle oinstall 6.8M May 23 10:55 /u01/app/oracle/oradata/orcl/control03.ctl SQL>!df-h FilesystemSizeUsed AvailUse%Mountedon /dev/sda26.4G3.9G2.2G64%/ /dev/sdd16.8G3.7G2.8G58%/u01 /dev/sdc21.2G34M1.1G3%/home /dev/sdc1760M17M704M3%/tmp /dev/sda1456M18M415M5%/boot tmpfs450M0450M0%/dev/shm none450M104K450M1%/var/lib/xenstored 控制文件的备份 热备: alterdatabasebackupcontrolfileto'<dir>';--热备份控制文件 alterdatabasebackupcontrolfiletotraceas'<dir>';--得到建立控制文件的脚本 RMAN: backupcurrentcontrolfile; backupdatabaseincludecurrentcontrolfile; --或者设置RMAN为自动备份 RMAN>configure controlfile autobackupon; --演示备份 --用于归档模式下的恢复,直接覆盖到控制文件 SQL>alterdatabasebackupcontrolfileto'/u01/app/oracle/control.bak'; --用于重建控制文件 SQL>alterdatabasebackupcontrolfiletotraceas'/u01/app/oracle/recreate_controlfile.txt'; --使用RMAN备份 RMAN>connect target/; connectedtotargetdatabase:ORCL(DBID=1242732291) RMAN>backupcurrentcontrolfile;--handle为备份文件的路径 Startingbackupat 23-MAY-10 using targetdatabasecontrolfileinsteadofrecoverycatalog allocated channel:ORA_DISK_1 channel ORA_DISK_1:sid=148 devtype=DISK channel ORA_DISK_1:startingfulldatafile backupset channel ORA_DISK_1:specifying datafile(s)inbackupset includingcurrentcontrolfileinbackupset channel ORA_DISK_1:starting piece 1 at 23-MAY-10 channel ORA_DISK_1:finished piece 1 at 23-MAY-10 piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/ 2010_05_23/o1_mf_ncnnf_TAG20100523T131841_5zkgon2l_.bkp tag=TAG20100523T131841 comment=NONE channel ORA_DISK_1:backupsetcomplete,elapsedtime:00:00:05 Finishedbackupat 23-MAY-10 RMAN>backupdatabaseincludecurrentcontrolfile; channel ORA_DISK_1:sid=141 devtype=DISK input datafile fno=00001name=/u01/app/oracle/oradata/orcl/system01.dbf input datafile fno=00003name=/u01/app/oracle/oradata/orcl/sysaux01.dbf input datafile fno=00005name=/u01/app/oracle/oradata/orcl/example01.dbf input datafile fno=00006name=/u01/app/oracle/oradata/orcl/tbs1_1.dbf input datafile fno=00007name=/u01/app/oracle/oradata/orcl/tbs1_2.dbf input datafile fno=00002name=/u01/app/oracle/oradata/orcl/undotbs01.dbf input datafile fno=00004name=/u01/app/oracle/oradata/orcl/users01.dbf 2010_05_23/o1_mf_nnndf_TAG20100523T132647_5zkh4sk2_.bkp tag=TAG20100523T132647 comment=NONE includingcurrentSPFILEinbackupset 2010_05_23/o1_mf_ncsnf_TAG20100523T132647_5zkhh5st_.bkp tag=TAG20100523T132647 comment=NONE RMAN>showall; RMAN configuration parameters are: CONFIGURE RETENTION POLICYTOREDUNDANCY 1;#default CONFIGUREBACKUPOPTIMIZATIONOFF;#default CONFIGUREDEFAULTDEVICETYPETODISK;#default CONFIGURE CONTROLFILE AUTOBACKUPOFF;#default CONFIGURE CONTROLFILE AUTOBACKUP FORMATFORDEVICETYPEDISKTO'%F';#default CONFIGURE DEVICETYPEDISKPARALLELISM 1BACKUPTYPETOBACKUPSET;#default CONFIGURE DATAFILEBACKUPCOPIESFORDEVICETYPEDISKTO1;#default CONFIGURE ARCHIVELOGBACKUPCOPIESFORDEVICETYPEDISKTO1;#default CONFIGURE MAXSETSIZETOUNLIMITED;#default CONFIGURE ENCRYPTIONFORDATABASEOFF;#default CONFIGURE ENCRYPTION ALGORITHM'AES128';#default CONFIGURE ARCHIVELOG DELETION POLICYTONONE;#default CONFIGURE SNAPSHOT CONTROLFILENAMETO'/u01/app/oracle/10g/dbs/snapcf_orcl.f';#default RMAN>configure controlfile autobackupon;--将控制文件自动备份功能置为on; new RMAN configuration parameters: CONFIGURE CONTROLFILE AUTOBACKUPON; new RMAN configuration parameters are successfully stored 控制文件的恢复管理 控制文件版本不一致的问题 用较新版本的控制文件覆盖旧版本的控制文件 直接修改参数control_file 丢失问题 归档模式下 当归档日志全的时候,先做全备,然后使用备份的控制文件恢复即可 当归档日志不全的时候,然后建立新的控制文件即可 非归档模式下 先做全备,242)"> 数据库处于mount及open状态 执行alterdatabasebackupcontrolfiletotraceas'<dir>';得到建立语句 注意[no]archievelog [no]resetlogs两个参数的区别 版本不一致演示 SQL>startup --控制文件部分丢失的演示,原本有两个控制文件,丢失一个 --处理办法: 1.将存在的控制文件复制到目的路径并更改控制文件名字为正确的控制文件名称 2.修改控控文件参数将丢失的控制文件去掉(一般不建议使用) SQL>altersystemsetcontrol_files=' /u01/app/oracle/oradata/orcl/c ontrol01.ctl',242)"> 2'/u01/app/oracle/oradata/orcl/control02.ctl'scope=spfile; VariableSize75499284 bytes DatabaseBuffers171966464 bytes ORA-00205:errorinidentifying controlfile,checkalertlogformore info [oracle@robinson ~]$ tail-n 100/u01/app/oracle/admin/orcl/bdump/alert_orcl.log .......................... Tue Jun8 19:03:42 2010 starting up 1 sharedserver(s)... MMON startedwithpid=11,OS id=4557 CJQ0 startedwithpid=10,OS id=4555 Tue Jun8 19:03:44 2010 ALTERDATABASEMOUNT ORA-00202:controlfile:'/u01/app/oracle/10g/dbs/ /u01/app/oracle/oradata/orcl/c ontrol01.ctl' ORA-27037:unabletoobtainfilestatus Linux Error:2:Nosuchfileordirectory Additional information:3 Tue Jun8 19:03:47 2010 ORA-205 signalled during:ALTERDATABASEMOUNT... --从警告日志中得知,文件名为c ontrol01.ctl的文件不存在,故将其改为正确的文件名 VariableSize83887892 bytes DatabaseBuffers163577856 bytes DatabaSEOpened. 非归档模式下,当所有的控制文件都丢失,只能重建控制文件来解决 VariableSize79693588 bytes DatabaseBuffers167772160 bytes [oracle@robinson ~]$tail-n 100/u01/app/oracle/admin/orcl/bdump/alert_orcl.log Thu Jul 15 12:13:15 2010 ORA-00202:controlfile:'/u01/app/oracle/oradata/orcl/control01.ctl' --重建控制文件主要有三个需要考虑的是 --搞清各个日志文件的大小及位置 --搞清各个数据文件的位置 --设置正确的字符集 SQL>CREATECONTROLFILE REUSEDATABASE"orcl" NOARCHIVELOG NORESTLOGS 2MAXLOGFILES 16 3MAXLOGMEMBER 3 4MAXDATAFILES 20 5MAXINSTANCES 8 6MAXLOGHISTORY 3 7LOGFILE 8GROUP1( 9'u01/app/oracle/oradata/orcl/redo1.log',242)"> 10'/u01/app/oracle/oradata/orcl/redo01.log' 11)SIZE50M,242)"> 12GROUP2( 13'/u01/app/oracle/oradata/orcl/redo2.log',242)"> 14'/u01/app/oracle/oradata/orcl/redo02.log' 15)SIZE50M,242)"> 16GROUP3( 17'/u01/app/oracle/oradata/orcl/redo3.log',242)"> 18'/u01/app/oracle/oradata/orcl/redo03.log' 19)SIZE100M 20DATAFILE 21'/u01/app/oracle/oradata/orcl/tbs1_2.dbf',242)"> 22'/u01/app/oracle/oradata/orcl/tbs1_1.dbf',242)"> 23'/u01/app/oracle/oradata/orcl/example01.dbf',242)"> 24'/u01/app/oracle/oradata/orcl/users01.dbf',242)"> 25'/u01/app/oracle/oradata/orcl/sysaux01.dbf',242)"> 26'/u01/app/oracle/oradata/orcl/system01.dbf',242)"> 27'/u01/app/oracle/oradata/orcl/undotbs01.dbf' 28CHARACTERSETWE8ISO8859P1; CREATECONTROLFILE REUSEDATABASE"orcl" NOARCHIVELOG NORESTLOGS * ERROR at line 1: ORA-01967:invalidoptionforCREATECONTROLFILE SQL>save/u01/app/oracle/oradata/rectl.sql; Createdfile/u01/app/oracle/oradata/rectl.sql SQL>ho vim/u01/app/oracle/oradata/rectl.sql SQL>@/u01/app/oracle/oradata/rectl.sql Controlfilecreated. --下面给出正确执行后的语句内容 SQL>host cat/u01/app/oracle/oradata/rectl.sql CREATECONTROLFILE REUSEDATABASE"orcl" NOARCHIVELOG NORESETLOGS MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 20 MAXINSTANCES 8 MAXLOGHISTORY 3 LOGFILE GROUP1( '/u01/app/oracle/oradata/orcl/redo01.log' )SIZE50M,242)"> GROUP2( '/u01/app/oracle/oradata/orcl/redo2.log',242)"> '/u01/app/oracle/oradata/orcl/redo02.log' GROUP3( '/u01/app/oracle/oradata/orcl/redo3.log',242)"> '/u01/app/oracle/oradata/orcl/redo03.log' )SIZE100M DATAFILE '/u01/app/oracle/oradata/orcl/tbs1_2.dbf',242)"> '/u01/app/oracle/oradata/orcl/tbs1_1.dbf',242)"> '/u01/app/oracle/oradata/orcl/example01.dbf',242)"> '/u01/app/oracle/oradata/orcl/users01.dbf',242)"> '/u01/app/oracle/oradata/orcl/sysaux01.dbf',242)"> '/u01/app/oracle/oradata/orcl/system01.dbf',242)"> '/u01/app/oracle/oradata/orcl/undotbs01.dbf' CHARACTERSETWE8ISO8859P1 / --将数据库切换到open状态 SQL>select*fromdual; D - X --查看已经新产生了控制文件 SQL>host ls $ORACLE_BASE/oradata/orcl/control*-l--可以看到新增了控制文件control01.ctl和control02.ctl -rw-r----- 1 oracle oinstall 6012928 Jul 15 12:58 /u01/app/oracle/oradata/orcl/control01.ctl -rw------- 1 oracle oinstall 7389184 Jul 15 12:04 /u01/app/oracle/oradata/orcl/control01.ctl.bak -rw-r----- 1 oracle oinstall 6012928 Jul 15 12:58 /u01/app/oracle/oradata/orcl/control02.ctl 归档模式下控制文件全部丢失的处理 --首先将数据库切换到归档模式 SQL>startup mount; SQL>alterdatabasearchivelog; --查看归档的状态 SQL>archiveloglist; DatabaselogmodeArchive Mode Automatic archivalEnabled Archive destinationUSE_DB_RECOVERY_FILE_DEST Oldest onlinelogsequence1 Nextlogsequencetoarchive3 Currentlogsequence3 --备份控制文件 SQL>alterdatabasebackupcontrolfileto'/u01/app/oracle/oradata/orcl/rectl.bak'; SQL>createtabletb_temp(idint,col1 varchar2(20)); Tablecreated. SQL>insertintotb_tempselect1,'Robinson'fromdual; 1 row created. SQL>commit; Commitcomplete. SQL>altersystem switch logfile;--切换日志 SQL>archiveloglist;--日志切换后sequence由变成 Oldest onlinelogsequence2 Nextlogsequencetoarchive4 Currentlogsequence4 --模拟控制文件全部丢失 SQL>show parameter control oradata/orcl/control02.ctl --查看物理控制文件是否存在 SQL>ho ls/u01/app/oracle/oradata/orcl/contr* ls:/u01/app/oracle/oradata/orcl/contr*:Nosuchfileordirectory --建议先对数据库作备份再将备份的控制文件复制到参数文件中指定的位置 SQL>ho cp/u01/app/oracle/oradata/orcl/rectl.bak/u01/app/oracle/oradata/orcl/control01.ctl SQL>ho cp/u01/app/oracle/oradata/orcl/rectl.bak/u01/app/oracle/oradata/orcl/control02.ctl alterdatabaSEOpen ORA-01589:mustuseRESETLOGSorNORESETLOGSoptionfordatabaSEOpen ORA-01109:databasenotopen SQL>alterdatabaSEOpenresetlogs; SQL>select*fromtb_temp;--表成功被恢复 ID COL1 ---------- -------------------- 1 Robinson SQL>droptabletb_temp purge; Tabledropped. SQL>archiveloglist;--日志的sequence号被置为 Nextlogsequencetoarchive1 Currentlogsequence1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |