您的位置:首页 > 数据库

模拟控制文件丢失的数据库恢复

2013-04-27 19:04 399 查看

[align=center][b]更多精彩内容尽在
www.leonarding.com[/align][/b]
[align=left]一 数据库版本[/align]
[align=left]SYS@LEO1>showuser[/align]
[align=left]USER is"SYS"[/align]
[align=left]SYS@LEO1>select* from v$version;[/align]
[align=left]BANNER[/align]
[align=left]--------------------------------------------------------------------------------[/align]
[align=left]Oracle Database11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production[/align]
[align=left]PL/SQL Release11.2.0.1.0 - Production[/align]
[align=left]CORE 11.2.0.1.0 Production[/align]
[align=left]TNS for Linux:Version 11.2.0.1.0 - Production[/align]
[align=left]NLSRTL Version11.2.0.1.0 - Production[/align]
[align=left]1.模拟控制文件丢失后的数据库恢复(完全恢复)。[/align]
[align=left]今天的主题是备份与恢复,目的就是保护数据的安全性,众所周知Oracle之所以在市场上占据了50%的份额,与它提供了强大的数据保护措施是分不开的,下面我们就来简捷的介绍一下。[/align]
[align=left]1)物理备份[/align]
[align=left]冷备:这是最原始的一种备份方法,又是最简单可行的,就和copy一份文件一样,直接把库shutdown拷贝一份即可,操作简单,恢复快。当在一个没有专业人员的场合下,告诉他们这么操作是简单可行的,不是不可能只是你没遇到,一切皆有可能哦![/align]
[align=left]热备:Oracle专业备份工具RMAN,这是在8i就有的东东,很强大,可以在很多维度层面进行备份恢复,利用RMAN可以在联机的情况下进行在线备份与恢复。[/align]
[align=left]2)逻辑备份[/align]
[align=left]Exp/Imp:表级 用户级 数据库级进行逻辑备份,逻辑是对于业务层面而言的,例如我只想备份 person employment address表的内容用这种方法将会非常简单,它的亮点更在于备份出来的文件非常好迁移,兼容不同版本[/align]
[align=left]Expdp/Impdp:这是上面2个工具的高级版,可压缩 速度更快 传输表空间的最佳利器,但只能用在服务器端[/align]
[align=left]3)实例恢复[/align]
[align=left]实例是什么,就是内存区+后台进程,那么实例恢复也就是恢复内存数据,例如 突然死机 掉电 强制关库等,在你startup 启动时候后台会自动进行实例恢复。SMON进程负责执行[/align]
[align=left]4)介质恢复[/align]
[align=left]就是恢复硬盘数据,例如 文件被误删除 坏块等,需要手工恢复[/align]
[align=left]在介绍了几种备份恢复方法后,我们进入topic,如何进行控制文件丢失恢复,先看一下数据库各种状态[/align]
[align=left]5)SYS@LEO1>archivelog list 数据库处于非归档状态[/align]
[align=left]Database logmode No Archive Mode[/align]
[align=left]Automaticarchival Disabled[/align]
[align=left]Archivedestination /u02/app/oracle/product/11.2.0/db_1/dbs/arch[/align]
[align=left]Oldest online logsequence 71[/align]
[align=left]Current logsequence 73[/align]
[align=left]我们要先做一个RMAN全备,首先启动归档功能[/align]
[align=left][oracle@leonarding1oracle]$ pwd[/align]
[align=left]/u02/app/oracle[/align]
[align=left][oracle@leonarding1oracle]$ mkdir archdata 创建一个归档日志目录[/align]
[align=left]在ORACLE10g和11g版本,ORACLE默认的日志归档路径为闪回恢复区,但我们也可以修改为自己指定的目录路径[/align]
[align=left]SYS@LEO1>altersystem set log_archive_dest_1='location=/u02/app/oracle/archdata' scope=both;[/align]
[align=left]System altered.[/align]
[align=left]SYS@LEO1>setlinesize 300 pagesize 999[/align]
[align=left]设置的归档日志保存路径已经生效[/align]
[align=left]SYS@LEO1>selectdest_name,destination,status,error from v$archive_dest where dest_name='LOG_ARCHIVE_DEST_1';[/align]
[align=left]DEST_NAME DESTINATION STATUS ERROR[/align]
[align=left]------------------------------------------------------------------------------------------------------------------------------------------[/align]
[align=left]LOG_ARCHIVE_DEST_1 /u02/app/oracle/archdata VALID[/align]
[align=left]启动到mount状态,启动归档模式[/align]
[align=left]SYS@LEO1>shutdownimmediate 关库[/align]
[align=left]Database closed.[/align]
[align=left]Databasedismounted.[/align]
[align=left]ORACLE instanceshut down.[/align]
[align=left]SYS@LEO1>startupmount mount状态[/align]
[align=left]ORACLE instancestarted.[/align]
[align=left]Total SystemGlobal Area 471830528 bytes[/align]
[align=left]Fixed Size 2214456 bytes[/align]
[align=left]Variable Size 150996424 bytes[/align]
[align=left]DatabaseBuffers 310378496 bytes[/align]
[align=left]Redo Buffers 8241152 bytes[/align]
[align=left]Database mounted.[/align]
[align=left]SYS@LEO1>alterdatabase archivelog; 启动归档模式[/align]
[align=left]Database altered.[/align]
[align=left]SYS@LEO1>alterdatabase open; 打开数据库[/align]
[align=left]Database altered.[/align]
[align=left]注:凡是alter database操作都是对控制文件进行修改[/align]
[align=left] 凡是alter system 操作都是对参数文件进行修改[/align]
[align=left]SYS@LEO1>altersystem switch logfile; 手工切换日志(不会触发检查点,自动切换会)[/align]
[align=left]System altered.[/align]
[align=left]SYS@LEO1>selectsequence#,name,archived,applied from v$archived_log; 查看已经归档的日志信息[/align]
[align=left]SEQUENCE# NAME ARC APPLIED[/align]
[align=left]---------------------------------------------------------------------------------------------------------------------------------------------[/align]
[align=left]73 /u02/app/oracle/archdata/1_73_813654649.dbf YES NO[/align]
[align=left]操作系统层面查看,没有问题也生成了[/align]
[align=left][oracle@leonarding1archdata]$ ll[/align]
[align=left]total 5624[/align]
[align=left]-rw-r----- 1oracle asmadmin 5757952 Apr 25 21:28 1_73_813654649.dbf[/align]
[align=left]SYS@LEO1>archivelog list[/align]
[align=left]Database logmode Archive Mode 归档模式[/align]
[align=left]Automaticarchival Enabled 自动归档启动[/align]
[align=left]Archivedestination /u02/app/oracle/archdata 归档日志目录[/align]
[align=left]Oldest online logsequence 72 旧在线日志序号[/align]
[align=left]Next log sequenceto archive 74 下一个归档日志序号[/align]
[align=left]Current logsequence 74 当前日志序号[/align]
[align=left]下面我们就要进行RMAN全库备份了,在此之前还需要设置一下RMAN的环境变量[/align]
[align=left]6)登陆RMAN[/align]
[align=left][oracle@leonarding1archdata]$ rman target sys/oracle[/align]
[align=left]Recovery Manager:Release 11.2.0.1.0 - Production on Fri Apr 26 06:05:24 2013[/align]
[align=left]Copyright (c)1982, 2009, Oracle and/or its affiliates. All rights reserved.[/align]
[align=left]connectedto target database: LEO1 (DBID=1692458681) 只有连接到目标库才能显示环境变量,这些元数据是存放在控制文件中的[/align]
[align=left]显示当前RMAN的环境变量[/align]
[align=left]RMAN> show all;[/align]
[align=left]using targetdatabase control file instead of recovery catalog[/align]
[align=left]RMAN configurationparameters for database with db_unique_name LEO1 are:[/align]
[align=left]CONFIGURERETENTION POLICY TO REDUNDANCY 1; # default[/align]
[align=left]CONFIGURE BACKUPOPTIMIZATION OFF; # default[/align]
[align=left]CONFIGURE DEFAULTDEVICE TYPE TO DISK; # default[/align]
[align=left]CONFIGURECONTROLFILE AUTOBACKUP OFF; # default[/align]
[align=left]CONFIGURECONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default[/align]
[align=left]CONFIGURE DEVICETYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default[/align]
[align=left]CONFIGURE DATAFILEBACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default[/align]
[align=left]CONFIGURE ARCHIVELOGBACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default[/align]
[align=left]CONFIGUREMAXSETSIZE TO UNLIMITED; # default[/align]
[align=left]CONFIGUREENCRYPTION FOR DATABASE OFF; # default[/align]
[align=left]CONFIGUREENCRYPTION ALGORITHM 'AES128'; # default[/align]
[align=left]CONFIGURECOMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ;# default[/align]
[align=left]CONFIGUREARCHIVELOG DELETION POLICY TO NONE; # default[/align]
[align=left]CONFIGURE SNAPSHOTCONTROLFILE NAME TO '/u02/app/oracle/product/11.2.0/db_1/dbs/snapcf_LEO1.f'; #default[/align]
[align=left]创建RMAN默认备份介质保存目录/u02/app/oracle/backup[/align]
[align=left][oracle@leonarding1oracle]$ mkdir backup[/align]
[align=left]RMAN> configure channel device type disk format'/u02/app/oracle/backup/DB_%U'; [/align]
[align=left]new RMANconfiguration parameters:[/align]
[align=left]CONFIGURE CHANNELDEVICE TYPE DISK FORMAT '/u02/app/oracle/backup/DB_%U';[/align]
[align=left]new RMANconfiguration parameters are successfully stored 新man配置参数生效[/align]
[align=left]配置控制文件自动备份并保存到/u02/app/oracle/backup/control目录[/align]
[align=left][oracle@leonarding1backup]$ mkdir control[/align]
[align=left][oracle@leonarding1control]$ pwd[/align]
[align=left]/u02/app/oracle/backup/control[/align]
[align=left]RMAN> configure controlfile autobackup on; 启动控制文件自动备份[/align]
[align=left]new RMANconfiguration parameters:[/align]
[align=left]CONFIGURECONTROLFILE AUTOBACKUP ON;[/align]
[align=left]new RMANconfiguration parameters are successfully stored[/align]
[align=left]RMAN> configure controlfile autobackup format for device type diskto '/u02/app/oracle/backup/control/cf_%F';[/align]
[align=left]new RMANconfiguration parameters: 配置控制文件自动备份目录和格式[/align]
[align=left]CONFIGURECONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO'/u02/app/oracle/backup/control/cf_%F';[/align]
[align=left]new RMANconfiguration parameters are successfully stored[/align]
[align=left]调整备份介质保留期为7[/align]
[align=left]RMAN> configureretention policy to recovery window of 7 days;[/align]
[align=left]new RMANconfiguration parameters:[/align]
[align=left]CONFIGURERETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;[/align]
[align=left]new RMANconfiguration parameters are successfully stored[/align]
[align=left]显示配置后RMAN环境变量[/align]
[align=left]RMAN> show all;[/align]
[align=left][/align]
[align=left]RMAN configurationparameters for database with db_unique_name LEO1 are:[/align]
[align=left]CONFIGURERETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;[/align]
[align=left]CONFIGURE BACKUPOPTIMIZATION OFF; # default[/align]
[align=left]CONFIGURE DEFAULTDEVICE TYPE TO DISK; # default[/align]
[align=left]CONFIGURECONTROLFILE AUTOBACKUP ON;[/align]
[align=left]CONFIGURECONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO'/u02/app/oracle/backup/control/cf_%F';[/align]
[align=left]CONFIGURE DEVICETYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default[/align]
[align=left]CONFIGURE DATAFILEBACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default[/align]
[align=left]CONFIGUREARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default[/align]
[align=left]CONFIGURECHANNEL DEVICE TYPE DISK FORMAT '/u02/app/oracle/backup/DB_%U';[/align]
[align=left]CONFIGUREMAXSETSIZE TO UNLIMITED; # default[/align]
[align=left]CONFIGUREENCRYPTION FOR DATABASE OFF; # default[/align]
[align=left]CONFIGURE ENCRYPTIONALGORITHM 'AES128'; # default[/align]
[align=left]CONFIGURECOMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ;# default[/align]
[align=left]CONFIGUREARCHIVELOG DELETION POLICY TO NONE; # default[/align]
[align=left]CONFIGURE SNAPSHOTCONTROLFILE NAME TO '/u02/app/oracle/product/11.2.0/db_1/dbs/snapcf_LEO1.f'; #default[/align]
[align=left]带颜色的就是我们刚刚修改过的变量[/align]
[align=left]7)启动RMAN的压缩备份功能对数据库进行全备Oracle10g只压缩RMAN元数据11g真正压缩了数据[/align]
[align=left]backup as compressed backupset full database format 命令行中直接指定压缩选项即可[/align]
[align=left]'/u02/app/oracle/backup/full_bk1_%u%p%s.rmn'include current controlfile[/align]
[align=left]plus[/align]
[align=left]archivelog format'/u02/app/oracle/backup/arch_bk1_%u%p%s.rmn' delete all input; 全部备份完之后,删除备份过的旧归档日志[/align]
[align=left]如果我们想使用默认通道默认配置备份一次数据库,同时删除备份过的归档日志,那么命令为[/align]
[align=left]RMAN> backup ascompressed backupset full database include current controlfile plus archivelogdelete all input;[/align]
[align=left]Starting backup at26-APR-13 备份时间[/align]
[align=left]current logarchived[/align]
[align=left]allocated channel:ORA_DISK_1 默认通道磁盘[/align]
[align=left]channelORA_DISK_1: SID=140 device type=DISK[/align]
[align=left]channelORA_DISK_1: starting compressed archived log backup set 先压缩备份的归档日志[/align]
[align=left]channel ORA_DISK_1:specifying archived log(s) in backup set 备份了73 74归档日志[/align]
[align=left]input archived logthread=1 sequence=73 RECID=1 STAMP=813706084[/align]
[align=left]input archived logthread=1 sequence=74 RECID=2 STAMP=813739820[/align]
[align=left]channelORA_DISK_1: starting piece 1 at 26-APR-13 启动备份片[/align]
[align=left]channelORA_DISK_1: finished piece 1 at 26-APR-13 完成备份片[/align]
[align=left]piece handle= /u02/app/oracle/backup/DB_01o81bpd_1_1 tag=TAG20130426T065020 comment=NONE[/align]
[align=left]channelORA_DISK_1: backup set complete, elapsed time: 00:00:01 备份完成用时1秒[/align]
[align=left]channelORA_DISK_1: deleting archived log(s) 删除已备份的归档日志73 74[/align]
[align=left]archived log filename=/u02/app/oracle/archdata/1_73_813654649.dbf RECID=1 STAMP=813706084[/align]
[align=left]archived log filename=/u02/app/oracle/archdata/1_74_813654649.dbf RECID=2 STAMP=813739820[/align]
[align=left]Finished backup at26-APR-13[/align]
[align=left][/align]
[align=left]Starting backup at26-APR-13[/align]
[align=left]using channelORA_DISK_1[/align]
[align=left]channelORA_DISK_1: starting compressed full datafile backup set 再压缩备份数据文件[/align]
[align=left]channelORA_DISK_1: specifying datafile(s) in backup set 指定备份如下数据文件[/align]
[align=left]input datafilefile number=00001 name=/u02/app/oracle/oradata/LEO1/system01.dbf[/align]
[align=left]input datafilefile number=00002 name=/u02/app/oracle/oradata/LEO1/sysaux01.dbf[/align]
[align=left]input datafilefile number=00003 name=/u02/app/oracle/oradata/LEO1/undotbs01.dbf[/align]
[align=left]input datafilefile number=00005 name=/u02/app/oracle/oradata/LEO1/leo1.dbf[/align]
[align=left]input datafilefile number=00004 name=/u02/app/oracle/oradata/LEO1/users01.dbf[/align]
[align=left]channelORA_DISK_1: starting piece 1 at 26-APR-13 启动备份片[/align]
[align=left]channelORA_DISK_1: finished piece 1 at 26-APR-13 完成备份片[/align]
[align=left]piece handle= /u02/app/oracle/backup/DB_02o81bpf_1_1 tag=TAG20130426T065022 comment=NONE[/align]
[align=left]channelORA_DISK_1: backup set complete, elapsed time: 00:01:45备份完成用时1分45秒[/align]
[align=left]channelORA_DISK_1: starting compressed full datafile backup set[/align]
[align=left]channelORA_DISK_1: specifying datafile(s) in backup set[/align]
[align=left]includingcurrent control file in backupset 这个是备份数据文件的同时包含备份控制文件[/align]
[align=left]channelORA_DISK_1: starting piece 1 at 26-APR-13[/align]
[align=left]channel ORA_DISK_1:finished piece 1 at 26-APR-13[/align]
[align=left]piece handle= /u02/app/oracle/backup/DB_03o81bso_1_1 tag=TAG20130426T065022 comment=NONE[/align]
[align=left]channelORA_DISK_1: backup set complete, elapsed time: 00:00:01 备份完成用时1秒[/align]
[align=left]Finished backup at26-APR-13[/align]
[align=left][/align]
[align=left]Starting backup at26-APR-13[/align]
[align=left]current logarchived[/align]
[align=left]using channelORA_DISK_1[/align]
[align=left]channelORA_DISK_1: starting compressed archived log backup set[/align]
[align=left]channelORA_DISK_1: specifying archived log(s) in backup set[/align]
[align=left]input archived logthread=1 sequence=75 RECID=3 STAMP=813739930 备份75归档日志[/align]
[align=left]channel ORA_DISK_1:starting piece 1 at 26-APR-13[/align]
[align=left]channelORA_DISK_1: finished piece 1 at 26-APR-13[/align]
[align=left]piece handle= /u02/app/oracle/backup/DB_04o81bsq_1_1 tag=TAG20130426T065210 comment=NONE[/align]
[align=left]channelORA_DISK_1: backup set complete, elapsed time: 00:00:01 备份完成用时1秒[/align]
[align=left]channelORA_DISK_1: deleting archived log(s) 删除已备份的归档日志75[/align]
[align=left]archived log filename=/u02/app/oracle/archdata/1_75_813654649.dbf RECID=3 STAMP=813739930[/align]
[align=left]Finished backup at26-APR-13[/align]
[align=left][/align]
[align=left]Starting ControlFile and SPFILE Autobackup at 26-APR-13 启动控制文件和参数文件自动备份[/align]
[align=left]piece handle= /u02/app/oracle/backup/control/cf_c-1692458681-20130426-00 comment=NONE[/align]
[align=left]Finished ControlFile and SPFILE Autobackup at 26-APR-13 完成自动备份[/align]
[align=left]在操作系统上都可以找到对应的备份集并且已经删除了备份过的旧归档日志[/align]
[align=left][oracle@leonarding1backup]$ pwd[/align]
[align=left]/u02/app/oracle/backup[/align]
[align=left][oracle@leonarding1backup]$ ll[/align]
[align=left]total 249468[/align]
[align=left]drwxr-xr-x 2oracle oinstall 4096 Apr 26 06:52control[/align]
[align=left]-rw-r-----1 oracle asmadmin 2790912 Apr 26 06:50DB_01o81bpd_1_1[/align]
[align=left]-rw-r-----1 oracle asmadmin 251551744 Apr 26 06:52 DB_02o81bpf_1_1[/align]
[align=left]-rw-r-----1 oracle asmadmin 1097728 Apr 26 06:52DB_03o81bso_1_1[/align]
[align=left]-rw-r-----1 oracle asmadmin 7168 Apr 26 06:52DB_04o81bsq_1_1[/align]
[align=left][oracle@leonarding1 backup]$ cd control/[/align]
[align=left][oracle@leonarding1control]$ ll[/align]
[align=left]total 9600[/align]
[align=left]-rw-r-----1 oracle asmadmin 9830400 Apr 26 06:52 cf_c-1692458681-20130426-00[/align]
[align=left][oracle@leonarding1archdata]$ pwd[/align]
[align=left]/u02/app/oracle/archdata[/align]
[align=left][oracle@leonarding1archdata]$ ll 归档日志全没有了[/align]
[align=left]total 0[/align]
[align=left]新的归档日志是从76号开始,75号之前都已经备份并删除[/align]
[align=left]SYS@LEO1>archivelog list[/align]
[align=left]Database logmode Archive Mode[/align]
[align=left]Automaticarchival Enabled[/align]
[align=left]Archivedestination /u02/app/oracle/archdata[/align]
[align=left]Oldest online logsequence 74[/align]
[align=left]Next log sequenceto archive 76[/align]
[align=left]Current logsequence 76[/align]
[align=left]到此我们的备份准备已经完成,稍微休息一下:)坐车上班班[/align]
[align=left]8)SYS@LEO1>selectstatus from v$instance; 检查数据库状态[/align]
[align=left]STATUS[/align]
[align=left]------------[/align]
[align=left]OPEN[/align]
[align=left]LEO1@LEO1>showparameter control_files 我们检查一下控制文件个数[/align]
[align=left]NAME TYPE VALUE[/align]
[align=left]----------------------------------------------- ------------------------------[/align]
[align=left]control_files string /u02/app/oracle/oradata/LEO1/control01.ctl, [/align]
[align=left]/u02/app/oracle/oradata/LEO1/control02.ctl[/align]
[align=left][oracle@leonarding1LEO1]$ ll 操作系统上也是2个没有问题[/align]
[align=left]total 2618136[/align]
[align=left]-rw-r----- 1oracle asmadmin 9748480 Apr 26 09:01control01.ctl[/align]
[align=left]-rw-r----- 1oracle asmadmin 9748480 Apr 26 09:01control02.ctl[/align]
[align=left]一般控制文件丢失大多数都是被误删除了,用rm 命令删除control01.ctl文件[/align]
[align=left][oracle@leonarding1trace]$ pwd [/align]
[align=left]/u02/app/oracle/diag/rdbms/leo1/LEO1/trace[/align]
[align=left][oracle@leonarding1 trace]$ tail -10falert_LEO1.log 实时监控告警日志看看有什么变化[/align]
[align=left]Fri Apr 2606:50:20 2013[/align]
[align=left]Thread 1 advancedto log sequence 75 (LGWR switch)[/align]
[align=left] Current log# 3 seq# 75 mem# 0:/u02/app/oracle/oradata/LEO1/redo03.log[/align]
[align=left]Archived Log entry2 added for thread 1 sequence 74 ID 0x64e13fb9 dest 1:[/align]
[align=left]Fri Apr 2606:52:10 2013[/align]
[align=left]ALTER SYSTEMARCHIVE LOG[/align]
[align=left]Fri Apr 2606:52:10 2013[/align]
[align=left]Thread 1 advancedto log sequence 76 (LGWR switch)[/align]
[align=left] Current log# 1 seq# 76 mem# 0:/u02/app/oracle/oradata/LEO1/redo01.log[/align]
[align=left]Archived Log entry3 added for thread 1 sequence 75 ID 0x64e13fb9 dest 1:[/align]
[align=left][oracle@leonarding1LEO1]$ rm control01.ctl 模拟control01文件丢失的场景[/align]
[align=left]LEO1@LEO1>createtablespace test datafile '/u02/app/oracle/oradata/LEO1/test01.dbf' size 10mautoextend off;[/align]
[align=left]create tablespacetest datafile '/u02/app/oracle/oradata/LEO1/test01.dbf' size 10m autoextend off[/align]
[align=left]l 我们创建一个表空间,此时突然报错[/align]
[align=left]ERROR at line 1:[/align]
[align=left]ORA-00210:cannot open the specified control file 不能打开指定的控制文件[/align]
[align=left]ORA-00202:control file: '/u02/app/oracle/oradata/LEO1/control01.ctl' 控制文件丢失[/align]
[align=left]ORA-27041:unable to open file 无法打开这个文件[/align]
[align=left]Linux-x86_64Error: 2: No such file or directory 找不到这个文件,好恐怖bless,赶紧看看alert日志[/align]
[align=left]Additionalinformation: 3[/align]
[align=left]Alert_LEO1.log日志内容[/align]
[align=left]create tablespacetest datafile '/u02/app/oracle/oradata/LEO1/test01.dbf' size 10m autoextend off[/align]
[align=left]ORA-210 signalledduring: create tablespace test datafile'/u02/app/oracle/oradata/LEO1/test01.dbf' size 10m autoextend off...[/align]
[align=left]Fri Apr 2609:14:15 2013[/align]
[align=left]Errors in file/u02/app/oracle/diag/rdbms/leo1/LEO1/trace/LEO1_m000_7975.trc:[/align]
[align=left]ORA-00210: cannotopen the specified control file[/align]
[align=left]ORA-00202: controlfile: '/u02/app/oracle/oradata/LEO1/control01.ctl'[/align]
[align=left]ORA-27041: unableto open file[/align]
[align=left]Linux-x86_64Error: 2: No such file or directory[/align]
[align=left]Additionalinformation: 3[/align]
[align=left]是不是和上面报的错误信息一样啊,由于是我们自己搞的鬼,所以我们明白是怎么回事,如果在生产库上就要首先查看日志信息进行分析啦,好了现在我们开始修复吧->start on[/align]
[align=left]思路:我们首先要清楚oracle为了保证其稳定性,控制文件都是多路复用的,如果使用dbca安装10g默认有3个控制文件 11g有两个,我们删除了其中一个,可能有的朋友会说,我们镜像出来一个控制文件不就好了么,没错思路很正确,但前提是要关闭数据库使所有的SCN号一致,也有可能你会遇上无法立即关闭的情况,木有办法只能强制关闭了,[/align]
[align=left]SYS@LEO1>shutdownimmediate[/align]
[align=left]ORA-00210: cannotopen the specified control file[/align]
[align=left]ORA-00202: controlfile: '/u02/app/oracle/oradata/LEO1/control01.ctl'[/align]
[align=left]ORA-27041: unableto open file[/align]
[align=left]Linux-x86_64Error: 2: No such file or directory[/align]
[align=left]Additionalinformation: 3[/align]
[align=left]SYS@LEO1>shutdownabort[/align]
[align=left]ORACLE instanceshut down.[/align]
[align=left][oracle@leonarding1LEO1]$ cp control02.ctl control01.ctl 使用完好的控制文件恢复被删除的控制文件[/align]
[align=left][oracle@leonarding1LEO1]$ ll[/align]
[align=left]total 2618136[/align]
[align=left]-rw-r----- 1oracle oinstall 9748480 Apr 26 09:34control01.ctl[/align]
[align=left]-rw-r----- 1oracle asmadmin 9748480 Apr 26 09:28control02.ctl[/align]
[align=left]SYS@LEO1>startupmount 启动到mount状态没有报错,说明我们恢复成功了[/align]
[align=left]ORACLE instancestarted.[/align]
[align=left]Total SystemGlobal Area 471830528 bytes[/align]
[align=left]Fixed Size 2214456 bytes[/align]
[align=left]Variable Size 150996424 bytes[/align]
[align=left]DatabaseBuffers 310378496 bytes[/align]
[align=left]Redo Buffers 8241152 bytes[/align]
[align=left]Database mounted.[/align]
[align=left]SYS@LEO1>selectcheckpoint_change# from v$database; 数据库全局SCN号,放在控制文件里[/align]
[align=left]CHECKPOINT_CHANGE#[/align]
[align=left]--------------------------------[/align]
[align=left] 909922[/align]
[align=left]SYS@LEO1>selectname,checkpoint_change# from v$datafile; 数据文件SCN号,放在控制文件里[/align]
[align=left]NAME CHECKPOINT_CHANGE#[/align]
[align=left]----------------------------------------------------------------------------------------------------------------------------------------------[/align]
[align=left]/u02/app/oracle/oradata/LEO1/system01.dbf 909922[/align]
[align=left]/u02/app/oracle/oradata/LEO1/sysaux01.dbf 909922[/align]
[align=left]/u02/app/oracle/oradata/LEO1/undotbs01.dbf 909922[/align]
[align=left]/u02/app/oracle/oradata/LEO1/users01.dbf 909922[/align]
[align=left]/u02/app/oracle/oradata/LEO1/leo1.dbf 909922[/align]
[align=left]SYS@LEO1>selectname,checkpoint_change# from v$datafile_header; 数据文件头SCN号,放在数据文件头里[/align]
[align=left]NAME CHECKPOINT_CHANGE#[/align]
[align=left]----------------------------------------------------------------------------------------------------------------------------------------------[/align]
[align=left]/u02/app/oracle/oradata/LEO1/system01.dbf 909922[/align]
[align=left]/u02/app/oracle/oradata/LEO1/sysaux01.dbf 909922[/align]
[align=left]/u02/app/oracle/oradata/LEO1/undotbs01.dbf 909922[/align]
[align=left]/u02/app/oracle/oradata/LEO1/users01.dbf 909922[/align]
[align=left]/u02/app/oracle/oradata/LEO1/leo1.dbf 909922[/align]
[align=left]SYS@LEO1>selectname,last_change# from v$datafile; 数据文件结束SCN号,放在控制文件里[/align]
[align=left]NAME LAST_CHANGE#[/align]
[align=left]----------------------------------------------------------------------------------------------------------------------------------------------[/align]
[align=left]/u02/app/oracle/oradata/LEO1/system01.dbf[/align]
[align=left]/u02/app/oracle/oradata/LEO1/sysaux01.dbf[/align]
[align=left]/u02/app/oracle/oradata/LEO1/undotbs01.dbf[/align]
[align=left]/u02/app/oracle/oradata/LEO1/users01.dbf[/align]
[align=left]/u02/app/oracle/oradata/LEO1/leo1.dbf[/align]
[align=left]这个LAST_CHANGE为NULL,我们要知道Oracle做不做实例恢复就是看这个SCN是否为NULL[/align]
[align=left]如果数据库非正常关闭值为NULL[/align]
[align=left]如果数据库正常关闭值为xxxxxx[/align]
[align=left]特例:数据库为open状态时LAST_CHANGE也为NULL,但现在我们是mount状态[/align]
[align=left]SYS@LEO1>selectstatus from v$instance;[/align]
[align=left]STATUS[/align]
[align=left]------------[/align]
[align=left]MOUNTED[/align]
[align=left]我们在开打数据库的一霎那就会启动实例恢复,看alert日志即可[/align]
[align=left]SYS@LEO1>alterdatabase open;[/align]
[align=left]Database altered.[/align]
[align=left]Alert日志内容[/align]
[align=left]Fri Apr 2609:50:08 2013[/align]
[align=left]alter databaseopen 打开数据库[/align]
[align=left]Beginningcrash recovery of 1 threads 进行实例恢复[/align]
[align=left]parallel recovery started with 2 processes 启动2个恢复进程[/align]
[align=left]Started redo scan[/align]
[align=left]Completed redoscan[/align]
[align=left]read 30 KB redo, 31 data blocks need recovery[/align]
[align=left]Started redoapplication at[/align]
[align=left]Thread 1: logseq 76, block 23074[/align]
[align=left]Recovery of OnlineRedo Log: Thread 1 Group 1 Seq 76 Reading mem 0 从76号日志为起始位置[/align]
[align=left] Mem# 0:/u02/app/oracle/oradata/LEO1/redo01.log 应用redo日志进行恢复[/align]
[align=left]Completed redoapplication of 0.02MB[/align]
[align=left]Completed crashrecovery at[/align]
[align=left]Thread 1: logseq 76, block 23134, scn 934394 一直应用到redo最后一个SCN号[/align]
[align=left]31 data blocks read, 31 data blocks written,30 redo k-bytes read 恢复了31个数据块,读取了30K redo[/align]
[align=left]Fri Apr 2609:50:08 2013[/align]
[align=left]LGWR: STARTINGARCH PROCESSES 启动归档进程进行归档[/align]
[align=left]Fri Apr 2609:50:08 2013[/align]
[align=left]ARC0 started withpid=22, OS id=8396 [/align]
[align=left]ARC0: Archivalstarted[/align]
[align=left]LGWR: STARTINGARCH PROCESSES COMPLETE[/align]
[align=left]ARC0: STARTINGARCH PROCESSES[/align]
[align=left]Fri Apr 2609:50:09 2013[/align]
[align=left]ARC1 started withpid=23, OS id=8400 [/align]
[align=left]Fri Apr 2609:50:09 2013[/align]
[align=left]ARC2 started withpid=24, OS id=8404 [/align]
[align=left]ARC1: Archivalstarted[/align]
[align=left]Fri Apr 2609:50:09 2013[/align]
[align=left]ARC3 started withpid=25, OS id=8408 [/align]
[align=left]ARC2: Archivalstarted[/align]
[align=left]ARC1: Becoming the'no FAL' ARCH[/align]
[align=left]ARC1: Becoming the'no SRL' ARCH[/align]
[align=left]ARC2: Becoming theheartbeat ARCH[/align]
[align=left]Thread 1 advancedto log sequence 77 (thread open)[/align]
[align=left]Thread 1 opened atlog sequence 77[/align]
[align=left] Current log# 2 seq# 77 mem# 0:/u02/app/oracle/oradata/LEO1/redo02.log[/align]
[align=left]Successful open ofredo thread 1[/align]
[align=left]MTTR advisory isdisabled because FAST_START_MTTR_TARGET is not set[/align]
[align=left]Fri Apr 2609:50:09 2013[/align]
[align=left]SMON: enablingcache recovery SMON进程负责实例的恢复[/align]
[align=left]Archived Log entry4 added for thread 1 sequence 76 ID 0x64e13fb9 dest 1:[/align]
[align=left]ARC3: Archivalstarted[/align]
[align=left]ARC0: STARTINGARCH PROCESSES COMPLETE[/align]
[align=left]Successfullyonlined Undo Tablespace 2.[/align]
[align=left]Verifying fileheader compatibility for 11g tablespace encryption..[/align]
[align=left]Verifying 11g fileheader compatibility for tablespace encryption completed[/align]
[align=left]SMON: enabling txrecovery[/align]
[align=left]DatabaseCharacterset is ZHS16GBK[/align]
[align=left]No ResourceManager plan active[/align]
[align=left]replication_dependency_trackingturned off (no async multimaster replication found)[/align]
[align=left]Startingbackground process QMNC[/align]
[align=left]Fri Apr 2609:50:14 2013[/align]
[align=left]QMNC started withpid=26, OS id=8412 [/align]
[align=left]Completed: alterdatabase open 到此我们完成数据库的open动作,实例恢复完毕[/align]
[align=left]Fri Apr 2609:50:18 2013[/align]
[align=left]Startingbackground process CJQ0[/align]
[align=left]Fri Apr 2609:50:18 2013[/align]
[align=left]CJQ0 started withpid=30, OS id=8436[/align]
[align=left]从alter日志的流程上我们就可以看出,oracle实例恢复的内容过程是什么样的,通过以上案例我们即了解了控制文件的恢复过程又了解了数据库实例的恢复过程,可谓一举两得,大家好好的消化消化,休息一下,该上班工作啦:)[/align]
[align=left]9)下了班我们继续,上次讲到了,使用copy方式来恢复控制文件,下面再讲一种使用备份集来恢复控制文件的方法。[/align]
[align=left]【参】Books-> Backupand Recovery Reference -> RESTORE RECOVER 参考官方文档是个好习惯[/align]
[align=left]SYS@LEO1>shutdownimmediate 我们先关闭数据库[/align]
[align=left]Database closed.[/align]
[align=left]Databasedismounted.[/align]
[align=left]ORACLE instanceshut down.[/align]
[align=left][oracle@leonarding1LEO1]$ rm -rf control01.ctl 删除控制文件[/align]
[align=left]SYS@LEO1>startup[/align]
[align=left]ORACLE instancestarted.[/align]
[align=left]Total SystemGlobal Area 471830528 bytes[/align]
[align=left]Fixed Size 2214456 bytes[/align]
[align=left]Variable Size 150996424 bytes[/align]
[align=left]DatabaseBuffers 310378496 bytes[/align]
[align=left]Redo Buffers 8241152 bytes[/align]
[align=left]ORA-00205: errorin identifying control file, check alert log for more info[/align]
[align=left]指定的控制文件错误,检查alert日志获取更多信息[/align]
[align=left][oracle@leonarding1trace]$ tail -20f alert_LEO1.log[/align]
[align=left]ALTERDATABASE MOUNT[/align]
[align=left]ORA-00210: cannotopen the specified control file[/align]
[align=left]ORA-00202: controlfile: '/u02/app/oracle/oradata/LEO1/control01.ctl' 这写着1号控制文件丢失[/align]
[align=left]ORA-27037: unableto obtain file status[/align]
[align=left]Linux-x86_64Error: 2: No such file or directory 找不到这个文件[/align]
[align=left]Additionalinformation: 3[/align]
[align=left]ORA-205 signalledduring: ALTER DATABASE MOUNT...[/align]
[align=left]Fri Apr 2619:44:05 2013[/align]
[align=left]Checker run found1 new persistent data failures[/align]
[align=left]SYS@LEO1>shutdownimmediate 关库[/align]
[align=left]ORA-01507:database not mounted[/align]
[align=left]ORACLE instanceshut down.[/align]
[align=left][oracle@leonarding1~]$ rman target sys/oracle 链接RMAN[/align]
[align=left]Recovery Manager:Release 11.2.0.1.0 - Production on Fri Apr 26 19:49:00 2013[/align]
[align=left]Copyright (c)1982, 2009, Oracle and/or its affiliates. All rights reserved.[/align]
[align=left]connected totarget database (not started) 库没有启动[/align]
[align=left]RMAN> startupnomount 把库启动到nomount状态[/align]
[align=left]Oracle instancestarted[/align]
[align=left]Total System GlobalArea 471830528 bytes[/align]
[align=left]Fixed Size 2214456 bytes[/align]
[align=left]Variable Size 150996424 bytes[/align]
[align=left]DatabaseBuffers 310378496 bytes[/align]
[align=left]Redo Buffers 8241152 bytes[/align]
[align=left]有一个地方容易出错,大家都喜欢用这条语句来恢复[/align]
[align=left]RMAN> RESTORECONTROLFILE FROM AUTOBACKUP;[/align]
[align=left]Starting restoreat 26-APR-13[/align]
[align=left]using channelORA_DISK_1[/align]
[align=left]channelORA_DISK_1: looking for AUTOBACKUP on day: 20130426[/align]
[align=left]channelORA_DISK_1: looking for AUTOBACKUP on day: 20130425[/align]
[align=left]channelORA_DISK_1: looking for AUTOBACKUP on day: 20130424[/align]
[align=left]channelORA_DISK_1: looking for AUTOBACKUP on day: 20130423[/align]
[align=left]channelORA_DISK_1: looking for AUTOBACKUP on day: 20130422[/align]
[align=left]channelORA_DISK_1: looking for AUTOBACKUP on day: 20130421[/align]
[align=left]channelORA_DISK_1: looking for AUTOBACKUP on day: 20130420[/align]
[align=left]channelORA_DISK_1: no AUTOBACKUP in 7 days found[/align]
[align=left]RMAN-00571:===========================================================[/align]
[align=left]RMAN-00569:=============== ERROR MESSAGE STACK FOLLOWS ===============[/align]
[align=left]RMAN-00571:===========================================================[/align]
[align=left]RMAN-03002:failure of restore command at 04/26/2013 20:01:04[/align]
[align=left]RMAN-06172: noAUTOBACKUP found or specified handle is not a valid copy or piece[/align]
[align=left]报错:说找不到指定的备份集[/align]
[align=left]RMAN> show all;[/align]
[align=left]RMAN configurationparameters for database with db_unique_name LEO1 are:[/align]
[align=left]CONFIGURERETENTION POLICY TO REDUNDANCY 1; # default[/align]
[align=left]CONFIGURE BACKUPOPTIMIZATION OFF; # default[/align]
[align=left]CONFIGURE DEFAULTDEVICE TYPE TO DISK; # default[/align]
[align=left]CONFIGURECONTROLFILE AUTOBACKUP OFF; # default[/align]
[align=left]CONFIGURECONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default[/align]
[align=left]原来我们配置的控制文件自动备份保存目录是不是失效啦,这是为什么呢,原来rman元数据信息是写在controlfile中的,而现在控制文件又损坏了不能打开,一个不能打开的文件我们是不是读不到里面的内容啊,我们只启动到了nomount状态只读取参数文件信息,因此我们在恢复控制文件的时候指定一下“原来备份的保存目录”告诉rman从哪个路径下可以找到备份集就可以了。[/align]
[align=left]RMAN> restore controlfile from'/u02/app/oracle/backup/control/cf_c-1692458681-20130426-00';[/align]
[align=left]Starting restoreat 26-APR-13[/align]
[align=left]using channelORA_DISK_1[/align]
[align=left]channelORA_DISK_1: restoring control file[/align]
[align=left]channelORA_DISK_1: restore complete, elapsed time: 00:00:04[/align]
[align=left]output filename=/u02/app/oracle/oradata/LEO1/control01.ctl[/align]
[align=left]output filename=/u02/app/oracle/oradata/LEO1/control02.ctl[/align]
[align=left]Finished restoreat 26-APR-13[/align]
[align=left][oracle@leonarding1LEO1]$ ll[/align]
[align=left]total 2618136[/align]
[align=left]-rw-r----- 1oracle asmadmin 9748480 Apr 26 20:17control01.ctl[/align]
[align=left]-rw-r----- 1oracle asmadmin 9748480 Apr 26 20:17control02.ctl[/align]
[align=left]我们一起恢复了所有的控制文件[/align]
[align=left]RMAN> alterdatabase mount; 现在数据库可以正常加载了对吧[/align]
[align=left]database mounted[/align]
[align=left]released channel:ORA_DISK_1[/align]
[align=left]那我们可以alter database open来打开数据库吗,显然是不行的,大家知道为什么吗?[/align]
[align=left]你想想如果这个控制文件是从10天之前的一个备份还原的与当前的数据库物理结构能一致吗![/align]
[align=left]显然是不可以的,我们只有用备份在重新同步数据库[/align]
[align=left]RMAN> restoredatabase; RMAN备份还原restore(复制)数据文件[/align]
[align=left]Starting restoreat 26-APR-13[/align]
[align=left]allocated channel:ORA_DISK_1[/align]
[align=left]channel ORA_DISK_1:SID=134 device type=DISK[/align]
[align=left]channelORA_DISK_1: starting datafile backup set restore[/align]
[align=left]channelORA_DISK_1: specifying datafile(s) to restore from backup set[/align]
[align=left]channel ORA_DISK_1:restoring datafile 00001 to /u02/app/oracle/oradata/LEO1/system01.dbf[/align]
[align=left]channelORA_DISK_1: restoring datafile 00002 to/u02/app/oracle/oradata/LEO1/sysaux01.dbf[/align]
[align=left]channelORA_DISK_1: restoring datafile 00003 to/u02/app/oracle/oradata/LEO1/undotbs01.dbf[/align]
[align=left]channelORA_DISK_1: restoring datafile 00004 to/u02/app/oracle/oradata/LEO1/users01.dbf[/align]
[align=left]channelORA_DISK_1: restoring datafile 00005 to /u02/app/oracle/oradata/LEO1/leo1.dbf[/align]
[align=left]channelORA_DISK_1: reading from backup piece /u02/app/oracle/backup/DB_02o81bpf_1_1[/align]
[align=left][/align]
[align=left]channelORA_DISK_1: piece handle=/u02/app/oracle/backup/DB_02o81bpf_1_1tag=TAG20130426T065022[/align]
[align=left]channelORA_DISK_1: restored backup piece 1[/align]
[align=left]channelORA_DISK_1: restore complete, elapsed time: 00:02:36[/align]
[align=left]Finished restoreat 26-APR-13[/align]
[align=left]RMAN> recoverdatabase; 应用redo日志恢复recover(同步)数据库[/align]
[align=left]Starting recoverat 26-APR-13[/align]
[align=left]using channelORA_DISK_1[/align]
[align=left]starting mediarecovery[/align]
[align=left][/align]
[align=left]archived log forthread 1 with sequence 75 is already on disk as file/u02/app/oracle/oradata/LEO1/redo03.log[/align]
[align=left]archived log forthread 1 with sequence 76 is already on disk as file/u02/app/oracle/oradata/LEO1/redo01.log[/align]
[align=left]archived log forthread 1 with sequence 77 is already on disk as file/u02/app/oracle/oradata/LEO1/redo02.log[/align]
[align=left]archived log filename=/u02/app/oracle/oradata/LEO1/redo03.log thread=1 sequence=75[/align]
[align=left]archived log filename=/u02/app/oracle/oradata/LEO1/redo01.log thread=1 sequence=76[/align]
[align=left]archived log filename=/u02/app/oracle/oradata/LEO1/redo02.log thread=1 sequence=77[/align]
[align=left]mediarecovery complete, elapsed time: 00:00:14 这就是介质恢复,要把数据文件同步到损坏的前一刻[/align]
[align=left]因为这是不完全恢复,因此我们不能用alter database open来打开数据库[/align]
[align=left]RMAN> alterdatabase open resetlogs;[/align]
[align=left]database opened[/align]
[align=left]SYS@LEO1>selectstatus from v$instance; 数据库已打开,可以正常使用[/align]
[align=left]STATUS[/align]
[align=left]------------[/align]
[align=left]OPEN[/align]
[align=left]小结:因为我们进行了不完全恢复,恢复到之前的某一点,现在数据库以这点为一个新的起点(相当是一个焕然一新的库),resetlogs就是重置归档日志从1开始编码,之前的归档全部无效。[/align]
[align=left]SYS@LEO1>altersystem switch logfile; 我们重新切换一次[/align]
[align=left]System altered.[/align]
[align=left][oracle@leonarding1oracle]$ cd archdata[/align]
[align=left][oracle@leonarding1archdata]$ ll[/align]
[align=left]total 14028[/align]
[align=left]-rw-r-----1 oracle asmadmin 222720 Apr 26 21:051_1_813790699.dbf[/align]
[align=left]-rw-r----- 1oracle asmadmin 5632 Apr 26 20:581_75_813654649.dbf[/align]
[align=left]-rw-r----- 1oracle asmadmin 11844608 Apr 26 20:58 1_76_813654649.dbf[/align]
[align=left]-rw-r----- 1oracle asmadmin 2284032 Apr 26 20:581_77_813654649.dbf[/align]
[align=left]注意:归档日志编码重置了,从1开始了,75 76 77归档日志全部无效了,为了不碍眼你可以删除掉。[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]

[align=left]Leonarding
2013.4.26
天津&spring
分享技术~成就梦想
Blog:www.leonarding.com[/align]本文出自 “刘盛分享技术~成就梦想” 博客,请务必保留此出处http://leonarding.blog.51cto.com/6045525/1188596
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐