Administrator's Guide 11 管理控制文件

jones_2012 贡献于2015-06-13

作者 LUISE  创建于2013-08-06 02:09:00   修改者LUISE  修改于2013-08-10 01:18:00字数18512

文档摘要: 管理控制文件什么是控制文件每个数据库都有一个控制文件,它是一个小的二进制文件,记录着数据库的物理结构。控制文件中包括:数据库名相关的数据文件和重做日志文件的名称和位置数据库创建的时间戳当前的日志序号检查点信息当数据库处于打开状态时,控制文件必须能够被数据库写。没有控制文件,数据库不能被mount,而且恢复也非常困难。控制文件是随数据库的创建而一起创建的。默认在数据库创建时至少要创建一个控制文件的复本。
关键词:

Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian Oracle® Database Administrator's Guide 11g Release 2 (11.2) Part Number E25494-01 1 管理控制文件 1.1 什么是控制文件 每个数据库都有一个控制文件,它是一个小的二进制文件,记录着数据库的物理结构。 控制文件中包括: n 数据库名 n 相关的数据文件和重做日志文件的名称和位置 n 数据库创建的时间戳 n 当前的日志序号 n 检查点信息 当数据库处于打开状态时,控制文件必须能够被数据库写。没有控制文件,数据库不能被mount,而且恢复也非常困难。 控制文件是随数据库的创建而一起创建的。默认在数据库创建时至少要创建一个控制文件的复本。 在一些操作系统上,默认是创建多个复本。在数据库创建的过程中应该创建2个或多个控制文件复本。 如果丢失了控制文件或想改变控制文件中的特定设置,后面也可以创建控制文件。 # 1.查看控制文件的名称和位置 sys@TESTDB11>show parameter control_files NAME TYPE VALUE Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian ------------------------------------ ----------- ------------------------------ control_files string /u01/app/oracle/oradata/TestDB 11/control01.ctl, /u01/app/ora cle/fast_recovery_area/TestDB1 1/control02.ctl # 2.查看控制文件的内容 sys@TESTDB11>alter database backup controlfile to trace; Database altered. # 2.1 下面的预警日志文件中记录的信息,确认生成的跟踪文件的名称和位置 alter database backup controlfile to trace Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/testdb11/TestDB11/trace/TestDB11_ora_915.trc Completed: alter database backup controlfile to trace # 2.2 查看跟踪文件中的内容 *** 2013-05-25 06:33:23.469 -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/fast_recovery_area/TESTDB11/archivelog/2013_05_25/o1_mf_1_1_%u_.arc'; -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/fast_recovery_area/TESTDB11/archivelog/2013_05_25/o1_mf_1_1_%u_.arc'; -- Recovery is required if any of the datafiles are restored backups, -- or if the last shutdown was not normal or immediate. RECOVER DATABASE -- Database can now be opened normally. ALTER DATABASE OPEN; -- Commands to add tempfiles to temporary tablespaces. -- Online tempfiles have complete space information. -- Other tempfiles may require adjustment. ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/TestDB11/temp01.dbf' SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M; -- End of tempfile additions. Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian -- -- Set #2. RESETLOGS case -- -- The following commands will create a new control file and use it -- to open the database. -- Data used by Recovery Manager will be lost. -- The contents of online logs will be lost and all backups will -- be invalidated. Use this only if online logs are damaged. -- After mounting the created controlfile, the following SQL -- statement will place the database in the appropriate -- protection mode: -- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "TESTDB11" RESETLOGS NOARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u01/app/oracle/oradata/TestDB11/redo01.log' SIZE 50M BLOCKSIZE 512, GROUP 2 '/u01/app/oracle/oradata/TestDB11/redo02.log' SIZE 50M BLOCKSIZE 512, GROUP 3 '/u01/app/oracle/oradata/TestDB11/redo03.log' SIZE 50M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/u01/app/oracle/oradata/TestDB11/system01.dbf', '/u01/app/oracle/oradata/TestDB11/sysaux01.dbf', '/u01/app/oracle/oradata/TestDB11/undotbs01.dbf', '/u01/app/oracle/oradata/TestDB11/users01.dbf', '/u01/app/oracle/oradata/TestDB11/example01.dbf' Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian CHARACTER SET AL32UTF8 ; -- Commands to re-create incarnation table -- Below log names MUST be changed to existing filenames on -- disk. Any one log file from each branch can be used to -- re-create incarnation records. -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/fast_recovery_area/TESTDB11/archivelog/2013_05_25/o1_mf_1_1_%u_.arc'; -- ALTER DATABASE REGISTER LOGFILE '/u01/app/oracle/fast_recovery_area/TESTDB11/archivelog/2013_05_25/o1_mf_1_1_%u_.arc'; -- Recovery is required if any of the datafiles are restored backups, -- or if the last shutdown was not normal or immediate. RECOVER DATABASE USING BACKUP CONTROLFILE -- Database can now be opened zeroing the online logs. ALTER DATABASE OPEN RESETLOGS; -- Commands to add tempfiles to temporary tablespaces. -- Online tempfiles have complete space information. -- Other tempfiles may require adjustment. ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/TestDB11/temp01.dbf' SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M; -- End of tempfile additions. -- 1.2 控制文件指导 1.2.1 为控制文件提供文件名 使用初始化参数文件中的CONTROL_FILES初始化参数来指定控制文件名。 Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian 在启动的过程中实例会识别和打开所有列出的文件,在数据库操作期间实例会向所有列出的控制文件写内容并维护这些控制文件。 如果在创建数据库之前没有指定CONTROL_FILE初始化参数: n 如果没用使用OMF,则数据库会使用默认的名称创建控制文件,默认的名称是特定于操作系统的。 n 如果使用OMF,则你设置的开启这项功能的初始化参数会决定文件的名称和位置。 n 如果正在使用ASM,可以将不完全的ASM文件名放到DB_CREATE_FILE_DEST和DB_RECOVERY_FILE_DEST初始化参数中。 然后ASM会自动地在适当的位置创建控制文件。 1.2.2 不同磁盘上的多路控制文件 每个Oracle数据库都至少有2个控制文件,每个存储在不同的物理磁盘上。 如果控制文件因为磁盘错误而被破坏,则实例必须被关闭。 一旦磁盘驱动器被修复,就可以使用另一个磁盘上的完整的拷贝来还原,然后可以重新启动实例。 这种情况下不需要介质恢复。 多路控制文件的行为: n 数据库去写在CONTROL_FILES初始化参数中列出的所有控制文件。 n 数据库在操作的过程中只会读列表中的第1个文件 n 如果在数据库操作过程中任何控制文件不可用了,则实例就会变为不可操作,应该被中断。 多路化控制文件的方法之一,是在存储重做日志组成员的每个磁盘上存储一个控制文件的拷贝。 Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian 这样做可以将所有的控制文件和所有的重做日志在一次磁盘错误中全部丢失的概率降到最低。 # 控制文件的多路化, 将控制文件在与原来已有位置和/disk01,三个位置上进行多路化 # 1.查看控制文件和服务器参数文件的信息 # 1.1 方法1 sys@TESTDB11>show parameter control_files; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_files string /u01/app/oracle/oradata/TestDB 11/control01.ctl, /u01/app/ora cle/fast_recovery_area/TestDB1 1/control02.ctl # 1.2 方法2 sys@TESTDB11>select name from v$controlfile; NAME ------------------------------------------------------------------------------- /u01/app/oracle/oradata/TestDB11/control01.ctl /u01/app/oracle/fast_recovery_area/TestDB11/control02.ctl # 1.3 方法3 sys@TESTDB11>select name, value from v$parameter where UPPER(name) = 'CONTROL_FILES'; NAME VALUE --------------------------------------------------------------------------------------------------------- control_files /u01/app/oracle/oradata/TestDB11/control01.ctl, /u01/app/oracle/fast_recovery_area/TestDB11/control02.ctl # 1.4 查看服务器参数文件 sys@TESTDB11>show parameter spfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string /u01/app/oracle/product/11.2.0 Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian /dbhome_1/dbs/spfileTestDB11.ora # 2.创建目录,修改权限,模拟不同的磁盘 [root@S1011:/]# mkdir /disk01 [root@S1011:/]# mkdir /disk02 [root@S1011:/]# mkdir /disk03 [root@S1011:/]# chmod 777 /disk01 [root@S1011:/]# chmod 777 /disk02 [root@S1011:/]# chmod 777 /disk03 [root@S1011:/]# ls -l | grep disk drwxrwxrwx 2 root root 2 May 25 06:58 disk01 drwxrwxrwx 2 root root 2 May 25 06:58 disk02 drwxrwxrwx 2 root root 2 May 25 06:58 disk03 [oracle@S1011:/export/home/oracle]$ cd /disk01 [oracle@S1011:/disk01]$ mkdir -p oradata/TestDB11 # 3. 修改CONTROL_FILES初始化参数 sys@TESTDB11>alter system set control_files='/u01/app/oracle/oradata/TestDB11/control01.ctl', 2 '/u01/app/oracle/fast_recovery_area/TestDB11/control02.ctl', 3 '/disk01/oradata/TestDB11/control03.ctl' scope=spfile; System altered. # 4. 关闭实例, 使用操作系统命令拷贝控制文件到新的位置 sys@TESTDB11>shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. [oracle@S1011:/disk01/oradata/TestDB11]$ cp /u01/app/oracle/oradata/TestDB11/control01.ctl /disk01/oradata/TestDB11/control03.ctl # 5.启动实例并查看 Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian sys@TESTDB11>startup ORACLE instance started. Total System Global Area 855982080 bytes Fixed Size 2230792 bytes Variable Size 641730040 bytes Database Buffers 209715200 bytes Redo Buffers 2306048 bytes Database mounted. Database opened. sys@TESTDB11>show parameter control_files; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_files string /u01/app/oracle/oradata/TestDB 11/control01.ctl, /u01/app/ora cle/fast_recovery_area/TestDB1 1/control02.ctl, /disk01/orada ta/TestDB11/control03.ctl 1.2.3 备份控制文件 备份控制文件非常重要。最初要备份,在每次改变数据库的物理结构时也要备份。 这种改变包括: n 添加、删除、重命名数据文件。 n 添加、删除表空间、改变表空间的read/write状态 Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian n 添加、删除重做日志文件或组 1.2.4 管理控制文件大小 控制文件大小的主要决定因素是在CREATE DATABASE语句中为 MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY和MAXINSTANCE参数设置的值。 增大这些参数的值,会增加控制文件的大小。 1.3 创建控制文件 1.3.1 创建初始的控制文件 Oracle初始的控制文件是在执行CREATE DATABASE语句时创建的。 控制文件的名称是通由初始化参数文件中CONTROL_FILES参数指定的。 在CONTROL_FILES参数中指定的文件名应该是全路径名,并特定于操作系统的。 CONTROL_FILES = (/u01/oracle/prod/control01.ctl, /u02/oracle/prod/control02.ctl, /u03/oracle/prod/control03.ctl) 如果在数据库创建时,指定的控制文件名称已经存在,则必须在CREATE DATABASE语句上指定CONTROL FILE REUSE子句, 否则会产生错误。 如果旧的控制文件与新的控制文件的SIZE参数指定的不一致,是不能使用REUSE子句的。 Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian 不同的版本、或在控制文件中指定的文件数量不同,控制文件的大小都会改变。 配置参数MAXLOGFILES、LOGMEMBERS、MAXLOGHISTORY、MAXDATAFILES、MAXINSTANCES会影响控制文件大小。 可以在后来改变CONTROL_FILES初始化参数值来添加更多的控制文件、重命名、改变位置。 1.3.2 创建额外的拷贝、重命名或移动控制文件位置 可以拷贝现有的控制文件到新的位置,并将文件的名称添加到控制文件列表中,就可以实现控制文件的多路化。 同样也可以实现文件的重命名和改变位置。 在这2种情况下都要确保控制文件不能被改变,因此在拷贝文件之前先关闭数据库。 为了多路化当前控制文件或重命名控制文件: 1. 关库 2. 使用操作系统命令拷贝控制文件到新的位置 3. 编辑初始化参数文件中的CONTROL_FILES初始化参数,添加新的控制文件名或重命名控制文件。 4. 重新启动数据库。 1.3.3 创建新的控制文件 1.3.3.1 何时需要创建新的控制文件 n 数据库的所有控制文件都已经被永久地破坏了并且你没有控制文件的备份。 Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian n 想改变数据库名,例如,如果数据库名与分布式环境中的另一数据库名冲突。 注意: 可以使用DBNEWID工具更改数据库名和DBID(internal database identifier) n 兼容级别被设置为比10.2.0还早,并且必须对数据库配置的相当的一部分进行改变, 这些配置是与CREATE DATABASE或CREATE CONTROLFILE命令的下列参数相关的: MAXLOGFILES,MAXLOGMEMBERS,MAXLOGHISTORY,MAXINSTANCES。 如果兼容性被设置为10.2.0或更往后,当进行改变时不需要创建新的控制文件。控制文件自动扩展来容纳新的控制信息。 场景: 假设,当你创建数据库时或重新创建控制文件时,设置MAXLOGFILES=3。 而你现在想使用ALTER DATABASE语句给数据库添加第4个重做日志文件组。 如果兼容性是>10.2.0,则控制文件会自动扩展来容纳新的日志文件信息; 如果兼容性< 10.2.0,则ALTER DATABASE命令会产生错误,你必须首先创建新的控制文件。 1.3.3.2 CREATE CONTROLFILE语句 可以使用CREATE CONTROLFILE语句为数据库创建新的控制文件。 下面的语句为prod数据库(该数据库以前不叫这个名字)创建新的控制文件。 CREATE CONTROLFILE SET DATABASE prod LOGFILE GROUP 1 ('/u01/oracle/prod/redo01_01.log', Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian '/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 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; 注意: n CEATE CONTROLFILE语句可能会潜在地破坏特定的数据文件和重做日志文件。 忽略一个文件名可能会引起那个文件中数据的丢失,或丢失对整个数据库的访问。 n 如果在创建新的控制文件之前,数据库已经强制日志开启,而且你希望继续开启, 则需要在CREAT CONTROLFILE子句中指定FORCE LOGGING子句。 1.3.3.3 创建新的控制文件步骤 /* ************************************************************************************************* 1.做一个数据库的所有数据文件和重做日志文件的列表 Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian 1.a 如果遵循了控制文件备份建议,则你已经有了数据文件和重做日志文件的列表,反映了数据库的当前结构。 1.b 如果没有可以通过备份到跟踪文件中的CREATE CONTROLFILE语句来创建新的控制文件。 1.c 如果没有列表,并且控制文件文件已经被损坏了,数据库打不开。此时可以定位一下所有的数据文件和联机重做日志文件。 在步骤5中当新的控制文件被创建时,任何没有被指定的文件都是不可恢复的。 如果你忽略SYSTEM表空间的任何文件,则可能造成不能恢复数据库。 *************************************************************************************************/ SELECT MEMBER FROM V$LOGFILE; SELECT NAME FROM V$DATAFILE; SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files'; --2.使用normal选项关闭数据库, 最后选择IMMEDIATE或ABORT --3.备份所有数据文件和重做日志文件 --4.启动实例到NOMOUNT状态 /* ************************************************************************************************* 5.使用CREATE CONTROLFILE语句创建新的控制文件 5.a 如果除了丢失了控制文件外还丢失了重做日志文件组,则需要指定RESETLOG子句。此时需要从丢失的重做日志恢复(第8步) 5.b 如果给数据库改名,则必须要指定RESETLOGS子句,其它都指定NORESETLOGS *************************************************************************************************/ --6.在脱机的存储设备上保存新的控制文件的拷贝。 --7.编辑CONTROL_FILES初始化参数,让数据库可以可以指出所有在第5步创建的控制文件(不包括备份的控制文件) -- 如果想给数据库重命名,则修改DB_NAME初始化参数的值。 /* ************************************************************************************************* 8.恢复数据库,如果不是在恢复数据库,则跳到第9步。 8.a如果创建控制文件是恢复的一部分,则恢复数据库。 8.b如果新的控制文件是使用NORESETLOGS子句创建的,则可以对数据库进行完全恢复。 8.c如果新的控制文件是使用RESETLOGS子句创建的,则必须指定USING BACKUP CONTROL FILE. 8.d如果丢失了联机或归档的重做日志或数据文件,则要使用恢复这些文件的过程。 *************************************************************************************************/ /* ************************************************************************************************* 9.使用下面的方法打开数据库 9.a 如果不是执行恢复,或在第8步中执行完成的、封闭的数据库恢复,则正常打开数据库,ALTER DATABASE OPEN; Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian 9.b 如果创建控制文件时指定了RESETLOGS子句,则ALTER DATABASE OPEN RESETLOGS; # 练习:所有控制文件丢失,重新创建控制文件 # 0 场景准备 # 0.1 先将控制文件备份到trace sys@TESTDB11>alter database backup controlfile to trace; Database altered. # 0.2 查看预警日志, 确定跟踪文件的名称和位置 alter database backup controlfile to trace Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/testdb11/TestDB11/trace/TestDB11_ora_1698.trc Completed: alter database backup controlfile to trace # 0.3 将控制文件备份一个留着,以防万一。 [oracle@S1011:/export/home/oracle]$ cp /disk01/oradata/TestDB11/control03.ctl /disk02/oradata/TestDB11/control03.ctl # 0.4 关库删除所有的控制文件 sys@TESTDB11>shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. sys@TESTDB11>!rm /u01/app/oracle/oradata/TestDB11/control01.ctl sys@TESTDB11>!rm /u01/app/oracle/fast_recovery_area/TestDB11/control02.ctl sys@TESTDB11>!rm //disk01/oradata/TestDB11/control03.ctl Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian # 0.5 启库发生错误 sys@TESTDB11>startup ORACLE instance started. Total System Global Area 855982080 bytes Fixed Size 2230792 bytes Variable Size 641730040 bytes Database Buffers 209715200 bytes Redo Buffers 2306048 bytes ORA-00205: error in identifying control file, check alert log for more info # 0.6 查看预警日志 Sat May 25 08:06:57 2013 ALTER DATABASE MOUNT ORA-00210: cannot open the specified control file ORA-00202: control file: '/disk01/oradata/TestDB11/control03.ctl' ORA-27037: unable to obtain file status Solaris-AMD64 Error: 2: No such file or directory Additional information: 3 ORA-00210: cannot open the specified control file ORA-00202: control file: '/u01/app/oracle/fast_recovery_area/TestDB11/control02.ctl' ORA-27037: unable to obtain file status Solaris-AMD64 Error: 2: No such file or directory Additional information: 3 ORA-00210: cannot open the specified control file ORA-00202: control file: '/u01/app/oracle/oradata/TestDB11/control01.ctl' ORA-27037: unable to obtain file status Solaris-AMD64 Error: 2: No such file or directory Additional information: 3 ORA-205 signalled during: ALTER DATABASE MOUNT... Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian Sat May 25 08:06:57 2013 Checker run found 2 new persistent data failures # 1. 关库,然后启动到NOMOUNT状态,利用跟踪文件中备份的创建控制文件的脚本,重新创建控制文件 # 1.1 关库 sys@TESTDB11>shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. # 1.2 启动到NOMOUNT状态 idle>startup nomount ORACLE instance started. Total System Global Area 855982080 bytes Fixed Size 2230792 bytes Variable Size 641730040 bytes Database Buffers 209715200 bytes Redo Buffers 2306048 bytes # 1.3 查看跟踪文件,找到创建控制文件的脚本 [oracle@S1011:/disk02/oradata/TestDB11]$ more /u01/app/oracle/diag/rdbms/testdb11/TestDB11/trace/TestDB11_ora_1698.trc # 1.4 执行脚本创建控制文件 idle>CREATE CONTROLFILE REUSE DATABASE "TESTDB11" RESETLOGS NOARCHIVELOG 2 MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 5 MAXINSTANCES 8 6 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u01/app/oracle/oradata/TestDB11/redo01.log' SIZE 50M BLOCKSIZE 512, Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian GROUP 2 '/u01/app/oracle/oradata/TestDB11/redo02.log' SIZE 50M BLOCKSIZE 512, GROUP 3 '/u01/app/oracle/oradata/TestDB11/redo03.log' SIZE 50M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/u01/app/oracle/oradata/TestDB11/system01.dbf', '/u01/app/oracle/oradata/TestDB11/sysaux01.dbf', '/u01/app/oracle/oradata/TestDB11/undotbs01.dbf', '/u01/app/oracle/oradata/TestDB11/users01.dbf', '/u01/app/oracle/oradata/TestDB11/example01.dbf' CHARACTER SET AL32UTF8 19 ; Control file created. # 2 启库 idle>alter database open resetlogs; Database altered. # 2.1 确定一下状态正常 idle>conn / as sysdba Connected. sys@TESTDB11>show parameter control_files; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_files string /u01/app/oracle/oradata/TestDB 11/control01.ctl, /u01/app/ora cle/fast_recovery_area/TestDB1 1/control02.ctl, /disk01/orada ta/TestDB11/control03.ctl Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian 1.4 创建控制文件之后的问题解决 在执行了CREATE CONTROLFILE语句之后,你可能会遇到一些错误。 1.4.1 检查丢失或多余的文件 在创建了新的控制文件并使用它打开数据库后,要检查预警日志来查看数据库是否检测到了数据字典和控制文件间的不一致性。 例如数据字典中的数据文件中包括控制文件中没有列出的文件。 n 如果数据文件在数据字典中存在,但在新的控制文件中不存在,则数据库会在控制文件中以名称MISSINGnnn创建一个占位符, nnn是十进制的文件编号。 MISSINGnnn是控制文件中表示脱机的标志,需要进行介质恢复。 u 如果对应于MISSINGnnn的实际的数据文件是只读的或正常脱机的, 则可以通过将MISSINGnnn改名为实际的数据文件的名称,来使数据文件可以被访问, u 否则不能使用重命名操作来使数据文件可访问,因为数据文件需要进行介质恢复。此时需要删除包含这个数据文件的表空间。 n 相反,如果控制文件中列出的数据文件在数据字典中不存在,则数据库会从新的控制文件中移除对这些文件的引用。 在所有的情况下,数据库都会在预警日志中包含说明信息,会让你知道它发现了什么问题。 1.4.2 处理CREATE CONTROLFILE过程中的错误 Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian 如果在创建新的新的控制文件后试图MOUNT或OPEN数据库时, Oracle发送给你一个错误(ORA-01173、ORA-01176、ORA-01177、ORA-01215、ORA-01216, 最可能的原因就是在CREATE CONTROLFILE语句中遗漏了一个文件或包含了多余的文件。 此时应该还原在步骤3备份的文件,并且从步骤4开始,使用正确的文件名称来重复后面的步骤。 1.5 备份控制文件 使用ALTER DATABASE BACKUP CONTROLFILE语句来备份控制文件。有2种选择: n 将控制文件备份为二进制文件(复制存在的控制文件), # 对控制文件进行备份 sys@TESTDB11>alter database backup controlfile to '/disk01/oradata/TestDB11/control01.bkp'; Database altered. # 查看生成的备份控制文件 [oracle@S1011:/disk01/oradata/TestDB11]$ ls control01.bkp control03.ctl n 产生SQL语句,后面可以用于重建控制文件, ALTER DATABASE BACKUP CONTROLFILE TO TRACE; 这个命令会向跟踪文件写SQL脚本,你可以找到并编辑这些脚本来重建控制文件。 --确定默认的跟踪文件 --方法1,可以查看预警日志,确定跟踪文件的名称和位置。 --方法2,查询diag_info数据字典 Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian sys@TESTDB11>select value from v$diag_info where name = 'Default Trace File'; VALUE -------------------------------------------------------------------------------- /u01/app/oracle/diag/rdbms/testdb11/TestDB11/trace/TestDB11_ora_2246.trc 1 row selected. --方法3,查询初始化参数和相应的数据字典 sys@TESTDB11>show parameter dump; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ background_core_dump string partial background_dump_dest string /u01/app/oracle/diag/rdbms/tes tdb11/TestDB11/trace core_dump_dest string /u01/app/oracle/diag/rdbms/tes tdb11/TestDB11/cdump max_dump_file_size string unlimited shadow_core_dump string partial user_dump_dest string /u01/app/oracle/diag/rdbms/tes tdb11/TestDB11/trace sys@TESTDB11>select sid from v$mystat where rownum = 1; SID ---------- 38 1 row selected. Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian sys@TESTDB11>select sid from v$mystat where rownum = 1; SID ---------- 38 1 row selected. sys@TESTDB11>select p.spid from v$process p, v$session s where p.addr = s.paddr and s.sid = 38; SPID ------------------------ 2246 1 row selected. 1.6 使用当前的拷贝恢复控制文件(单个文件丢失) 1.6.1 使用控制文件拷贝从控制文件损坏中恢复 实操 # 场景:假设CONTROL_FILES初始化参数中列出的一个控制文件损坏了,但控制文件目录仍然可访问,并且你具有多路化的控制文件的拷贝。 # 1. 关库 # 2. 场景模拟, 手工删除/disk01/oradata/TestDB11/control03.ctl [oracle@S1011:/disk01/oradata/TestDB11]$ rm control03.ctl [oracle@S1011:/disk01/oradata/TestDB11]$ ls Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian control01.bkp # 3. 启库报错 sys@TESTDB11>startup ORACLE instance started. Total System Global Area 855982080 bytes Fixed Size 2230792 bytes Variable Size 641730040 bytes Database Buffers 209715200 bytes Redo Buffers 2306048 bytes ORA-00205: error in identifying control file, check alert log for more info # 4. 通过预警日志获取信息, '/disk01/oradata/TestDB11/control03.ctl'文件没找到 Sat May 25 07:44:33 2013 ALTER DATABASE MOUNT ORA-00210: cannot open the specified control file ORA-00202: control file: '/disk01/oradata/TestDB11/control03.ctl' ORA-27037: unable to obtain file status Solaris-AMD64 Error: 2: No such file or directory Additional information: 3 ORA-205 signalled during: ALTER DATABASE MOUNT... Sat May 25 07:44:34 2013 Checker run found 1 new persistent data failures # 5. 关库,复制一个过来 sys@TESTDB11>shutdown immediate ORA-01507: database not mounted sys@TESTDB11>! cp /u01/app/oracle/oradata/TestDB11/control01.ctl /disk01/oradata/TestDB11/control03.ctl Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian # 6. 启库,恢复正常 sys@TESTDB11>startup ORACLE instance started. Total System Global Area 855982080 bytes Fixed Size 2230792 bytes Variable Size 641730040 bytes Database Buffers 209715200 bytes Redo Buffers 2306048 bytes Database mounted. Database opened. sys@TESTDB11>show parameter control_files; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_files string /u01/app/oracle/oradata/TestDB 11/control01.ctl, /u01/app/ora cle/fast_recovery_area/TestDB1 1/control02.ctl, /disk01/orada ta/TestDB11/control03.ctl 1.6.2 使用控制文件拷贝从永久的介质错误中恢复 # 场景:假设CONTROL_FILES初始化参数中列出的一个控制文件因为永久的介质错误不能访问了,并且你具有多路化的控制文件的拷贝。 # 1.关闭实例,使用操作系统命令复制当前的控制文件拷贝到新的、可访问的位置 $ cp /u01/oracle/prod/control01.ctl /u04/oracle/prod/control03.ctl # 2. 编辑初始化参数文件中的CONTROL_FILES参数,将不能访问的位置替换为新的位置 CONTROL_FILES = (/u01/oracle/prod/control01.ctl, /u02/oracle/prod/control02.ctl, Oracle® Database Backup and Recovery User's Guide 11g Release 2 (11.2) Part Number E10642-05 CUUG LuiseDalian /u04/oracle/prod/control03.ctl) # 3. 打开数据库 SQL> STARTUP 如果你有多路化的控制文件,则你可以通过编辑CONTROL_FILES初始化参数使数据库快速启动。 从CONTROL_FILES设置中移除损坏的控制文件,你就可以立即重启数据库。 然后你可以重构损坏的控制文件并在晚些时候关闭数据库,然后在编辑了CONTROL_FILES初始化参数, 包含了恢复的控制文件后,重新启动数据库。 1.7 删除控制文件 ①关库 ②编辑CONTROL_FILES初始化参数,删除旧的控制文件名称。 ③重新启动数据库。 1.8 控制文件数据字典视图 视图 描述 v$DATABASE 显示控制文件中记录的数据库信息 v$CONTROLFILE 显示控制文件的名称 v$CONTROLFILE_RECORD_SECTION 显示控制文件记录部分的信息 V$PARAMETER 显示在CONTROL_FILES初始化参数中指定的控制文件的名称

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档