Oracle10G备份&恢复案例Oracle10G备份&恢复案例(系统部署部提供2008-5-10)内容提要A、【理解什么是数据库恢复】B、【数据库恢复案例】C、【了解与恢复相关信息】D、【数据库恢复】E、【其他恢复案例】F、【常见恢复误区】简介本文档可作为Oracle10G日常维护必备工具文档,在Oracle10G在使用过程中,出现故障诸如文件损坏后,一般面临如何实现快速还原恢复数据库问题,本文以案例形式较详尽展现诸如实现数据库在出现故障后,实现数据库安全有效恢复。适应范围实施人员、技术支持、EAS客户系统管理员1理解什么是数据库恢复我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库,该处理称为数据库恢复。恢复过程大致可以分为复原(Restore)与恢复(Restore)过程。数据库恢复可以分为以下两类:1.1实例故障的一致性恢复当实例意外地(如掉电、后台进程故障等)或预料地(发出SHUTDOUMABORT语句)中止时出现实例故障,此时需要实例恢复。实例恢复将数据库恢复到故障之前的事务一致状态。如果在在线后备发现实例故障,则需介质恢复。在其它情况ORACLE在下次数据库起动时(对新实例装配和打开),自动地执行实例恢复。如果需要,从装配状态变为打开状态,自动地激发实例恢复,由下列处理:(1)为了解恢复数据文件中没有记录的数据,进行向前滚。该数据记录在在线日志,包括对回滚段的内容恢复。(2)回滚未提交的事务,按步1重新生成回滚段所指定的操作。(3)释放在故障时正在处理事务所持有的资源。(4)解决在故障时正经历一阶段提交的任何悬而未决的分布事务。1.2介质故障或文件错误的不一致恢复介质故障是当一个文件、一个文件的部分或磁盘不能读或不能写时出现的故障。文件错误一般指意外的错误导致文件被删除或意外事故导致文件的不一致。这种状态下的数据库都是不一致的,需要DBA手工来进行数据库的恢复,这种恢复有两种形式,决定于数据库运行的归档方式和备份方式。(1)完全介质恢复可恢复全部丢失的修改。一般情况下需要有数据库的备份且数据库运行在归档状态下并且有可用归档日志时才可能。对于不同类型的错误,有不同类型的完全恢复可使用,其决定于毁坏文件和数据库的可用性。金蝶软件(中国)有限公司第1页,共35页Oracle10G备份&恢复案例(2)不完全介质恢复是在完全介质恢复不可能或不要求时进行的介质恢复。重构受损的数据库,使其恢复介质故障前或用户出错之前的一个事务一致性状态。不完全介质恢复有不同类型的使用,决定于需要不完全介质恢复的情况,有下列类型:基于撤消、基于时间和基于修改的不完全恢复。基于撤消(CANCEL)恢复:在某种情况,不完全介质恢复必须被控制,DBA可撤消在指定点的操作。基于撤消的恢复地在一个或多个日志组(在线的或归档的)已被介质故障所破坏,不能用于恢复过程时使用,所以介质恢复必须控制,以致在使用最近的、未损的日志组于数据文件后中止恢复操作。基于时间(TIME)和基于修改(SCN)的恢复:如果DBA希望恢复到过去的某个指定点,是一种理想的不完全介质恢复,一般发生在恢复到某个特定操作之前,恢复到如意外删除某个数据表之前。1.3和相关系统关系金蝶软件(中国)有限公司第2页,共35页Oracle10G备份&恢复案例2数据库恢复案例2.1数据库环境以下的所有案例都是通过测试经过,环境为:OS:Centos4DB:Oracle10.2.0.1DBNAME:EAS数据文件:SQL>selectfile#,status,enabled,namefromv$datafile;FILE#STATUSENABLEDNAME1SYSTEMREADWRITE/oradata/db/EAS/datafile/o1_mf_system_3nd8ob9w_.dbf2ONLINEREADWRITE/oradata/db/EAS/datafile/o1_mf_undotbs1_3nd8obof_.dbf3ONLINEREADWRITE/oradata/db/EAS/datafile/o1_mf_sysaux_3nd8obcc_.dbf4ONLINEREADWRITE/oradata/db/EAS/datafile/o1_mf_users_3nd8obq6_.dbf5ONLINEREADWRITE/oradata/db/EAS/datafile/o1_mf_data_3nd9n9yz_.dbf6ONLINEREADWRITE/oradata/db/EAS/datafile/EAS_D_KDEAS_STANDARD.ora控制文件:SQL>select*fromv$controlfile;NAMEIS_RECOVEFILE_SIZE_BLKS/oradata/db/EAS/controlfile/o1_mf_3nd8q86r_.ctlNO430/oraInventory/flash_recovery_area/EAS/controlfile/o1_mf_3nd8q8hz_.ctlYES430联机日志:SQL>select*fromv$logfile;GROUP#TYPEMEMBERIS_RECOVE3ONLINE/oradata/db/EAS/onlinelog/o1_mf_3_3nd8qlj7_.logNO3ONLINE/oraInventory/flash_recovery_area/EAS/onlinelog/o1_mf_3_3nd8qn8m_.logYES2ONLINE/oradata/db/EAS/onlinelog/o1_mf_2_3nd8qgj0_.logNO2ONLINE/oraInventory/flash_recovery_area/EAS/onlinelog/o1_mf_2_3nd8qjhb_.logYES1ONLINE/oradata/db/EAS/onlinelog/o1_mf_1_3nd8qclo_.logNO1ONLINE/oraInventory/flash_recovery_area/EAS/onlinelog/o1_mf_1_3nd8qdv9_.logYES金蝶软件(中国)有限公司第3页,共35页Oracle10G备份&恢复案例2.2数据库备份脚本冷备份脚本#script:coldbak.sql#desc:offlinefullbackupdatabaseconnect/assysdba;shutdownimmediate;#CopyDatafile!cp/oradata/db/EAS/datafile/*.dbf/orabck/back;#CopyControlfile!cp/oradata/db/EAS/controlfile/*.ctl/orabck/back;#CopyLogfile!cp/oradata/db/EAS/onlinelog/*.log/orabck/back;#startupdatabasestartup;说明:1、以上脚本在数据库关闭状态下备份数据库所有的数据文件,联机日志,控制文件(在一个目录下),如果成功备份,所有文件是一致的。2、没有备份参数文件,参数文件可以另外备份,没有必要每次都备份,只需要在改变设置后备份一次。3、如果以上命令没有成功依次执行,那么备份将是无效的,如连接数据库不成功,那么肯定关闭数据库也不成功,那么备份则无效4、冷备份建议下人工干预下执行。数据库OS热全备份脚本#script:hotbak.sql#desc:backupalldatabasedatafileinarchive#connectdatabaseconnect/assysdba;#archivealtersystemarchivelogcurrent;#startaltertablespacesystembeginbackup;!cp/oradata/db/EAS/datafile/o1_mf_system_3nd8ob9w_.dbf/orabck/back;altertablespacesystemendbackup;altertablespacerbsbeginbackup;!cp/oradata/db/EAS/datafile/o1_mf_undotbs1_3nd8obof_.dbf/orabck/back;altertablespacerbsendbackup;altertablespaceusersbeginbackup;!cp/oradata/db/EAS/datafile/o1_mf_users_3nd8obq6_.dbf/orabck/back;altertablespaceusersendbackup;altertablespacekdeasbeginbackup;金蝶软件(中国)有限公司第4页,共35页Oracle10G备份&恢复案例!cp/oradata/db/EAS/datafile/EAS_D_KDEAS_STANDARD.ora/orabck/back;altertablespaceusersendbackup;…………..#bakcontrolfile#binaryalterdatabasebackupcontrolfileto'/orabck/back/controlbinbak.000';#asciialterdatabasebackupcontrolfiletotrace;altersystemarchivelogcurrent;说明:1、热备份必须在数据库归档方式下才可以运行2、以上脚本可以在数据库运行状态下备份数据库所有的数据文件(除了临时数据文件),没有必要备份联机日志。3、归档日志至少需要一次完整备份之后的所有日志。4、如果以上命令没有成功依次执行,那么备份也是无效的,如连接数据库不成功,那么备份则无效RMAN备份只讲叙有恢复目录的情况,如果没有恢复目录,情形大致相似。以下是RMAN的热备份全备份的脚本:#script:bakup.rcv#desc:backupalldatabasedatafileinarchivewithrman#connectdatabaseconnectrcvcatrman/kingdee@eas;connecttargetrman/kingdee;#startbackupdatabaserun{allocatechannelc1typedisk;backupfulltag'dbfull'format'/orabck/back/full%u_%s_%p'databaseincludecurrentcontrolfile;sql'altersystemarchivelogcurrent';releasechannelc1;}#end说明:1、数据库必须运行在归档模式下2、RMAN将自动备份数据文件,运行可靠3、归档日志另外备份处理,但至少需要保存一次备份来的日志4、没有必要用RMAN做冷备份,效果不好以上举例说明了数据库的恢复案例的测试环境与部分备份测试脚本,其它的备份脚本可以根据以上脚本演变而来或在案例中加以说明。金蝶软件(中国)有限公司第5页,共35页Oracle10G备份&恢复案例数据库的自动实例将不加以说明,这里只举例说明媒体错误或人为错误造成的恢复可能。以上包括以下案例都是在Linuxcentos42.6.9-42+ORACLE10.2.0.1上测试验证的,在不同的操作系统与不同的数据库版本中略有差别。3了解与恢复相关的信息1、理解报警日志文件报警日志文件一般记载了数据库的启动/关闭信息,归档信息,备份信息,恢复信息,常见错误信息,部分数据库修改记录等。一般令名规则为<SID>Alrt.log或Alrt<SID>.log,如我的测试数据库的报警日志文件的名称为easalrt.log。报警日志文件的路径是根据初始化参数background_dump_dest来决定的,如在我的机器上,该参数值为/oracle/admin/eas/bdump,那么,你就可以在该路径下找到该文件2、后台进程跟踪文件后台进程跟踪文件的路径与报警日志文件的路径一致,在某些情况下,你可以通过后台跟踪文件的信息了解更多的需要恢复的信息。如在数据库需要恢复的时候,报警日志文件中常有这样的语句:Errorsinfile/oracle/admin/eas/bdump/eas_arc2_5753.trc:ORA-01157:cannotidentify/lockdatafile1-seeDBWRtracefile通过提示的DBWR跟踪文件,可以查询到更详细的信息。3、v$recover_file与v$recovery_log这是两个动态性能视图,可以在mount下查看,通过这两个视图,你可以了解详细的需要恢复的数据文件与需要使用到的归档日志。4数据库恢复4.1非归档模式下的备份与恢复备份方案:非归档模式只能采用OS冷备份方式1.连接数据库并创建测试表SQL*Plus:Release10.2.0.1.0-ProductiononSatNov2400:48:312007Copyright(c)1982,2005,Oracle.Allrightsreserved.SQL>connect/assysdba;SQL>createtabletest(aint);TablecreatedSQL>insertintotestvalues(1);1rowinsertedSQL>commit;Commitcomplete2.备份数据库SQL>@coldbak.sql3.再插入记录SQL>insertintotestvalues(2);1rowinsertedSQL>commit;CommitcompleteSQL>select*fromtest;金蝶软件(中国)有限公司第6页,共35页Oracle10G备份&恢复案例A-----------------------------------------------------------124.关闭数据库SQL>shutdownimmediate;Databaseclosed.Databasedismounted.ORACLEinstanceshutdown.5.毁坏一个或多个数据文件,如删除user01.dbfrm/oradata/db/EAS/datafile/o1_mf_users_3nd8obq6_.dbf模拟媒体毁坏6.重新启动数据库,会发现如下错误SQL>startupORACLEinstancestarted.TotalSystemGlobalArea102020364bytesFixedSize70924bytesVariableSize85487616bytesDatabaseBuffers16384000bytesRedoBuffers77824bytesDatabasemounted.ORA-01157:cannotidentify/lockdatafile3-seeDBWRtracefileORA-01110:datafile3:'/oradata/db/EAS/datafile/o1_mf_users_3nd8obq6_.dbf'在报警文件中,会有更详细的信息Errorsinfile/oracle/admin/eas/bdump/easdbw0.TRC:ORA-01157:cannotidentify/lockdatafile3-seeDBWRtracefileORA-01110:datafile3:'/oradata/db/EAS/datafile/o1_mf_users_3nd8obq6_.dbf'ORA-27041:unabletoopenfileOSD-04002:unabletoopenfileO/S-Error:(OS2)系统找不到指定的文件。7.拷贝备份复原到原来位置(restore过程)$cp/oraInventory/bak/o1_mf_users_3nd8obq6_.dbf/oradata/db/EAS/datafile8.打开数据库,检查数据SQL>alterdatabaseopen;Databasealtered.SQL>select*fromtest;A1金蝶软件(中国)有限公司第7页,共35页Oracle10G备份&恢复案例这里可以发现,数据库恢复成功,但在备份之后与崩溃之前的数据丢失了。说明:1、非归档模式下的恢复方案可选性很小,一般情况下只能有一种恢复方式,就是数据库的冷备份的完全恢复,仅仅需要拷贝原来的备份就可以(restore),不需要recover。2、这种情况下的恢复,可以完全恢复到备份的点上,但是可能是丢失数据的,在备份之后与崩溃之前的数据将全部丢失。3、不管毁坏了多少数据文件或是联机日志或是控制文件,都可以通过这个办法恢复,因为这个恢复过程是Restore所有的冷备份文件,而这个备份点上的所有文件是一致的,与最新的数据库没有关系,就好比把数据库又放到了一个以前的“点”上。4、对于非归档模式下,最好的办法就是采用OS的冷备份,建议不要用RMAN来作冷备份,效果不好,因为RMAN不备份联机日志,restore不能根本解决问题。5、如果没有备份联机日志,如RMAN的备份,就需要利用不完全恢复(untilcancel)的方法来重新创建联机日志文件4.2归档模式下丢失或损坏一个数据文件4.2.1OS备份方案在归档方式下损坏或丢失一个数据文件,如果存在相应的备份与该备份以来的归档日志,恢复还是比较简单的,可以作到尽量少的Down机时间,并能作到数据库的完全恢复。1、连接数据库,创建测试表并插入记录SQL*Plus:Release10.2.0.1.0-ProductiononSatNov2403:17:042007Copyright(c)1982,2005,Oracle.Allrightsreserved.SQL>connect/assysdbaConnected.SQL>createtabletest(aint)tablespaceusers;TablecreatedSQL>insertintotestvalues(1);1rowinsertedSQL>commit;Commitcomplete2、备份数据库SQL>@hotbak.sql#数据库OS热全备份脚本3、继续在测试表中插入记录SQL>insertintotestvalues(2);1rowinsertedSQL>commit;CommitcompleteSQL>select*fromtest;A--------------------------------------12金蝶软件(中国)有限公司第8页,共35页Oracle10G备份&恢复案例SQL>altersystemswitchlogfile;Systemaltered.SQL>altersystemswitchlogfile;Systemaltered.4、关闭数据库,模拟丢失数据文件SQL>shutdownimmediate;Databaseclosed.Databasedismounted.ORACLEinstanceshutdown$rm/oradata/db/EAS/datafile/o1_mf_users_3nd8obq6_.dbf模拟媒体毁坏5、启动数据库错误,脱机该数据文件SQL>startupORACLEinstancestarted.TotalSystemGlobalArea901775360bytesFixedSize1222528bytesVariableSize247466112bytesDatabaseBuffers650117120bytesRedoBuffers2969600bytesDatabasemounted.ORA-01157:cannotidentify/lockdatafile4-seeDBWRtracefileORA-01110:datafile4:'/oradata/db/EAS/datafile/o1_mf_users_3nd8obq6_.dbf'还可以查看报警文件(见上一个恢复案例)或动态视图v$recover_file如SQL>select*fromv$recover_file;FILE#ONLINEERRORCHANGE#TIME----------------------------------------------------------------------------------3ONLINE10135002005-05-07脱机数据文件SQL>alterdatabasedatafile4offlinedrop;Databasealtered.6、打开数据库,拷贝备份回来(restore),恢复(recover)该数据文件,并联机SQL>alterdatabaseopen;Databasealtered.拷贝备份从备份处cp/orabck/back/o1_mf_users_3nd8obq6_.dbf/oradata/db/EAS/datafile;恢复该数据文件SQL>recoverdatafile4;金蝶软件(中国)有限公司第9页,共35页Oracle10G备份&恢复案例Mediarecoverycomplete.恢复成功,联机该数据文件SQL>alterdatabasedatafile4online;Databasealtered.7、检查数据库的数据(完全恢复)SQL>select*fromtest;A--------------------------------------12说明:1、采用热备份,需要运行在归档模式下,可以实现数据库的完全恢复,也就是说,从备份后到数据库崩溃时的数据都不会丢失。2、可以采用全备份数据库的方式备份,对于特殊情况,也可以只备份特定的数据文件,如只备份用户表空间(一般情况下对于某些写特别频繁的数据文件,可以单独加大备份频率)3、如果在恢复过程中,发现损坏的是多个数据文件,即可以采用一个一个数据文件的恢复方法(第5步中需要对数据文件一一脱机,第6步中需要对数据文件分别恢复),也可以采用整个数据库的恢复方法。4、如果是系统表空间的损坏,不能采用此方法4.2.2RMAN备份方案RMAN也可以进行联机备份,而且备份与恢复方法将比OS备份更简单可靠。1、连接数据库,创建测试表并插入记录SQL*Plus:Release10.2.0.1.0-ProductiononSatNov2403:17:042007Copyright(c)1982,2005,Oracle.Allrightsreserved.SQL>connect/assysdbaassysdba;Connected.SQL>createtabletest(aint)tablespaceusers;TablecreatedSQL>insertintotestvalues(1);1rowinsertedSQL>commit;Commitcomplete2、备份数据库表空间users$rmanRecoveryManager:Release10.2.0.1.0-ProductiononSatNov2403:25:212007RMAN>connectrcvcatrman/kingdeeRMAN>connecttargetrman/kingdeeconnectedtotargetdatabase:EAS(DBID=1540297512)RMAN>run{2>allocatechannelc1typedisk;金蝶软件(中国)有限公司第10页,共35页Oracle10G备份&恢复案例3>backuptag'tsuser'format'/orabck/back/backtsuser_%u_%s_%p'tablespaceusers;4>releasechannelc1;5>}allocatedchannel:c1channelc1:sid=140devtype=DISKStartingbackupat24-NOV-07channelc1:startingcompressedfulldatafilebackupsetchannelc1:specifyingdatafile(s)inbackupsetinputdatafilefno=00004name=/oradata/db/EAS/datafile/o1_mf_users_3nd8obq6_.dbfchannelc1:startingpiece1at24-NOV-07channelc1:finishedpiece1at24-NOV-07piecehandle=/orabck/backtsuser_0pj1qp0s_25_1tag=TSUSERcomment=NONEchannelc1:backupsetcomplete,elapsedtime:00:00:03Finishedbackupat24-NOV-07StartingControlFileandSPFILEAutobackupat24-NOV-07piecehandle=/oraInventory/flash_recovery_area/EAS/autobackup/2007_11_24/o1_mf_s_639460384_3ngcx0tf_.bkpcomment=NONEFinishedControlFileandSPFILEAutobackupat24-NOV-07releasedchannel:c13、继续在测试表中插入记录SQL>insertintotestvalues(2);1rowinsertedSQL>commit;CommitcompleteSQL>select*fromtest;A--------------------------------------12SQL>altersystemswitchlogfile;Systemaltered.SQL>r1*altersystemswitchlogfile;Systemaltered.4、关闭数据库,模拟丢失数据文件SQL>shutdownimmediate;Databaseclosed.Databasedismounted.金蝶软件(中国)有限公司第11页,共35页Oracle10G备份&恢复案例ORACLEinstanceshutdown$rm/oradata/db/EAS/datafile/o1_mf_users_3nd8obq6_.dbf5、启动数据库,检查错误SQL>startupORACLEinstancestarted.TotalSystemGlobalArea102020364bytesFixedSize70924bytesVariableSize85487616bytesDatabaseBuffers16384000bytesRedoBuffers77824bytesDatabasemounted.ORA-01157:cannotidentify/lockdatafile3-seeDBWRtracefileORA-01110:datafile4:'/oradata/db/EAS/datafile/o1_mf_users_3nd8obq6_.dbf'6、先打开数据库SQL>alterdatabasedatafile4offlinedrop;Databasealtered.SQL>alterdatabaseopen;Databasealtered.7、恢复该表空间恢复脚本可以是恢复单个数据文件RMAN>run{2>allocatechannelc1typedisk;3>restoredatafile4;4>recoverdatafile4;5>sql'alterdatabasedatafile4online';6>releasechannelc1;7>}usingtargetdatabasecontrolfileinsteadofrecoverycatalogallocatedchannel:c1channelc1:sid=138devtype=DISKStartingrestoreat24-NOV-07channelc1:startingdatafilebackupsetrestorechannelc1:specifyingdatafile(s)torestorefrombackupsetrestoringdatafile00004to/oradata/db/EAS/datafile/o1_mf_users_3nd8obq6_.dbfchannelc1:readingfrombackuppiece/orabck/backtsuser_0pj1qp0s_25_1channelc1:restoredbackuppiece1piecehandle=/orabck/backtsuser_0pj1qp0s_25_1tag=TSUSERchannelc1:restorecomplete,elapsedtime:00:00:02Finishedrestoreat24-NOV-07金蝶软件(中国)有限公司第12页,共35页Oracle10G备份&恢复案例Startingrecoverat24-NOV-07startingmediarecoverymediarecoverycomplete,elapsedtime:00:00:05Finishedrecoverat24-NOV-07sqlstatement:alterdatabasedatafile4onlinereleasedchannel:c1也可以是,恢复表空间RMAN>run{2>allocatechannelc1typedisk;3>restoretablespaceusers;4>recovertablespaceusers;5>sql'alterdatabasedatafile4online';6>releasechannelc1;7>}startingfullresyncofrecoverycatalogfullresynccompleteallocatedchannel:c1channelc1:sid=133devtype=DISKStartingrestoreat24-NOV-07channelc1:startingdatafilebackupsetrestorechannelc1:specifyingdatafile(s)torestorefrombackupsetrestoringdatafile00004to/oradata/db/EAS/datafile/o1_mf_users_3nggdrck_.dbfchannelc1:readingfrombackuppiece/orabck/backtsuser_0pj1qp0s_25_1channelc1:restoredbackuppiece1piecehandle=/orabck/backtsuser_0pj1qp0s_25_1tag=TSUSERchannelc1:restorecomplete,elapsedtime:00:00:02Finishedrestoreat24-NOV-07startingfullresyncofrecoverycatalogfullresynccompleteStartingrecoverat24-NOV-07startingmediarecoveryarchivelogthread1sequence9isalreadyondiskasfile/oraInventory/flash_recovery_area/EAS/archivelog/2007_11_24/o1_mf_1_9_3ngd8o33_.arcarchivelogthread1sequence10isalreadyondiskasfile/oraInventory/flash_recovery_area/EAS/archivelog/2007_11_24/o1_mf_1_10_3ngg6367_.arcarchivelogthread1sequence11isalreadyondiskasfile/oraInventory/flash_recovery_area/EAS/archive金蝶软件(中国)有限公司第13页,共35页Oracle10G备份&恢复案例log/2007_11_24/o1_mf_1_11_3nggqrwm_.arcarchivelogfilename=/oraInventory/flash_recovery_area/EAS/archivelog/2007_11_24/o1_mf_1_9_3ngd8o33_.arcthread=1sequence=9mediarecoverycomplete,elapsedtime:00:00:04Finishedrecoverat24-NOV-07sqlstatement:alterdatabasedatafile4onlinereleasedchannel:c1RMAN>8、检查数据是否完整SQL>alterdatabaseopen;Databasealtered.SQL>select*fromtest;A--------------------------------------12说明:1、RMAN也可以实现单个表空间或数据文件的恢复,恢复过程可以在mount下或open方式下,如果在open方式下恢复,可以减少down机时间2、如果损坏的是一个数据文件,建议offline并在open方式下恢复3、这里可以看到,RMAN进行数据文件与表空间恢复的时候,代码都比较简单,而且能保证备份与恢复的可靠性,所以建议采用RMAN的备份与恢复4.3丢失多个数据文件,实现整个数据库的恢复4.3.1OS备份方案OS备份归档模式下损坏(丢失)多个数据文件,进行整个数据库的恢复1、连接数据库,创建测试表并插入记录SQL*Plus:Release10.2.0.1.0-ProductiononSatNov2403:17:042007Copyright(c)1982,2005,Oracle.Allrightsreserved.SQL>connect/assysdbaassysdba;Connected.SQL>createtabletest(aint);TablecreatedSQL>insertintotestvalues(1);1rowinsertedSQL>commit;Commitcomplete2、备份数据库,备份除临时数据文件后的所数据文件金蝶软件(中国)有限公司第14页,共35页Oracle10G备份&恢复案例SQL>@hotbak.sql3、继续在测试表中插入记录SQL>insertintotestvalues(2);1rowinsertedSQL>commit;CommitcompleteSQL>select*fromtest;A--------------------------------------12SQL>altersystemswitchlogfile;Systemaltered.SQL>altersystemswitchlogfile;Systemaltered.4、关闭数据库,模拟丢失数据文件SQL>shutdownimmediate;Databaseclosed.Databasedismounted.ORACLEinstanceshutdown$rm/oradata/db/EAS/datafile/o1_mf_system_3nd8ob9w_.dbf$rm/oradata/db/EAS/datafile/o1_mf_undotbs1_3nd8obof_.dbf模拟媒体毁坏(这里删除多个数据文件)5、启动数据库,检查错误SQL>STARTUPORACLEinstancestarted.TotalSystemGlobalArea102020364bytesFixedSize70924bytesVariableSize85487616bytesDatabaseBuffers16384000bytesRedoBuffers77824bytesDatabasemounted.ORA-01157:cannotidentify/lockdatafile1-seeDBWRtracefileORA-01110:datafile1:'/oradata/db/EAS/datafile/o1_mf_system_3nd8ob9w_.dbf'详细信息可以查看报警文件ORA-1157signalledduring:ALTERDATABASEOPEN...ThuMay0809:39:362005Errorsinfile/oracle/admin/eas/bdump/easdbw0.TRC:ORA-01157:cannotidentify/lockdatafile1-seeDBWRtracefileORA-01110:datafile1:'/oradata/db/EAS/datafile/o1_mf_system_3nd8ob9w_.dbf'金蝶软件(中国)有限公司第15页,共35页Oracle10G备份&恢复案例ORA-27041:unabletoopenfileOSD-04002:unabletoopenfileO/S-Error:(OS2)系统找不到指定的文件。ThuMay0809:39:362005Errorsinfile/oracle/admin/eas/bdump/easdbw0.TRC:ORA-01157:cannotidentify/lockdatafile2-seeDBWRtracefileORA-01110:datafile2:'/oradata/db/EAS/datafile/o1_mf_undotbs1_3nd8obof_.dbf'ORA-27041:unabletoopenfileOSD-04002:unabletoopenfileO/S-Error:(OS2)系统找不到指定的文件。ThuMay0809:39:362005Errorsinfile/oracle/admin/eas/bdump/easdbw0.TRC:ORA-01157:cannotidentify/lockdatafile5-seeDBWRtracefileORA-27041:unabletoopenfileOSD-04002:unabletoopenfileO/S-Error:(OS2)系统找不到指定的文件。ThuMay0809:39:362005Errorsinfile/oracle/admin/eas/bdump/easdbw0.TRC:ORA-01157:cannotidentify/lockdatafile6-seeDBWRtracefileO/S-Error:(OS2)系统找不到指定的文件。通过查询v$recover_file可以看到SQL>select*fromv$recover_file;FILE#ONLINEERRORCHANGE#TIME1ONLINEFILENOTFOUND02ONLINEFILENOTFOUND0有两个数据文件需要恢复6、拷贝备份回到原地点(restore),开始恢复数据库(recover)restore过程:$cp/oraInventory/back/o1_mf_system_3nd8ob9w_.dbf/oradata/db/EAS/datafile/$cp/oraInventory/back/eas/o1_mf_undotbs1_3nd8obof_.dbf.DBF/oradata/db/EAS/datafile/Recover过程:SQL>recoverdatabase;ORA-00279:change1073849generatedat05/08/200508:58:35neededforthread1ORA-00289:suggestion:/oradata/db/EAS/datafile/archive/east001S00311.arcORA-00280:change1073849forthread1isinsequence#311Specifylog:{<RET>=suggested|filename|AUTO|CANCEL}金蝶软件(中国)有限公司第16页,共35页Oracle10G备份&恢复案例autoORA-00279:change1073856generatedat05/08/200509:03:27neededforthread1ORA-00289:suggestion:/oradata/db/EAS/datafile/archive/east001S00312.arcORA-00280:change1073856forthread1isinsequence#312ORA-00278:logfile'/oradata/db/EAS/datafile/archive/east001S00311.arc'nolongerneededforthisrecoveryORA-00279:change1073858generatedat05/08/200509:11:43neededforthread1ORA-00289:suggestion:/oradata/db/EAS/datafile/archive/east001S00313.arcORA-00280:change1073858forthread1isinsequence#313ORA-00278:logfile'/oradata/db/EAS/datafile/archive/east001S00312.arc'nolongerneededforthisrecoveryORA-00279:change1073870generatedat05/08/200509:11:46neededforthread1ORA-00289:suggestion:/oradata/db/EAS/datafile/archive/east001S00314.arcORA-00280:change1073870forthread1isinsequence#314ORA-00278:logfile'/oradata/db/EAS/datafile/archive/east001S00313.arc'nolongerneededforthisrecoveryLogapplied.Mediarecoverycomplete.7、打开数据库,检查数据库的数据(完全恢复)SQL>alterdatabaseopen;Databasealtered.SQL>select*fromtest;A--------------------------------------12说明:1、只要有备份与归档存在,就可以实现数据库的完全恢复(不丢失数据)2、适合于丢失大量数据文件,或包含系统数据文件在内的数据库的恢复3、恢复过程在mount下进行,如果恢复成功,再打开数据库,down机时间可能比较长一些。4.3.2RMAN备份方案RMAN备份归档模式下损坏(丢失)多个数据文件,进行整个数据库的恢复1、连接数据库,创建测试表并插入记录。SQL*Plus:Release10.2.0.1.0-ProductiononSatNov2403:17:042007Copyright(c)1982,2005,Oracle.Allrightsreserved.SQL>connect/assysdbaassysdba;Connected.SQL>createtabletest(aint);Tablecreated金蝶软件(中国)有限公司第17页,共35页Oracle10G备份&恢复案例SQL>insertintotestvalues(1);1rowinsertedSQL>commit;Commitcomplete2、备份数据库$rmancmdfile=bakup.rcvmsglog=backup.log;以下是backup.log内容。RecoveryManager:Release10.2.0.1.0-ProductiononSatNov2403:25:212007RMAN>#script:bakup.rcv2>#3>4>#desc:backupalldatabasedatafileinarchivewithrman5>6>#connectdatabase7>connectrcvcatrman/kingdee;8>connecttargetrman/kingdee;9>10>#startbackupdatabase11>run{12>allocatechannelc1typedisk;13>backupfulltag'dbfull'format'/orabck/backfull%u_%s_%p'database14>includecurrentcontrolfile;15>sql'altersystemarchivelogcurrent';16>releasechannelc1;17>}18>#end19>RMAN-06008:connectedtorecoverycatalogdatabaseconnectedtotargetdatabase:EAS(DBID=1540297512)compilingcommand:allocate:executingcommand:allocateallocatedchannel:c1RMAN-08031:releasedchannel:c1RecoveryManagercomplete.到这里表示备份成功。3、继续在测试表中插入记录SQL>insertintotestvalues(2);1rowinsertedSQL>commit;Commitcomplete金蝶软件(中国)有限公司第18页,共35页Oracle10G备份&恢复案例SQL>select*fromtest;A--------------------------------------12SQL>altersystemswitchlogfile;Systemaltered.SQL>altersystemswitchlogfile;Systemaltered.4、关闭数据库,模拟丢失数据文件SQL>shutdownimmediate;Databaseclosed.Databasedismounted.ORACLEinstanceshutdown$rm/oradata/db/EAS/datafile/o1_mf_system_3nd8ob9w_.dbf$rm/oradata/db/EAS/datafile/o1_mf_undotbs1_3nd8obof_.dbf5、启动数据库,检查错误SQL>STARTUPORACLEinstancestarted.TotalSystemGlobalArea102020364bytesFixedSize70924bytesVariableSize85487616bytesDatabaseBuffers16384000bytesRedoBuffers77824bytesDatabasemounted.ORA-01157:cannotidentify/lockdatafile1-seeDBWRtracefileORA-01110:datafile1:'/oradata/db/EAS/datafile/o1_mf_system_3nd8ob9w_.dbf'查询v$recover_fileSQL>select*fromv$recover_file;FILE#ONLINEERRORCHANGE#TIME1ONLINEFILENOTFOUND02ONLINEFILENOTFOUND0可以知道有2个数据文件需要恢复6、利用RMAN进行恢复$rmanRecoveryManager:Release10.2.0.1.0-ProductiononSatNov2403:25:212007RMAN>connecttargetrman/kingdeeconnectedtotargetdatabase:EAS(DBID=1540297512)RMAN>run{金蝶软件(中国)有限公司第19页,共35页Oracle10G备份&恢复案例2>allocatechannelc1typedisk;3>restoredatabase;4>recoverdatabase;5>sql'alterdatabaseopen';6>releasechannelc1;7>}7、检查数据库的数据(完全恢复)SQL>select*fromtest;A--------------------------------------12说明:1、只要有备份与归档存在,RMAN也可以实现数据库的完全恢复(不丢失数据)2、同OS备份数据库恢复,适合于丢失大量数据文件,或包含系统数据文件在内的数据库的恢复3、目标数据库在mount下进行,如果恢复成功,再打开数据库。4、RMAN的备份与恢复命令相对比较简单并可靠,建议有条件的话,都采用RMAN进行数据库的备份。4.4不完全恢复案例4.4.1OS备份下的基于时间的恢复不完全恢复可以分为基于时间的恢复,基于改变的恢复与基于撤消的恢复,这里已基于时间的恢复为例子来说明不完全恢复过程。基于时间的恢复可以不完全恢复到现在时间之前的某一个时间,对于某些误操作,如删除了一个数据表,可以在备用恢复环境上恢复到表的删除时间之前,然后把该表导出到正式环境,避免一个人为的错误。1、连接数据库,创建测试表并插入记录SQL*Plus:Release10.2.0.1.0-ProductiononSatNov2403:17:042007Copyright(c)1982,2005,Oracle.Allrightsreserved.SQL>connect/assysdbaassysdba;Connected.SQL>createtabletest(aint);TablecreatedSQL>insertintotestvalues(1);1rowinsertedSQL>commit;Commitcomplete2、备份数据库,这里最好备份所有的数据文件,包括临时数据文件SQL>@hotbak.sql或冷备份也可以金蝶软件(中国)有限公司第20页,共35页Oracle10G备份&恢复案例3、删除测试表,假定删除前的时间为T1,在删除之前,便于测试,继续插入数据并应用到归档。SQL>insertintotestvalues(2);1rowinsertedSQL>commit;CommitcompleteSQL>select*fromtest;A--------------------------------------12SQL>altersystemswitchlogfile;Statementprocessed.SQL>altersystemswitchlogfile;Statementprocessed.SQL>selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')fromdual;TO_CHAR(SYSDATE,'YY2007-08-2114:43:01SQL>droptabletest;Tabledropped.4、准备恢复到时间点T1,找回删除的表,先关闭数据库SQL>shutdownimmediate;Databaseclosed.Databasedismounted.ORACLEinstanceshutdown.5、拷贝刚才备份的所有数据文件回来$cp...