您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > ORACLE最简单有效的备份恢复方案
ORACLE最简单有效的备份恢复方案ORACLE备份分两种,1.逻辑备份;2.物理备份;逻辑备份又分两种:传统的exp备份;10g开始支持的expdp数据泵备份;物理备份主要就是RMAN备份;最基本的原则是:这些逻辑或物理备份和数据库文件必须放在不同的硬盘上;否者一损俱损;备份就没多大意义了;如果数据库不是很大,比如在50G以下,那么我们就考虑一些傻话化的全备方案我现在的备份方案是:两个逻辑备份和RMAN备份全部用上;1.传统dmp逻辑备份和恢复1.1传统dmp逻辑备份,这个是最简单的备份方法;现在我提供一个简单的脚本:1.1.1首先建立一个bat文件,名字叫:exp_backup.bat内容是:setoracle_username=%1setoracle_password=%2setlocal_tnsname=%3seturl=%oracle_username%/%oracle_password%ifnot%local_tnsname%==seturl=%url%@%local_tnsname%ifexist%oracle_username%_old.dmpdel%oracle_username%_old.dmpifexist%oracle_username%_old.logdel%oracle_username%_old.logifexist%oracle_username%.dmpren%oracle_username%.dmp%oracle_username%_old.dmpifexist%oracle_username%.logren%oracle_username%.log%oracle_username%_old.logexp%url%file=%oracle_username%.DMPlog=%oracle_username%.LOG该脚本是一个通用的最简单的exp脚本;意思就是:备份之间,把以前的备份文件修改名字,后面加上_old,如果本来就有old文件,就删除之;之后,就开始备份;备份的文件目录和该脚本一致(这样做最简单);所以总是会出现一新一旧两个文件;当然只要最新的就行了,所以理论上只要一份文件;但是考虑有可能备份的时候突然报错,这样old文件还在,将就着使用,否者新的是坏的,旧的也没了;有的人做一周7天逻辑循环备份,我觉得没有必要,要那么多旧的备份文件何用,浪费空间;1.1.2然后再做一个bat文件,比如是my_exp.bat内容是:callexp_backup.batUSERPASSWORD如果是在服务器自身上备份,就不需要写入数据库服务名;如果有多个用户数据需要备份;那么就在my_exp.bat继续添加:callexp_backup.batUSER1PASSWORD1….My_EXP.BAT可以做成windows的执行计划,每天不忙的时候执行一次;1.2exp备份的恢复下面就是恢复的最简单方法:1.2.1.把电脑上当前用户彻底删除,用命令,这样就可以把对象彻底清除;DROPUSERXXXCASCADE1.2.2.再创建该用户CREATEUSERxxxxIDENTIFIEDBYxxxxDEFAULTTABLESPACExxxxTEMPORARYTABLESPACETEMP并赋予权限:GRANTDBATOxxxxWITHADMINOPTION1.2.3用IMP恢复C:\impxxxx/xxxxFILE=xxxx.DMPLOG=xxxx.LOGFULL=Y2.10G后的数据泵expdp备份和恢复2.1expdp备份据说这个比exp有很多优点,这个我就不说了,大家可以自己参考资料;不过我测试下来,如果数据量小expdp还是不如exp的;但是还是建议是使用expdp,因为数据会慢慢变大的,用expdp更好些;我最看重的是:expdp备份的文件涵盖的东西更多;所以恢复的时候方便;删除用户后,可以不用再创建用户恢复;实现方法和exp类似:不过,它的目录不像EXP那么直接,需要使用oracle的目录对象;所以2.1.1第一步先创建一个目录对象,比如:SQLcreateorreplacedirectoryLOGIC_BUCKUPas'd:\OACLE_BACKUP\逻辑备份';2.1.2建立一个通用脚本,比如叫EXPDP_BACKUP.BAT内容是:setoracle_username=%1setoracle_password=%2setlocal_tnsname=%3seturl=%oracle_username%/%oracle_password%ifnot%local_tnsname%==seturl=%url%@%local_tnsname%ifexist%oracle_username%_old_dump.dmpdel%oracle_username%_old_dump.dmpifexist%oracle_username%_old_dump.logdel%oracle_username%_old_dump.logifexist%oracle_username%_dump.dmpren%oracle_username%_dump.dmp%oracle_username%_old_dump.dmpifexist%oracle_username%_dump.logren%oracle_username%_dump.log%oracle_username%_old_dump.logEXPDP%url%DIRECTORY=LOGIC_BACKUPDUMPFILE=%oracle_username%_DUMP.DMPLOGFILE=%oracle_username%_DUMP.LOGPARALLEL=2该方法与上面的dmp备份类似;2.1.3然后再做一个bat文件,比如是my_expdp.bat内容是:callexpdp_backup.batUSERPASSWORD如果是在服务器自身上备份,就不需要写入数据库服务名;如果有多个用户数据需要备份;那么就在my_exp.bat继续添加:callexpdp_backup.batUSER1PASSWORD1……同dmp备份一样,My_EXPdp.BAT也可以做成windows的执行计划,每天不忙的时候执行一次;2.2expdp备份的恢复下面就是恢复的最简单方法:2.2.1.把电脑上当前用户彻底删除,用命令,这样就可以把对象彻底清除;DROPUSERXXXXCASCADE2.2.2.用另外一个权限较高的用户(最好不是sys,比如是YYYY)导入:C:\IMPDPyyyy/yyyyDUMPFILE=xxxx_DUMP.DMPLOGFILE=xxxx_DUMP.LOGDIRECTORY=LOGIC_BUCKUPPARALLEL=2(这里的LOGIC_BUCKUP是oracle的对象目录,要和xxxx_dump.dup存放的目录一致)这样就OK了,也即是说用户不需要创建,数据泵文件含有了用户以及它原来的权限;从这点来讲,是不是比IMP导入更为方便;好了,两种逻辑备份讲完了,下面重点说一下RMAN备份;因为在生产系统中,逻辑备份作用不大的,因为它不能实时的备份数据,所以逻辑备份更多的时候是给开发人员互相导入数据和存储过程之类用的;RMAN备份的原理还是有点复杂的,很多细节的我也不是很清楚,不过没关系,我们可以整理出一套最简单的备份方案:3.RMAN备份和恢复3.1.RMAN备份3.1.1首先把数据库参数关注一下,关注下面两个参数第一个参数:db_recovery_file_dest_size,上图中的大小是默认的4G,也就是归档模式下,archivelog的所有归档日志文件大小总和,如果超过这个数,就会导致数据库出问题;所以要非常小心,因而建议修改大一些,比如修改成20G;当然最本质的方法,是要按时清理无用的归档日志;第二个参数:db_recovery_file_dest,这个参数非常重要,是11G里,存放rman备份集和归档日志的地方;默认是放在flash_recovery_area目录下的,因为我的系统的flash_recovery_area和数据库文件在同一个硬盘,所以修改了;3.1.2.关注redo日志文件,每组里要有两个成员,1个在数据库文件的硬盘下,1个在备份文件的硬盘下,因为日志文件写入最频繁,RMAN无法对它备份,或者说任何备份工具都无法对redo日志备份;不过redo它自己可以做冗余,两个文件只要有一个在,即可;比如:3.1.3做一个最简单的rman备份脚本;3.1.3.1首先做一个txt,比如是:autorman.txt内容是:sql'altersystemarchivelogcurrent';backupdatabase;deletenopromptobsolete;这三句话的作用分别是:1.对当前redo日志进行归档;2.备份数据库3.删除无效的archive日志和rman备份集3.1.3.2做一个bat调用上面的autorman.txt,比如是:autorman.bat内容是:rmantarget/@autorman.txt然后就在winddows下做一个执行计划,每天或没隔几天,自动执行一下这个autorman.bat当然备份之前,要用rmanshowall看一下参数设置,有没有自动备份控制文件,如果没有,要加上;3.2rman恢复Rman恢复非常简单;下面说一下步骤:3.2.1假如最新一次全备是3天前的,先随便建立一个新表,比如是test_rman,随便插几条数据;用来测试还原后,这个最新的对象是否也给恢复了;现在用sqlplus登陆,shutdown数据库,然后把oracle的数据库文件全部删除(控制文件,redo日志文件,数据库文件);3.2.2用sqlstartupnomount启动数据库的参数文件,参数文件和数据库文件不在同一个硬盘,所以没丢;这时候如果执行sqlalterdatabasemount会报错,因为mount会加载控制文件,而控制文件已经丢了;3.3.3.把以前控制文件所在的目录建立好,否者rman找不到控制文件恢复路径;然后执行RMANrestorecontrolfilefromautobackup;这样控制文件就回复了,有了控制文件就好办了;3.2.4.以为有了控制文件,所以在sqlplus里,可以装载数据库Sqlalterdatabasemount3.2.5数据库被装载后,说明控制文件生效了,这时候,所有的数据库信息都出来了;所以可以用rman还原数据库了:RMANRESTOREdatabase;3.2.6恢复数据库:RMANrecoverdatabase;2.2.7数据库现在已经全部回复好,可以重新启动了:SQLalterdatabaseopenresetlogs;数据库已更改。2.2.8执行sqlselect*fromtest_rman;能看到数据,说明rman备份集即使是比较旧的,但照样能恢复到出故障时刻的那个状态,这也许就是RMAN的威力吧;
本文标题:ORACLE最简单有效的备份恢复方案
链接地址:https://www.777doc.com/doc-4498225 .html