资源预览内容
第1页 / 共44页
第2页 / 共44页
第3页 / 共44页
第4页 / 共44页
第5页 / 共44页
第6页 / 共44页
第7页 / 共44页
第8页 / 共44页
第9页 / 共44页
第10页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据库备份与恢复数据库备份与恢复一、备份和恢复的基本概念数据丢失的分类数据丢失可分为逻辑丢失和物理丢失逻辑丢失:用户错误操作和应用程序错误造成物理丢失:数据库物理结构破坏备份和恢复的分类逻辑备份和逻辑恢复物理备份和物理恢复物理恢复的原则:所有的文件必须在时间点上物理恢复的原则:所有的文件必须在时间点上一致。一致。逻辑恢复崩溃恢复(Crash Recovery)与实例恢复(Instance Recovery):包括缓存恢复(Cache Recovery)和事务恢复(Transaction Recovery)。 缓存恢复:利用联机重做日志文件进行恢复。 事务恢复:回退(rollback)未提交的事务。介质恢复(Media Recovery):利用归档重做日志文件和联机重做日志文件进行恢复。逻辑备份和物理备份逻辑备份和物理备份的内容。物理备份可分为冷备份和热备份。如果要进行热备份,数据库必须要处于归档模式。如果要进行热备份,数据库必须要处于归档模式。如果要进行冷备份,数据库可以是归档模式,也可以是非归档模式。冷备份只能将数据库恢复到备份时的状态。热备份可以将数据库恢复到故障时的状态,或者将数据库恢复到一个指定的时间点(称为基于时间点的恢复)。物理备份的方式一致性备份一致性备份(Consistent Backup):shutdown immediate/normal时备份。不需要重做日志来进行时备份。不需要重做日志来进行恢复。恢复。非一致性备份非一致性备份(Inconsistent Backup):open时或时或shutdown abort时备份。需要重做日志来进行恢复。时备份。需要重做日志来进行恢复。(如果联机重做日志文件丢失,需要有所有数据文件如果联机重做日志文件丢失,需要有所有数据文件的备份。的备份。)备份的内容:整库备份的内容:整库、表空间表空间、数据文件数据文件、控制文件控制文件、归档重做日志文件、SPfile或Pfile、密码文件、网络文件(listener.ora和tnsnames.ora)。联机重做日志文联机重做日志文件不备份件不备份!逻辑备份和物理备份的适用策略逻辑备份只能防止逻辑丢失。物理备份既能防止逻辑丢失,又能防止物理丢失。 二、逻辑备份和逻辑恢复逻辑备份使用EXP程序完成逻辑备份可分为:指定表的逻辑备份、指定用户的逻辑备份和整库逻辑备份C:EXP -HELP一个文件里只能存放一次备份各个参数的含义与默认值USERID;FULL;BUFFER;OWNER;FILE;TABLES;COMPRESS;RECORDLENGTH;GRANTS;RECORD;ROWS;PARFILE;CONSTRAINTSCONSISTENT;LOGSTATISTICS 可取COMPUTE、ESTIMATE、NONE。DIRECT;TRIGGER;FEEDBACK 值为0时禁用逻辑备份例子指定表的逻辑备份指定表的逻辑备份c:exp USERID=system/oracleerp tables=scott.emp, scott.dept, hr.employeesfile=c:logbacked.dmp指定用户的逻辑备份指定用户的逻辑备份c:exp USERID=system/oracleerp owner=scott file=c:logbackscott.dmp整库逻辑备份整库逻辑备份c:exp USERID=system/oracleerp full=y file=c:logbackfull.dmp注意:不能同时指定注意:不能同时指定owner和和tables!逻辑恢复C:IMP -HELP参数的含义与默认值。FROMUSERTOUSERTABLESIGNORE逻辑恢复的四个例子表不存在(假设删除scott用户下的EMP和DEPT表)c:imp userid=system/oracleerp fromuser=scott tables=emp,dept file=c:logbacked.dmp表存在,数据丢失c:imp userid=system/oracleerp fromuser=scott tables=emp,dept file=c:logbacked.dmp ignore=y 逻辑恢复顺序:对象类型,表的结构表的结构,表的数据,表的索引,表的约束,视图,函数和过程,触发器。逻辑恢复前将约束关闭。用户不存在(假设删除scott用户)先要创建scott用户。c:imp userid=system/oracleerp fromuser=scott file=c:logbackscott.dmp4整库丢失先创建一个同名数据库(注意数据库不同名不能恢复注意数据库不同名不能恢复!)。C:imp userid=system/oracleerp full=y file=c:logbackfull.dmp三、用OS方式进行物理备份物理备份的基本概念物理备份的基本概念物理数据备份可分为冷备份(cold)和热备份(hot)。即脱机备份(offline backup)和联机备份(online backup)。用用OS方式冷备份方式冷备份非归档模式下:非归档模式下:只能进行冷备份(cold),不能进行热备份(hot)。冷备份要备份所有文件的控制文件、数据文件,冷备份要备份所有文件的控制文件、数据文件,不包括联机重做日志文件。恢复时也要恢复所有的控制文件、数据文件,不包括联机重做日志文件,即使只有一个文件破坏。归档模式下,归档模式下,冷备份可以备份单个文件。恢复时可以恢复单个数据文件。恢复时可以恢复单个数据文件。非归档模式下实例一实例实例1:冷备份不包括联机重做日志文件情况下的恢复。:冷备份不包括联机重做日志文件情况下的恢复。错误现象:ORA-00322: 日志 1 (线程 1) 不是当前副本ORA-00312: 联机日志 1 线程 1: D:ORACLEORADATAORADBREDO01.LOGSQL recover database until cancel不完全介质恢复。用重置日志(resetlogs)的方式打开数据库:SQL alter database open resetlogs;用重置日志(resetlogs)的方式开开数据库,Oracle会执行两个操作:a. 重新创建所有的联机重做日志文件。b.将日志的序列号归为1。生成一个新的数据库incarnation。注意:冷备份后添加的数据会丢失!注意:冷备份后添加的数据会丢失!非归档模式下实例二实例实例2:冷备份包括联机重做日志文件情况下的恢复。:冷备份包括联机重做日志文件情况下的恢复。(建议采用这种方式!建议采用这种方式!)冷备份可用物理数据库的移植非归档模式下实例三实例实例3:冷备份的情况下能否恢复单个数据文件?:冷备份的情况下能否恢复单个数据文件?在联机重做日志文件没有覆盖的情况下,可以恢复单在联机重做日志文件没有覆盖的情况下,可以恢复单个数据文件。并且不丢失数据。个数据文件。并且不丢失数据。在联机重做日志文件被覆盖的情况下,不能恢复单个在联机重做日志文件被覆盖的情况下,不能恢复单个数据文件。数据文件。归档模式下实例实例实例1:在归档模式下用冷备份恢复整个数据库。:在归档模式下用冷备份恢复整个数据库。恢复方法:SQL recover database until cancel using backup controlfile;SQL alter database open resetlogs;备份联机重做日志文件会带来的危险: 1.造成不完全恢复2.重复生成具有相同顺序号的联机重做日志文件用OS方式进行热备份演示:非归档模式为什么不能进行热备份?如果联机重做日志文件没有覆盖,可以。如果联机重做日志文件志覆盖,不可以。控制文件的备份和恢复首先进行控制文件的备份:SQL alter database backup controlfile to c:control.bak;将数据库关闭后删除所有的控制文件。SQL recover database until cancel using backup controlfile;注意应用归档日志文件和联机重做日志文件的方法:注意应用归档日志文件和联机重做日志文件的方法:如果有所需要的归档日志文件,按回车键。如果没有所需要的归档日志文件,依次用每一个联机重做日志文件来试。SQL alter database open resetlogs;用重置日志(resetlogs)的方式开开数据库,Oracle会执行两个操作:a. 重新创建所有的联机重做日志文件。b.将日志的序列号归为1。生成一个新的数据库incarnation。联机重做日志文件的恢复联机重做日志文件没有备份,只能有命令来恢复。如果丢失非当前组的联机重做日志文件:SQLalter database clear logfile D:ORACLEORADATAERPREDO02.LOG;如果丢失当前组的联机重做日志文件:SQL shutdown immediateSQL recover database until cancel;SQL alter database open resetlogs;演示:演示:(无法恢复无法恢复)SQL shutdown abort;然后删除所有的联机重做日志文件。SQL recover database until cancel;SQL alter database open resetlogs;要点: abort方式关闭数据库时如果丢失联机重做日志文件,数据库不能恢复。只能用以前的备份恢复。数据文件的备份和恢复能否只拷贝文件来备份数据库?不能!要防止断裂数据块(Fractured Block)。在备份数据文件之前首先要将数据文件所在的表空间设成备份模式:SQLalter tablespace users begin backup;将文件复制出来然后结束表空间的备份模式SQLalter tablespace users end backup;对该表空间的操作记录在联机重做日志文件恢复数据文件时先将该文件还原,然后进行恢复SQLrecover datafile c:oracleoradataerpusers01.dbf; 验证备份C: dbv file=d:users01.dbf blocksize=8192四、用恢复管理器进行热备份恢复目录恢复目录(recovery catalog)的概念的概念没有恢复目录和有恢复目录的区别:没有恢复目录:备份信息存放在备份数据库的控制文件中。有恢复目录:备份信息存放在恢复目录中。创建恢复目录的步骤:每个数据库中已经有了RMAN用户,恢复目录也有了。先要解除RMAN用户的锁定,然后用SQL*PLUS登录修改其密码。恢复管理器恢复管理器1. 使用RMAN没有恢复目录:c:RMAN target=sys/oraclerp nocatalog有恢复目录:c :RMAN target=sys/oracleerp catalog=rman/rmanoemrep 2. 如果要删除和创建恢复目录RMAN drop catalog;RMAN create catalog;3. 备份之前首先要注册数据库RMAN register database;4. 查看恢复管理器的配置:RMANshow all;备份命令备份整个数据库:备份整个数据库:RMANrun allocate channe cl type disk;backup full filesperset 3(database format rm_%s%p.%d);release channel cl;备份集(backup set)和备份段(backup piece)的含义格式的定义:%s:备份集号;%p:piece备份段号;%d:database 数据库名;%c(copy号):总为1; %u:自动生成的8个字符的唯一名称;%t:时间默认格式为 %U=%u_%p_%c简化命令备份整个数据库RMAN backup database;备份集的默认路径是C:OracleOra92Database通道的分配和释放可以省略指定备份集的路径:RMAN backup database format c:rmandb_%U;备份文件备份一个表空间备份一个表空间RMAN backup tablespace users format c:rmants_%U;备份一个数据文件备份一个数据文件RMAN backup datafile c:oracleoradataerpusers01.dbf format c:rmandf_%U;备份控制文件备份控制文件RMANBackup current controlfile format c:rmanctl_%U;备份归档日志文件备份归档日志文件RMANbackup filesperset 20 format c:rmanal_%U archivelog all delete input; 也可以采用复制的方式备份数据文件和控制文件复制数据文件复制数据文件RMANcopy datafile c:oracleoradataERPusers01.dbf to c:rmanusers01.dbf;复制控制文件复制控制文件RMANcopy current controlfile to c:rmanctl.bak;管理备份集的命令查看数据库的备份查看数据库的备份RMANlist backup of database;查看废弃的数据库备份查看废弃的数据库备份RMAN report obsolete;删除废弃的数据库备份删除废弃的数据库备份RMAN delete obsolete;注意不要直接删除备份集的文件。注意不要直接删除备份集的文件。删除一个备份集:删除一个备份集:RMANchange backuppiece C:ORACLEORA92DATABASE08FKRJDB_1_1 delete; RMANchange backupset 9 unavailable;管理备份脚本的命令创建脚本:RMAN create script MyBackup Allocate channel cl type disk;Backup full filesperset 3(database format rm_%s%p.%d);release channel c1;执行脚本:RMAN run execute script MyBackup; 修改脚本:RMAN replace script MyBackup . 删除脚本:RMAN delete script MyBackup; 查看脚本:RMAN print script MyBackup; (注意脚本名区分大小写。)查询备份内容:视图RC_DATABAE、RC_STORED_SCRIPT、RC_STORED_SCRIPT_LINE。五、五、用恢复管理器进行物理恢复恢复命令恢复命令 恢复实例恢复实例 增量备份增量备份用图形界面进行物理备份和物理恢复用图形界面进行物理备份和物理恢复 删除目标数据库的注册删除目标数据库的注册 SQL *Loader的使用的使用恢复命令从备份集中复原一个数据文件:从备份集中复原一个数据文件:RMAN restore datafile C:oracleoradataERPusers01.dbf;恢复一个数据文件:恢复一个数据文件:RMAN recover datafile C:oracleoradataERPusers01.dbf;从备份集中复原一个表空间:从备份集中复原一个表空间:RMANrestore tablespace users;恢复一个表空间:恢复一个表空间:RMANrecover tablespace users;恢复实例丢失单个数据文件 丢失多个数据文件 在有恢复目录的情况下丢失所有文件 基于时间点的恢复 在线恢复丢失单个数据文件(假设丢失数据文件C:oracleoradataERPusers01.dbf)恢复步骤:RMAN restore datafile C:oracleoradataERPusers01.dbf;RMAN recover datafile C:oracleoradataERPusers01.dbf;RMANsql alter database open;丢失多个数据文件(假设丢失数据文件C:oracleoradataERPusers01.dbf 和C:oracleoradataERPtools01.dbf) 恢复步骤:RMAN restore datafile C:oracleoradataERPusers01.dbf;RMAN recover datafile C:oracleoradataERPusers01.dbf;RMANsql alter database open; 这一步会出错,继续恢复下一个数据文件。RMAN restore datafile C:oracleoradataERPtools01.dbf;RMAN recover datafile C:oracleoradataERPtools01.dbf;RMANsql alter database open;在有恢复目录情况丢失所有文件首先做一个数据库的整库备份:RMAN backup database format c:rman%U;备份完后一定要切换一次日志文件备份完后一定要切换一次日志文件SQL alter system switch logfile; (演示如果没有这一步的结果。) 然后将数据库关闭,删除所有文件。 准备启动数据库 RMANstartup 这一步会出错,然后进行恢复。恢复首先恢复控制文件:RMAN restore controlfile;接着恢复所有的数据文件:RMAN restore database;RMAN shutdown immediate;RMAN startup; 下面的两步要用SQL * PLUS来完成SQL recover database until cancel using backup controlfile;(演示recover database until cancel 的错误。)SQL alter database open resetlogs;注意:恢复完后要添加临时文件。注意:恢复完后要添加临时文件。注意:注意:用resetlogs的方式打开数据库后要在恢复目录中重置目标数据库,否则不能备份。RMANreset database;基于时间点的恢复首先做一个数据库的整库备份RMAN backup database format c:rman%U;将数据库改成MOUNT状态RMANshutdown immediate;RMANstartup mount;设置时间格式的环境变量退出RMAN,C:/set nls_date_format = yyyy-mm-dd hh24:mi:ss重新登录RMANRMANrun sql alter session set nls_language=AMERICAN_AMERICA.ZHS16GBK ;sql “alter session set nls_date_format =YYYY-MM-DD HH24:MI:SS;set until time to_date(2006-07-25 14:25:30,YYYY-MM-DD HH24:MI:SS);allocate channe cl type disk;restore database;recover database;release channel cl;SQL alter database open resetlogs;在线恢复将数据库关闭后删除数据文件C:oracleoradataERPusers01.dbf。将数据文件C:oracleoradataERPusers01.dbf脱机后启动数据库SQL ALTER DATABASE DATAFILE C:oracleoradataERPusers01.dbf OFFLINE;恢复步骤:RMAN restore datafile C:oracleoradataERPusers01.dbf;RMAN recover datafile C:oracleoradataERPusers01.dbf;然后在SQL * PLUS 中将数据文件联机:SQL ALTER DATABASE DATAFILE C:oracleoradataERPusers01.dbf ONLINE;增量备份增量备份可分为0-4级,0级为完全备份。增量备份可分为:差异式:最近一次=n级增量备份以后变化了的数据。 累加式:最近一次 Backup incremental level 0 Differentialtag backup_db_level_0filesperset 6format c:rmandb_%Udatabase;累加式增量备份的关键字为cumulative。在增量备份与归档日志之间,RMAN优先采用增量备份进行恢复。采用增量备份进行恢复比采用归档日志进行恢复效率要高。用图形界面进行物理备份和物理恢复节点的首选身份证明设成Administrator(密码不能为空)在本地安全策略中给Administrator分配作为批处理作业登录权限图形界面的备份和命令行的备份可以互用图形界面的备份和命令行的备份可以互用图形界面可以恢复控制文件可以恢复丢失所有文件的情况,要结合命令完成。可以做基于时间点的恢复数据库打开时,可以在线恢复删除目标数据库的注册用rman/rman登录恢复目录数据库。SQLselect * from db;SQLexecute dbms_rcvcat.unregisterdatabase(DB_KEY,DB_ID);SQLselect * from db;SQL *Loader的使用SQL *Loader的作用:将文本文件中的数据加载到Oracle 数据库中 先创建数据文件c:data.txt 10001,Scott Tiger, 1000, 40 10002,Frank Naude, 500, 20然后创建控制文件c:control.txtload data infile c:data.txt append into table emp fields terminated by , optionally enclosed by ( empno, empname, sal, deptno ) 表空,用INSERT(缺省)。表非空,用APPEND、REPLACE、TRUNCATE然后执行SQL *Loader:c:sqlldr system/oracleerp control=c:control.txt练习练习一练习一 用用EXP和和IMP进行逻辑备份和逻辑恢复进行逻辑备份和逻辑恢复练习二练习二 在非归档模式下进行数据库的冷备份和恢复在非归档模式下进行数据库的冷备份和恢复练习三练习三 在有恢复目录的情况下用在有恢复目录的情况下用RMAN进行数据库进行数据库的热备份的热备份练习四练习四 在有恢复目录的情况下用在有恢复目录的情况下用RMAN进行数据库进行数据库的恢复的恢复练习一练习一练习一 用用EXP和和IMP进行逻辑备份和逻辑恢复进行逻辑备份和逻辑恢复首先用EXP进行一个数据库的整库逻辑备份c:exp USERID=system/oracleerp full=y file=c:logbackfull.dmp然后进行下面三种情况下的逻辑恢复a. 表不存在的情况:删除scott用户下的EMP和DEPT表,然后用下面的命令恢复删除的表:c:imp userid=system/oracleerp fromuser=scott tables=emp,dept file=c:logbackfull.dmp恢复完后检查数据是否完整。b. 表存在,数据丢失的情况:删除scott用户下的EMP表的所有数据,但表不要删除,然后用下面命令恢复删除表的数据:c:imp userid=system/oracleerp fromuser=scott tables=emp file=c:logbackfull.dmp ignore=y 用户不存在的情况:删除scott用户,然后用下面的命令恢复删除的用户:c:imp userid=system/oracleerp fromuser=scott file=c:logbackfull.dmp检查出现的错误。创建scott用户,并将它添加到connect和resource角色。然后再用下面命令恢复删除的用户:c:imp userid=system/oracleerp fromuser=scott file=c:logbackfull.dmp练习二练习二练习二 在非归档模式下进行数据库的冷备份和恢复在非归档模式下进行数据库的冷备份和恢复将数据库关闭,然后进行数据库的冷备份。SQLshutdown immediate将数据库所有的控制文件、数据文件复制到c:cold目录。启动数据库SQLstartup然后将scott用户删除。将数据库关闭,将冷备份的文件从c:cold目录复制到数据库文件所在的目录。启动数据库,将出现下面错误:错误现象:ORA-00322: 日志 1 (线程 1) 不是当前副本ORA-00312: 联机日志 1 线程 1: D:ORACLEORADATAORADBREDO01.LOG进行不完全介质恢复SQL recover database until cancel用重置日志(resetlogs)的方式打开数据库SQL alter database open resetlogs;恢复完后检查scott用户及其方案下的数据是否存在练习三练习三练习三 在有恢复目录的情况下用在有恢复目录的情况下用RMAN进行数据库进行数据库的热备份的热备份练习四练习四练习四 在有恢复目录的情况下用在有恢复目录的情况下用RMAN进行数据库的恢复进行数据库的恢复首先做一个数据库的整库备份:RMAN backup database format c:rman%U;备份完后一定要切换一次日志文件:备份完后一定要切换一次日志文件:SQL alter system switch logfile; (演示如果没有这一步的结果。)然后将数据库关闭,删除所有文件。准备启动数据库:SQLstartup 这一步会出错,然后进行恢复。首先恢复控制文件:RMAN restore controlfile;接着恢复所有的数据文件:RMAN restore database;RMAN shutdown immediate;RMAN startup; 下面的两步要用SQL * PLUS来完成SQL recover database until cancel using backup controlfile;(演示recover database until cancel 的错误。)SQL alter database open resetlogs;注意:恢复完后要添加临时文件。注意:恢复完后要添加临时文件。注意:注意:用resetlogs的方式打开数据库后要在恢复目录中重置目标数据库,否则不能备份。RMANreset database;
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号