您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 医学现状与发展 > Oracle备份与容灾详解
Oracle数据安全01020403备份与容灾的重要性备份与容灾概况逻辑备份物理备份05容灾一.为什么要进行备份和容灾?1.1.数据库系统故障案例1:如某客户的IT设备机房突然停电,造成存储磁盘损坏,数据文件也因此损坏,来电后数据库无法启动,如果没有备份,则数据库恢复工作将非常艰难.案例2:某客户的oracle数据库系统采用aix小机做硬件平台,但由于此小机购买年份较早,早过了维保期,某天突然宕机,操作系统无法启动,由于没有专业的小机维护人员,小机始终无法启动,业务也因此无法运行,幸好有异机备份,在短时间内恢复了数据。案例3:某客户要新装一套rac数据库,但由于安装过程报错,需要删除软件并重新安装,但不小心连到了生产数据库,删除了生产库的数据库软件,类似误删除操作还有很多惨痛的案例…一.为什么要进行备份和容灾?1.2.应用程序故障案例:某客户的软件系统在试运行期间,由于需要上新的功能模块,开发人员添加一个栏目时发现添加有问题,需要删掉此栏目,结果删除的时候把上级目录也删掉了,导致整个目录的其他栏目都删掉了,此问题是软件的一个bug,而此时undo回滚表空间的内容也已经冲掉了,如果没有备份,数据将很难找回来。1.3.人为失误案例:某客户维护一张表时,认为数据不再需要了,就truncatetablet_xxx,结果后来又证明那张表还有需要的数据,但后悔已经来不及了…二.备份和容灾概况我们有哪些方式避免各种自然灾害、人为失误及应用程序故障?Oracle为我们提供了多种备份和容灾方式:1.冷备份(操作系统copy数据文件)2.Rman物理备份3.逻辑备份(exp/expdp)4.rac5.数据卫士(Dataguard)6.Goldengate其他厂商提供的备份和容灾方式:IBM的FlashCopyEMC的SRDF等存储复制技术2.1区分物理备份和逻辑备份物理备份就是转储ORACLE物理文件(如数据文件、控制文件、归档日志文件等),一旦数据库发生故障,可以利用这些文件进行还原;逻辑备份就是对数据库对象(如用户、表、存储过程等)利用EXPORT等工具进行导出工作,可以利用IMPORT等工具把逻辑备份文件导入到数据库。特点:物理备份备份的是数据文件、归档日志等底层文件,是真正适用于生产环境的备份,强烈推荐生产库采用物理备份逻辑备份是按一定的格式导出业务数据,适合特定场合,两种备份都不能直接查看数据,需要用相应的工具导入或还原才能读取数据2.2.1什么是冷备份?数据库没有打开的情况下,使用操作系统命令或rman进行备份,由于数据库没有打开,数据库的数据是干净一致的,不存在活动事务。方式:使用操作系统命令直接复制数据文件到另外一个目录即可,windows下直接复制粘贴,其他平台如linux下:cp[oracle@db10gdatafile]$pwd/u01/oradata/ORCL/datafile[oracle@db10gdatafile]$cp*.dbf*.ctl*.log/backup/特点:需要将数据库关闭才能做冷备,这样就影响了业务使用,因此在实际生产环境不具实际使用价值2.2区分冷备份和热备份2.2.2什么是热备份?数据库在open状态,事务还在活动,此时备份就是热备份,oracle数据库支持热备份,最常用最实用的是用rman进行热备份三.rman物理备份Rman是oracle数据库的一个组件,功能强大,既能备份也能恢复rman可以备份这些文件:数据文件归档日志文件参数文件控制文件三.rman物理备份恢复原理:基础整库备份+归档日志(+日志重演)恢复到想要恢复的时间点因此必须开启归档模式,让数据库的在线重做日志保存到归档日志目录里,这样才能利用基点备份+归档日志重演数据库到指定时间而如果使用非归档模式,则数据库不会保存在线重做日志,数据丢失后将不能利用基点备份重演日志,通常用rman做物理备份。查看归档是否开启:使用sys或system用户用sqlplus登录数据库:SYS@orclarchiveloglistDatabaselogmodeArchiveModeAutomaticarchivalEnabledArchivedestination/u01/app/oracle/admin/orcl/archivelog或者:SQLselectlog_modefromv$database;LOG_MODE------------ARCHIVELOG[oracle@db~]$rmantarget/--使用rman登录数据库connectedtotargetdatabase:TESTDB(DBID=2592324560)RMANbackupdatabaseformat'/backup/fullbak_%U';Startingbackupat2013/09/0509:23:00usingtargetdatabasecontrolfileinsteadofrecoverycatalogallocatedchannel:ORA_DISK_1channelORA_DISK_1:sid=145devtype=DISKchannelORA_DISK_1:startingfulldatafilebackupsetchannelORA_DISK_1:specifyingdatafile(s)inbackupsetinputdatafilefno=00001name=/u01/app/oracle/oradata/testdb/system.dbfinputdatafilefno=00003name=/u01/app/oracle/oradata/testdb/sysaux.dbfinputdatafilefno=00004name=/u01/app/oracle/oradata/testdb/users.dbf…channelORA_DISK_1:startingpiece1at2013/09/0509:23:01channelORA_DISK_1:finishedpiece1at2013/09/0509:24:07piecehandle=/backup/fullbak_05oj2uvl_1_1tag=TAG20130905T092301comment=NONEchannelORA_DISK_1:backupsetcomplete,elapsedtime:00:01:06channelORA_DISK_1:startingfulldatafilebackupsetchannelORA_DISK_1:specifyingdatafile(s)inbackupsetincludingcurrentcontrolfileinbackupsetincludingcurrentSPFILEinbackupsetchannelORA_DISK_1:startingpiece1at2013/09/0509:24:10channelORA_DISK_1:finishedpiece1at2013/09/0509:24:11piecehandle=/backup/fullbak_06oj2v1n_1_1tag=TAG20130905T092301comment=NONEchannelORA_DISK_1:backupsetcomplete,elapsedtime:00:00:04Finishedbackupat2013/09/0509:24:113.1备份过程示例:可以看出备份全库时包括两部分:一个数据文件的备份集,其中包括了所有的数据文件,一个控制文件+spfile的备份集,包括了控制文件和spfile[root@dbbackup]#ls-lhtotal811M-rw-r-----1oracleoinstall795MSep509:23fullbak_05oj2uvl_1_1-rw-r-----1oracleoinstall15MSep509:24fullbak_06oj2v1n_1_13.2rman备份恢复场景示例:现在已经做了全备,即基点备份,如果我们需要恢复数据库,我们就可以使用这个全备的rman备份做基点,加上归档日志来恢复,如创建一个表并插入数据,如果此时突然发生磁盘磁盘损坏,导致数据文件损坏及数据库异常终止,可以按如下方法恢复:SQLcreatetablet(idnumber,namevarchar2(30));Tablecreated.SQLinsertintotvalues(1,'mcl');1rowcreated.SQLinsertintotvalues(2,'admin');1rowcreated.SQLinsertintotvalues(3,'dba');1rowcreated.SQLcommit;1.在mcl用户下新建一张表,并插入数据SQLselect*fromt;IDNAME----------------------------------------1mcl2admin3dbaSQLaltersystemswitchlogfile;Systemaltered.2.假设此时磁盘发生损坏,并强制关闭了数据库--强制关闭数据库SQLshutdownabortORACLEinstanceshutdown.--删除数据文件[oracle@dbtestdb]$lscurrent.269.808996433goldengate.dbfredo03.dbfTESTDBundotbs2.dbfcurrent.269.808996433.bakredo01.dbfsysaux.dbfts_bbed.dbfundotbs3.dbfcurrent.bakredo02.dbfsystem.dbfts_mcl.dbfusers.dbf[oracle@dbtestdb]$rm-rf*--启动数据库SQLstartupORACLEinstancestarted.TotalSystemGlobalArea331350016bytesFixedSize2083720bytesVariableSize117441656bytesDatabaseBuffers205520896bytesRedoBuffers6303744bytesORA-00205:errorinidentifyingcontrolfile,checkalertlogformoreinfoSQLselectinstance_name,statusfromv$Instance;INSTANCE_NAMESTATUS----------------------------testdbSTARTED3.恢复控制文件RMANrestorecontrolfilefrom'/backup/fullbak_06oj2v1n_1_1';Startingrestoreat2013/09/0510:46:47usingtargetdatabasecontrolfileinsteadofrecoverycatalogallocatedchannel:ORA_DISK_1channelORA_DISK_1:sid=156devtype=DISKchannelORA_DISK_1:restoringcontrolfilechannelORA_DISK_1:restorecomplete,elapsedtime:00:00:03outputfilename=/u01/app/oracle/oradata/testdb/current.269.808996433Finishedrestoreat2013/09/0510:46:51--mount控制文件SQLalterdatabasemount;Databasealtered.SQLselectinstance_name,statusfromv$Instance;INSTANCE_NAMESTATUS----------
本文标题:Oracle备份与容灾详解
链接地址:https://www.777doc.com/doc-3600510 .html