数据库备份恢复方案

attach 贡献于2012-04-11

作者 lijun  创建于2005-12-20 11:26:00   修改者lijun  修改于2006-04-14 00:47:00字数42843

文档摘要:由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障),可能影响数据库系统的操作、影响数据库中数据的准确性,甚至于破坏数据库,使得数据库中全部或部分数据丢失。一旦出现故障,必须尽可能地重构这个完整的数据库,该处理过程称为数据库的恢复过程。 数据库的恢复过程大致可以分为复原(Restore)与恢复(Restore)过程。
关键词:

目录 1 数据库恢复摘要 3 1.1 实例故障的一致性恢复 3 1.2 介质故障或文件错误的不一致恢复 3 2 生产数据库现有备份策略 4 3 生产环境描述 5 3.1 操作系统版本 5 3.2 Oracle数据库版本 5 3.3 数据库现有数据文件 6 3.4 数据库现有控制文件 7 3.5 数据库现有联机日志文件 7 3.6 其它 8 4 现有备份脚本 8 4.1.1 逻辑备份 8 4.1.2 数据库全备 8 4.1.3 归档日志的备份 9 4.1.4 其它备份内容 9 5 读取恢复过程中的相关信息 10 5.1 恢复时可参考的信息 10 5.2 几个重要视图 10 5.3 数据库完整恢复和极端恢复 10 5.3.1 数据库完整恢复到本地 10 5.3.2 数据库完整恢复到异地 12 5.3.3 catalog数据库损坏时的恢复 14 5.3.4 HP DP IDB的备份和恢复 14 5.3.5 极端情况下的恢复 15 5.4 数据库不完整恢复 15 5.4.1 基于改变 15 5.4.2 基于时间 16 5.4.3 基于日志序列 17 5.5 数据库文件级别的恢复 17 5.5.1 控制文件损坏 17 5.5.2 数据文件损坏 20 5.5.3 日志文件损坏 21 5.5.4 回滚表空间损坏 23 5.5.5 临时文件损坏 24 5.5.6 从带库中恢复归档日志 24 5.6 恢复过程中的FAQ 24 6 BC镜像技术 25 6.1 正向同步数据库并启动实例 25 6.2 反向同步并进行数据库恢复 29 6.3 利用BC进行数据库恢复 30 7 附件 30 7.1 附dup-db脚本 30 7.2 附:生产数据库initorcl.ora 31 7.3 附:生产数据库oracle用户环境变量 32 7.4 附:生产数据库tnsnames.ora 34 7.5 附:生产数据库listener.ora 37 7.6 RMAN的管理 38 7.6.1 Report命令 38 7.6.2 List命令 39 7.6.3 Crosscheck命令 39 7.6.4 Delete 命令 39 7.7 配置catalog数据库 40 1 数据库恢复摘要 由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障),可能影响数据库系统的操作、影响数据库中数据的准确性,甚至于破坏数据库,使得数据库中全部或部分数据丢失。一旦出现故障,必须尽可能地重构这个完整的数据库,该处理过程称为数据库的恢复过程。 数据库的恢复过程大致可以分为复原(Restore)与恢复(Restore)过程。 数据库恢复可以分为以下两类: 1.1 实例故障的一致性恢复 在服务器掉电、数据库后台进程故障等意外或手工地发出SHUTDOWN ABORT语句中止实例时都可能会导致实例发生故障,此时需要进行实例恢复。实例恢复就是将数据库恢复到故障之前的事务一致性状态。一般情况下ORACLE在下次数据库启动时,会自动地执行实例恢复过程,自动地激发实例恢复,有下列处理过程: 1. 为了解恢复数据文件中没有记录的数据,进行向前滚。该数据记录在在线日志,包括对回滚段的内容恢复。 2. 回滚未提交的事务,按步1重新生成回滚段所指定的操作。 3. 释放在故障时正在处理事务所持有的资源。 4. 解决在故障时正经历一阶段提交的任何悬而未决的分布事务。 在自动恢复无法实现时,就必须执行介质恢复过程。 1.2 介质故障或文件错误的不一致恢复 介质故障是当一个数据库文件、一个数据库文件的部分或磁盘不能读或不能写时出现的故障。 数据库文件错误一般指意外的错误导致文件被删除或意外事故导致文件的不一致状态。 这种情况下的数据库是不一致的,需要DBA手工来进行数据库的恢复,这种恢复有两种形式,取决于于数据库运行的方式是归档方式还是非归档方式。 1. 完全介质恢复可恢复全部丢失的修改。一般情况下需要有数据库的备份同时数据库运行在归档方式下并且有可用的归档日志。对于不同类型的错误,有不同类型的完全介质恢复过程。 2. 不完全介质恢复是在完全介质恢复不可能或不要求时进行的介质恢复。重构受损的数据库,使其恢复介质故障前或用户出错之前的一个事务一致性状态。不完全介质恢复有下列类型:基于撤消、基于时间和基于修改。 基于撤消(CANCEL)恢复:在某种情况,不完全介质恢复必须被控制,DBA可撤消在指定点的操作。基于撤消的恢复用于在一个或多个日志组(在线的或归档的)出现介质故障,不能用于恢复过程时使用,此时DBA需要指定数据库恢复到可用的日志组的状态,以便在恢复数据库时使用最近的、未损坏的日志组。 基于时间(TIME)和基于修改(SCN)的恢复:如果DBA希望恢复到过去的某个指定点,是一种理想的不完全介质恢复,一般发生在恢复到某个特定操作之前,恢复数据库到如意外删除某个数据表之前。 2 生产数据库现有备份策略 为满足客户需求,保证生产数据库的高可用性,同时在出现数据库故障时,能在最短时间内进行数据库恢复。目前有如下几个方面的备份考虑: 序号 备份名称 备份方法 时间点 保护期 恢复方法 适用范围 1 按用户逻辑导出备份 利用客户端连接数据库进行用户数据导出备份 每日0:00 ~ 可将需要的备份文件置于服务器上或客户端服务器,然后进行逻辑导入即可恢复 用户表和数据丢失 2 利用rman进行数据库全备 调用rman全备脚本定时执行。 每日3:00 12周 利用HP DataProtecorrman进行 硬件或误操作导致数据文件、控制文件等异常 3 备份归档日志 调用rman全备脚本定时执行 每日1:00 12周 联合全备可将数据库恢复到故障前。 4 移交调度的数据库备份 调用rman全备脚本定时执行 每月1日 0:00 ~ 利用HP DataProtecor软件执行rman命令完成备份,磁带取出上交 历史数据备份 5 日常手工触发 备份控制文件:alter database backup control file to trace; 备份参数文件:create pfile=’’ from spfile; 目前生产数据库采用oracle9i RAC高可用集群环境,由两个节点构成,节点1上数据库实例名为orcl1,节点2数据库实例名为orcl2。生产数据库处于归档模式下,数据库名为orcl,服务名为orcl,数据库文件(数据文件、控制文件、在线日志文件)均采用裸设备。生产数据库处于归档模式,归档目录在两个节点上分别为/arch1和/arch2,这两个目录通过NFS使得在二个节点都可以识别。 catalog数据库在集群环境中可以实现在两个节点中的某个节点启动,目前catalog数据库运行在节点1上。 3 生产环境描述 3.1 操作系统版本 uname –a HP-UX B.11.11 U 9000/800 2899899387 3.2 Oracle数据库版本 DBID:1020406859 NAME:ORCL select * from v$version; Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production PL/SQL Release 9.2.0.4.0 - Production CORE 9.2.0.3.0 Production TNS for HPUX: Version 9.2.0.4.0 - Production NLSRTL Version 9.2.0.4.0 – Production 3.3 数据库现有数据文件 select file#,status,enabled,name from v$datafile; FILE# STATUS ENABLED NAME 1 SYSTEM READ WRITE /dev/vg_database/rsystem 2 ONLINE READ WRITE /dev/vg_database/rundotbs1 3 ONLINE READ WRITE /dev/vg_database/rcwmlite 4 ONLINE READ WRITE /dev/vg_database/rdrsys 5 ONLINE READ WRITE /dev/vg_database/rindx 6 ONLINE READ WRITE /dev/vg_database/rodm 7 ONLINE READ WRITE /dev/vg_database/rtools 8 ONLINE READ WRITE /dev/vg_database/rundotbs2 9 ONLINE READ WRITE /dev/vg_database/rusers 10 ONLINE READ WRITE /dev/vg_database/rxml 11 ONLINE READ WRITE /dev/vg_database/rmis_control_data 12 ONLINE READ WRITE /dev/vg_database/rmis_userinfo_data 13 ONLINE READ WRITE /dev/vg_database/rmis_temp_data 14 ONLINE READ WRITE /dev/vg_database/rmis_userinfo_index 15 ONLINE READ WRITE /dev/vg_database/rmis_temp_index 16 ONLINE READ WRITE /dev/vg_database/rmis_history_data01 17 ONLINE READ WRITE /dev/vg_database/ripcc_control_data 18 ONLINE READ WRITE /dev/vg_database/ripcc_temp_data 19 ONLINE READ WRITE /dev/vg_database/ripcc_history_data 20 ONLINE READ WRITE /dev/vg_database/ripcc_userinfo_data 21 ONLINE READ WRITE /dev/vg_database/rtbi_system 22 ONLINE READ WRITE /dev/vg_database/rtbi_rule 23 ONLINE READ WRITE /dev/vg_database/rtbi_wsdl 24 ONLINE READ WRITE /dev/vg_database/rtbi_tran_log 25 ONLINE READ WRITE /dev/vg_database/rtbi_auth_log 26 ONLINE READ WRITE /dev/vg_database/rtbi_index 27 ONLINE READ WRITE /dev/vg_database/rmis_workflow 28 ONLINE READ WRITE /dev/vg_database/rmis_control_data1 29 ONLINE READ WRITE /dev/vg_database/rmis_history_data02 30 ONLINE READ WRITE /dev/vg_database/roralv01 31 ONLINE READ WRITE /dev/vg_database/roralv02 32 ONLINE READ WRITE /dev/vg_database/roralv03 33 ONLINE READ WRITE /dev/vg_database/roralv04 34 ONLINE READ WRITE /dev/vg_database/roralv05 35 ONLINE READ WRITE /dev/vg_database/roralv11 36 ONLINE READ WRITE /dev/vg_database/roralv12 37 ONLINE READ WRITE /dev/vg_database/roralv14 38 ONLINE READ WRITE /dev/vg_database/roralv06 39 ONLINE READ WRITE /dev/vg_database/rmis_history_data03 40 ONLINE READ WRITE /dev/vg_database/rmis_history_data04 41 ONLINE READ WRITE /dev/vg_database/rmis_history_data05 42 ONLINE READ WRITE /dev/vg_database/roralv15 43 ONLINE READ WRITE /dev/vg_database/roralv16 44 ONLINE READ WRITE /dev/vg_database/rmis_history_data08 45 ONLINE READ WRITE /dev/vg_database/rmis_history_data06 46 ONLINE READ WRITE /dev/vg_database/roralv07 47 ONLINE READ WRITE /dev/vg_database/roralv08 48 ONLINE READ WRITE /dev/vg_database/roralv09 49 ONLINE READ WRITE /dev/vg_database/roralv10 50 ONLINE READ WRITE /dev/vg_database/roralv17 51 ONLINE READ WRITE /dev/vg_database/roralv18 52 ONLINE READ WRITE /dev/vg_database/roralv19 53 ONLINE READ WRITE /dev/vg_database/rmis_history_data07 54 ONLINE READ WRITE /dev/vg_database/rmis_history_data09 55 ONLINE READ WRITE /dev/vg_database/rmis_history_data10 56 ONLINE READ WRITE /dev/vg_database/roralv20 57 ONLINE READ WRITE /dev/vg_database/rroralv46 58 ONLINE READ WRITE /dev/vg_database/rroralv47 59 ONLINE READ WRITE /dev/vg_database/rroralv45 60 ONLINE READ WRITE /dev/vg_database/rroralv39 61 ONLINE READ WRITE /dev/vg_database/rroralv40 3.4 数据库现有控制文件 select * from v$controlfile; STATUS NAME /dev/vg_database/rcontrol1 /dev/vg_database/rcontrol2 /dev/vg_database/rcontrol3 3.5 数据库现有联机日志文件 select * from v$logfile; GROUP# STATUS TYPE MEMBER 1 ONLINE /dev/vg_database/rredo1_1 2 ONLINE /dev/vg_database/rredo1_2 3 ONLINE /dev/vg_database/rredo1_3 4 ONLINE /dev/vg_database/rredo2_1 5 ONLINE /dev/vg_database/rredo2_2 6 ONLINE /dev/vg_database/rredo2_3 3.6 其它 4 现有备份脚本 4.1.1 逻辑备份 每日逻辑导出MIS、IPCC、SMS用户数据。 备份脚本: exp 用户名/密码 file=/路径/name.dmp log=/路径/name.log fromuser=xx 恢复脚本: imp用户名/密码 file=/路径/name.dmp log=/路径/name.log touser=xx 基于表的恢复可在上述语句中加tables=(xx,xx) 4.1.2 数据库全备 orcl_full_lb run { allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_1' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_2' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_3' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_4' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_5' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_6' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_7' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_8' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_9' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_10' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_11' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_12' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_13' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_14' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_15' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; backup incremental level filesperset 1 format 'orcl1_full_lb.dbf' database include current controlfile; backup filesperset 1 format 'orcl1_full_lb.dbf' archivelog all; } 备份成功后,DP将自动导出并备份catalog数据库信息。 4.1.3 归档日志的备份 orcl1_arch_lb run { allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_arch_lb)'; backup incremental level filesperset 1 format 'orcl1_arch_lb.dbf' archivelog all delete input; } 4.1.4 其它备份内容 对catalog数据库可以进行手工方式的逻辑备份 $export ORACLE_SID=rman $exp rman/rman file=/orclbak/rmanexp.dmp log=/orclbak/rmanexp.log $imp rman/rman file=/orclbak/rmanexp.dmp log=/orclbak/imprman.log 备份RMAN数据库,也可使用如下脚本: EXP pafile =exprman.sql exprman.sql的内容为为 USERID=RMAN/* OWNER=RMAN FILE=RMAN.DMP ROWS=Y GRANTS=Y COMPRESS=Y CONSISTENT=Y 5 读取恢复过程中的相关信息 5.1 恢复时可参考的信息 1. 报警日志文件 报警日志文件一般记载了数据库的启动/关闭信息,归档信息,备份信息,恢复信息,常见错误信息,部分数据库修改记录等。一般在$ORACLE_BASE/admin/SID/bdump/目录下,命名规则为alert_.log,如生产数据库报警日志文件为alert_orcl1.log和alert_orcl2.log。 (报警日志文件的路径是根据初始化参数background_dump_dest来决定) 2. 后台进程跟踪文件 后台进程跟踪文件的路径与报警日志文件的路径一致,一般情况下,可以通过后台跟踪文件的信息了解更多的需要恢复的信息。如在数据库需要恢复的时候,报警日志文件中常有这样的语句: Errors in file D:\Oracle\admin\test\bdump\testDBW0.TRC: ORA-01157: cannot identify/lock data file 1 - see DBWR trace file 通过testDBW0.TRC跟踪文件,可以查询到更详细的信息。 5.2 几个重要视图 可以通过v$recover_file和v$recovery_log两个视图查看数据库需要恢复的文件是什么,恢复时需要哪些日志。 select * from v$recover_file;查看哪些文件需要恢复 select * from v$recovery_log;查看恢复时需要哪些日志 5.3 数据库完整恢复和极端恢复 5.3.1 数据库完整恢复到本地 5.3.1.1 恢复前提 适用范围 适合于丢失大量数据文件,或包含系统数据文件在内的数据库的恢复 恢复条件 1. 数据库全备存在且可用;数据库全备后到故障时刻的归档日志存在且可用。 2. 恢复过程中,目标数据库在mount状态,如果恢复成功,再打开数据库,系统宕机时间可能比较长一些。 恢复后的结果 不丢失数据 5.3.1.2 恢复步骤和流程 1. 确保现有数据库是关闭的,然后启动数据库到mount状态 sql>startup mount; 2. 编写恢复脚本以对数据库进行恢复,可参照如下命令: rman target sys/xxx@orcl catalog rman/*@rman run { allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_1' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_2' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_3' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_4' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_5' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_6' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_7' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_8' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_9' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_10' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_11' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_12' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_13' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_14' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; allocate channel 'dev_15' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; restore database; recover database; sql ‘alter database open’; } 5.3.2 数据库完整恢复到异地 5.3.2.1 恢复前提 适用范围 需要在异地或其它服务器上进行数据库完整恢复。 恢复条件 1. 原服务器的系统关键配置文件存在。 2. 数据库全备存在且可用;数据库全备后到进行异地恢复时刻的归档日志存在且可用。 3. 在新系统上安装oracle软件,要与原数据库上的版本一致。 4. 需要在新系统上安装HP DP软件,要与原服务器上版本一致。 恢复后的结果 只恢复到最后一个归档日志产生时的状况。(如果进行恢复时,原数据库仍在运行则可以使用exp|imp的方式进行数据导出和导入,以保证数据准确性) 5.3.2.2 恢复步骤和流程 1. 在新系统上创建dba用户组和oracle用户 groupadd dba useradd –g dba –D /oracle oracle 配置用户的.profile和原数据库一致,下列参数一定要指定好(生产数据库.profile见后附): ORACLE_BASE=oracle的home目录 ORACLE_HOME=$ORACLE_BASE/product/9i NLS_LANG =american_america.zhs16gbk ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data PATH=$ORACLE_HOME/bin:/usr/sbin:$JAVA_HOME/jre/bin:$JAVA_HOME/bin:$PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32 EDITOR=vi ORACLE_SID=orcl export ORACLE_BASE ORACLE_HOME NLS_LANG ORA_NLS33 PATH LD_LIBRARY_PATH ORACLE_SID EDITOR umask 022 2. 在新系统上安装ORACLE软件。 3. 创建要恢复的数据库实例的目录 以oracle身份进行如下操作步骤: cd $ORACLE_BASE/admin mkdir orcl cd orcl mkdir bdump mkdir udump mkdir cdump mkdir create mkdir pfile 4. 修改服务命名文件tnsnames.ora,以指向新创建的数据库orcl以及catalog数据库。 5. 在新系统上安装HP DP软件,并链接oracle 以root身份执行 cd /lib mv libobk.sl libobk.sl.orig ln -s /opt/omni/lib/libob2oracle8_64bit.sl libobk.sl 6. 从DP控制台创建重定向文件 7. 从备份中恢复spfile 以oracle身份执行: rman target sys/*@orcl catalog rman/*@rman rman>startup nomount rman>set dbid=*** rman>restore spfile to ‘$ORACLE_HOME/database/spfileorcl.ora’; 8. 从spfile中创建相应的pfile 以oracle身份执行: $sqlplus /nolog sql>conn / as sysdba sql>shutdown immediate sql>create pfile=’ $ORACLE_HOME/database/initorcl.ora’ from spfile=’$ORACLE_HOME/database/spfileorcl.ora’; 9. 修改pfile文件内容 修改pfile文件中的一些相关参数,如后台进程目录,控制文件路径。 10. 创建oracle口令文件 由于备份中并不包括Oracle的口令文件,因此需要手工创建 $ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=* entries=n 11. 从备份中恢复控制文件,并更改控制文件中文件路径设置的部分。 以oracle身份执行: $sqlplus /nolog sql>conn / as sysdba sql>startup nomount pfile=’$ORACLE_HOME/database/initorcl.ora’ sql>exit $rman target sys/*@orcl catalog rman/*@rman rman>set dbid= rman> run { allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; restore controlfile to '/路径/control01.ctl’; sql ‘shutdown immediate’; replicate controlfile from '/orarcv/instances/ibss/control01.ctl'; sql ‘startup mount’; } 12. 查看现有数据库备份情况,列出数据库所有数据文件及备份片情况 rman target sys/*@orcl rman/*@rman rman>list backup of database; 13. 更改数据库文件路径并进行恢复 rman target sys/*@orcl rman/*@rman rman>run{ allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; set newname for datafile ‘/oldpath/oldname’ to ‘/newpath/newname’; ........ restore database; switch datafile all; recover database; sql ‘alter database open;’ } 如果上述恢复过程仍然无法使数据库open,可以使用: recover database until cancel using backup controlfile; 接下来会出一堆提示供选择,输入auto并回车,恢复完毕后,alter database open resetlogs; 14. 修改listener.ora文件,指向新的数据库,并启动监听。 5.3.3 catalog数据库损坏时的恢复 因目前的备份信息都记录在catalog数据库,一旦catalog数据库出现故障,就无法进行恢复,通过DP软件,可以进行catalog数据库的恢复。找到最接近故障时间的备份session的ID,运行下述命令即可完成恢复: ob2rman.exe –restore_catalog –sission 另外,可以新建一个与原catalog数据库相同数据库名的数据库,在新库中,建立rman用户,按照上述方法再完成catalog数据库的恢复。但是要注意修改相应的tnsnames.ora中的连接配置。 5.3.4 HP DP IDB的备份和恢复 HP DP Protect软件内部自身有一个数据库internal database(IDB),它位于DP管理控制台上,它记录了相关的己备份的数据、磁带介质存储清单、备份会话信息、还原会话信息及己配置的磁带库的信息。使用它可以实现快速及方便的还原数据,并用于备份管理及介质配置管理。主要有五部分组成: Ø MMDB (Media Management Database) Ø CDB (Catalog Database) Ø DCBF (Detail Catalog Binary Files) Ø SMBF (Session Messages Binary Files) Ø SIBF (Serverless Integrations Binary Files). 各部分充当了不同的功能,实际上每个部分只是对应了系统上的一些目录文件,在初始配置DP软件的时候,都己经配置它们的备份,它们的信息都会在每个备份会话完成后,自动备份到带库中。如果当它的IDB数据库受到损坏而不能使用时,我们则可以通过如下方法来进行恢复: 1. 检查磁带上的IDB备份信息 omnidbrestore -autorecover -logview -skiprestore 2. 从上述结果中,选择想要恢复的IDB备份信息 比方说,如果想要恢复2005-03-20的IDB备份信息并且仅当日IDB备份磁带还在时,则命令如下: omnidbrestore -autorecover -session 2005/03/20-1 这样就成功恢复了HP DP IDB信息。 5.3.5 极端情况下的恢复 考虑只剩下一盘可用的数据库全备磁带,那么此时的恢复是上面几种情况的组合。在恢复时,首先要在一台新机器上,新安装HP DP软件,插入可用的数据库全备磁带,恢复DP IDB信息。具体步骤见5.3.4。 然后再按上述5.3.3的方法,恢复catalog数据库。 最后在服务器上,重新安装ORACLE软件,进行数据恢复的具体步骤和上述5.3.2所讲的异地重定向恢复一模一样。 5.4 数据库不完整恢复 1. 不完整恢复有三种方式:基于改变(SCN)、基于时间和基于日志序列,其恢复过程都一样,仅仅是recover命令有所不同。 2. 不完整恢复的过程是从备份点往后恢复的,如果因为其中一个数据文件的时间戳(SCN)大于要恢复的时间点,那么恢复都是不可能成功的。 3. 不完全恢复之后,都必须用resetlogs的方式打开数据库,打开数据库后必须马上做一次全备份,因为resetlogs之后,数据库以前的备份信息就没用了。 4. 基于改变的恢复比基于时间的恢复更可靠,但是可能更复杂,需要知道需要恢复到哪一个改变号(SCN),在正常生产环境中,获取SCN和具体时间的办法有很多,前者可以查询数据库字典表v$archived_log 和v$log_history或利用Logminer工具分析归档与联机日志获取,后者也可以利用Logminer工具而得。 5. 如果要恢复表级数据,一般是在测试机或备用机器上采用不完全恢复,然后进行导出/导入被误删的表到生产系统中完成恢复。 5.4.1 基于改变 5.4.1.1 恢复前提 适用范围 某个重要的表被意外删除或某个表的数据遭到破坏 恢复条件 1. 数据库全备存在且可用;数据库全备后到数据文件发生故障时的归档日志存在且可用。 2. 知道当时数据库的scn号 恢复后的结果 数据库恢复到删除之前的scn号的状态 5.4.1.2 恢复步骤和流程 1. 查询scn号: SQL> select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe; SCN ---------- 31014 2. shutdown immediate; 3. startup mount 4. rman target sys/*@orcl rman/*@rman 5. run{ allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; restore database; recover database until scn 31014;(即恢复到31013) sql ‘alter database open resetlogs’; release channel c1;} 5.4.2 基于时间 5.4.2.1 恢复前提 适用范围 数据库大批数据被意外删除或遭到破坏,数据不准确 恢复条件 1. 数据库全备存在且可用;数据库全备后到数据文件发生故障时的归档日志存在且可用。 2. 记录了发生意外时的时间 恢复后的结果 数据库恢复到指定时间时的状态 5.4.2.2 恢复步骤和流程 如果无法得知确切的时间,可能需要估计一个恢复时间或者通过Logminer来分析日志得到发生意外的时间 1. 设置环境变量时间,执行until time的不完全恢复。 export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss" 2. rman target sys/*@orcl rman/*@rman run { allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; set until time '2005-07-05 09:26:55'; restore database; recover database; sql ‘alter database open resetlogs’; release channel c1;} 5.4.3 基于日志序列 5.4.3.1 恢复前提 适用范围 恢复条件 1. 数据库全备存在且可用;数据库全备后到数据文件发生故障时的归档日志存在且可用。 2. 知道当时数据库的日志序列号 恢复后的结果 数据库恢复到指定日志序列的状态 5.4.3.2 恢复步骤和流程 man target sys/*@orcl rman/*@rman run { allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; set until logseq 1234 thread 1; restore controlfile to '$ORACLE_HOME/dbs/cf1.f' ; replicate controlfile from '$ORACLE_HOME/dbs/cf1.f'; sql ‘alter database mount’; restore database; recover database; sql "ALTER DATABASE OPEN RESETLOGS"; } 5.5 数据库文件级别的恢复 5.5.1 控制文件损坏 日常或数据库结构发生变化时需要使用如下命令进行控制文件的备份(数据库全备脚本也包括备份控制文件) alter database backup controlfile to ‘/path/name’; 产生一个二进制文件。 alter database backup controlfile to trace; 产生一个文本文件(一般在$ORACLE_BASE/admin/SID/udump目录下),可借助其重建控制文件,重建控制文件要保证其书写的正确性,并包含了所有的数据文件与联机日志文件。 A. 损坏单个控制文件 因为数据库中控制文件都互为镜像,只需要拷贝一个好的控制文件替换坏的控制文件或者修改参数文件中的设置,使其不包含已损坏的控制文件路径,如:alter system set control_files=’’; B. 损坏全部控制文件 需要重新建立控制文件,利用alter database backup controlfile to trace产生的控制文件重建脚本,进行恢复即可。 shutdown immediate STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG -- SET STANDBY TO MAXIMIZE PERFORMANCE MAXLOGFILES 192 MAXLOGMEMBERS 3 MAXDATAFILES 1024 MAXINSTANCES 32 MAXLOGHISTORY 3403 LOGFILE GROUP 1 '/dev/vg_database/rredo1_1' SIZE 300M, GROUP 2 '/dev/vg_database/rredo1_2' SIZE 300M, GROUP 3 '/dev/vg_database/rredo1_3' SIZE 300M, GROUP 4 '/dev/vg_database/rredo2_1' SIZE 300M, GROUP 5 '/dev/vg_database/rredo2_2' SIZE 300M, GROUP 6 '/dev/vg_database/rredo2_3' SIZE 300M -- STANDBY LOGFILE DATAFILE '/dev/vg_database/rsystem', '/dev/vg_database/rundotbs1', '/dev/vg_database/rcwmlite', '/dev/vg_database/rdrsys', '/dev/vg_database/rindx', '/dev/vg_database/rodm', '/dev/vg_database/rtools', '/dev/vg_database/rundotbs2', '/dev/vg_database/rusers', '/dev/vg_database/rxml', '/dev/vg_database/rmis_control_data', '/dev/vg_database/rmis_userinfo_data', '/dev/vg_database/rmis_temp_data', '/dev/vg_database/rmis_userinfo_index', '/dev/vg_database/rmis_temp_index', '/dev/vg_database/rmis_history_data01', '/dev/vg_database/ripcc_control_data', '/dev/vg_database/ripcc_temp_data', '/dev/vg_database/ripcc_history_data', '/dev/vg_database/ripcc_userinfo_data', '/dev/vg_database/rtbi_system', '/dev/vg_database/rtbi_rule', '/dev/vg_database/rtbi_wsdl', '/dev/vg_database/rtbi_tran_log', '/dev/vg_database/rtbi_auth_log', '/dev/vg_database/rtbi_index', '/dev/vg_database/rmis_workflow', '/dev/vg_database/rmis_control_data1', '/dev/vg_database/rmis_history_data02', '/dev/vg_database/roralv01', '/dev/vg_database/roralv02', '/dev/vg_database/roralv03', '/dev/vg_database/roralv04', '/dev/vg_database/roralv05', '/dev/vg_database/roralv11', '/dev/vg_database/roralv12', '/dev/vg_database/roralv14', '/dev/vg_database/roralv06', '/dev/vg_database/rmis_history_data03', '/dev/vg_database/rmis_history_data04', '/dev/vg_database/rmis_history_data05', '/dev/vg_database/roralv15', '/dev/vg_database/roralv16', '/dev/vg_database/rmis_history_data08', '/dev/vg_database/rmis_history_data06', '/dev/vg_database/roralv07', '/dev/vg_database/roralv08', '/dev/vg_database/roralv09', '/dev/vg_database/roralv10', '/dev/vg_database/roralv17', '/dev/vg_database/roralv18', '/dev/vg_database/roralv19', '/dev/vg_database/rmis_history_data07', '/dev/vg_database/rmis_history_data09', '/dev/vg_database/rmis_history_data10', '/dev/vg_database/roralv20', '/dev/vg_database/rroralv46', '/dev/vg_database/rroralv47', '/dev/vg_database/rroralv45', '/dev/vg_database/rroralv21', '/dev/vg_database/rroralv40' CHARACTER SET ZHS16GBK; 6、如果以上重建控制文件过程中没有错误,则可以将数据库启动到open状态下。 5.5.2 数据文件损坏 5.5.2.1 恢复前提 适用范围 某个数据文件故障 恢复条件 数据库全备存在且可用;数据库全备后到数据文件发生故障时的归档日志存在且可用。 恢复后的结果 将数据文件一致性恢复到最后一个归档日志产生时的状况 5.5.2.2 恢复步骤和流程 A. 非系统表空间或回滚表空间数据文件损坏的在线恢复 1. 恢复到同一位置: rman target sys/*@orcl rman/*@rman run{sql ‘alter tablespace xx offline immediate’; allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; restore tablespace xx;或restore datafile xx; recover tablespace xx; recover datafile xx; sql ‘alter tablespace xx online’;} 2. 恢复到不同位置: rman target sys/*@orcl rman/*@rman run{ allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; sql ‘alter tablespace xx offline immediate’; set newname for datafile 'oldpath/oldname' to 'newpath/newname'; restore tabsespace xx; switch datafile newname;或switch datafile all; recover tablespace xx; sql ‘alter tablsepace xx online’;} B. 系统表空间数据文件损坏的mount状态恢复 startup mount rman target sys/*@orcl rman/*@rman run{ allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_full_lb)'; set newname for datafile 'oldpath/oldname' to 'newpath/newname'; restore tablespace xx; switch datafile newname;或switch datafile all; recover tablespace xx; sql "alter database open";} 5.5.3 日志文件损坏 5.5.3.1 损坏非当前联机日志 非当前联机日志损坏时,可以通过clear命令解决问题 1. 启动数据库,遇到ORA-00312 or ORA-00313错误,如 ORA-00313: open failed for members of log group 1 of thread 1 ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG' 从这些信息中可以得知日志组1的数据文件损坏 (从报警文件可以看到更详细的信息) 2. 查看v$log视图 SQL> select group#,sequence#,archived,status from v$log; GROUP# SEQUENCE# ARCHIVED STATUS ---------- ---------- -------- ---------------- 1 1 YES INACTIVE 2 2 YES INACTIVE 3 3 NO CURRENT 可以知道,该组是非当前状态,而且已经归档。 3. 用CLEAR命令重建该日志文件 SQL>alter database clear logfile group 1; 如果是该日志组还没有归档,则需要用 SQL>alter database clear unarchived logfile group 1; 4. 打开数据库,重新备份数据库 SQL>alter database open; 5.5.3.2 损坏当前联机日志 归档模式下当前日志的损坏有两种情况: A. 数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前日志组的损坏就可以直接用alter database clear unarchived logfile group n来重建。 B. 日志组中有活动的事务,数据库需要媒体恢复,日志组需要用来同步,有两种恢复方法: 最好的办法就是通过不完全恢复,可以保证数据库的一致性,但是这种办法要求在归档方式下,并且有可用的备份;通过强制性恢复,但是可能导致数据库不一致。 通过备份来恢复: 1. 打开数据库,会遇到一个类似的错误 ORA-00313: open failed for members of log group 1 of thread 1 ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系统找不到指定的文件 2. 查看v$log,发现是当前日志 SQL> select group#,sequence#,archived,status from v$log; GROUP# SEQUENCE# ARCHIVED STATUS ---------- ---------- -------- ---------------- 1 1 NO CURRENT 2 2 YES INACTIVE 3 3 YES INACTIVE 3、执行clear进行恢复不成功 SQL> alter database clear unarchived logfile group 1; alter database clear unarchived logfile group 1 * ERROR at line 1: ORA-01624: log 1 needed for crash recovery of thread 1 ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG' 4、拷贝有效的数据库的全备份,并不完全恢复数据库 可以采用获取最近的SCN的办法用until scn恢复或用until cnacel恢复 recover database until cancel 先选择auto,尽量恢复可以利用的归档日志,然后重新 recover database until cancel 这次输入cancel,完成不完全恢复,也就是说恢复两次。 如: SQL> recover database until cancel; Auto …… SQL> recover database until cancel; Cancel; 5、利用alter database open resetlogs打开数据库 说明: 1、这种办法恢复的数据库是一致的不完全恢复,会丢失当前联机日志中的事务数据 2、这种方法适合于归档数据库并且有可用的数据库全备份。 3、恢复成功之后,记得再做一次数据库的全备份。 4、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。 如果没有备份,进行强制性恢复 1、打开数据库,会遇到一个类似的错误 ORA-00313: open failed for members of log group 1 of thread 1 ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系统找不到指定的文件 2、查看v$log,发现是当前日志 SQL> select group#,sequence#,archived,status from v$log; GROUP# SEQUENCE# ARCHIVED STATUS ---------- ---------- -------- ---------------- 1 1 NO CURRENT 2 2 YES INACTIVE 3 3 YES INACTIVE 3、发现clear不成功 SQL> alter database clear unarchived logfile group 1; alter database clear unarchived logfile group 1 * ERROR at line 1: ORA-01624: log 1 needed for crash recovery of thread 1 ORA-00312: online log 1 thread 1: 'D:\ORACLE\ORADATA\TEST\REDO01.LOG' 4、把数据库down掉 SQL>shutdown immediate 5、在init.ora中加入如下参数 _allow_resetlogs_corruption=TRUE 6、重新启动数据库,利用until cancel恢复 SQL>recover database until cancel; Cancel 如果出错,不再理会,发出 SQL>alter database open resetlogs; 7、数据库被打开后,马上执行一个数据库全备 8、shutdown数据库,去掉_all_resetlogs_corrupt参数 9、重建库 10、import并完成恢复 11、建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE; 说明: 1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法可能导致数据库的不一致 2、该方法也丢失数据,但是丢失的数据没有上一种方法的数据多,主要是未写入数据文件的已提交或未提交数据。 3、建议成功后严格执行以上的7到11步,完成数据库的检查与分析 4、全部完成后做一次数据库的全备份 5、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。 5.5.4 回滚表空间损坏 回滚段表空间中的一个数据文件丢失或者损坏导致数据库无法识别它,在启动数据库的时候会出现ORA-1157, ORA-1110的错误,或者操作系统级别的错误,例如ORA-7360。在关闭数据库的时候(normal或者immediate)会出现ORA-1116, ORA-1110的错误,或者操作系统级别的错误,例如ORA-7368。 缺 5.5.5 临时文件损坏 因为临时文件中不涉及到有用的数据,所以可以删除后重建,如果重新建立临时文件,需要重新分配给用户。在数据库open状态下就可以进行恢复: alter database datafile/ ‘’offline ; drop tablespace temp; create temporary tablespace xxx tempfile 'xxx' size Xm extent management local; 重新创建该表空间,并重新分配给用户 alter user hr temporary tablespace xxx; alter database default temporary tablespace xxx;(设定数据库默认临时表空间) 5.5.6 从带库中恢复归档日志 rman target sys/*@orcl rman/*@rman run{ allocate channel d1 type 'sbt_tape'; parms 'ENV=(OB2BARTYPE=oracle8,OB2APPNAME=orcl1,OB2BARLIST=orcl1_arch_lb)'; //或parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=orcl2,OB2BARLIST=orcl2_arch_lb)'; restore archivelog from sequence xxx thread 1或2; release channel d1; ) 5.6 恢复过程中的FAQ 1. 一旦数据库发生灾难,最好在进行恢复之前做一次完全的冷备份,以便在进行恢复时产生差错还可以进行补救。 2. 如果数据库异常关闭,重新启动到mount状态才可以进行恢复。同时,在mount状态要检查是否有offline的数据库文件,如果有,需要将其改为online,否则,可能会导致数据库恢复后,系统不识别文件。 3. 当数据库完成恢复之后,尤其是使用resetlogs选项打开数据库之后,要马上关闭数据库进行一次完全的冷备份。因为,为防止放弃的重做日志被下次恢复时再次运用,resetlogs选项会重新创建redo log文件并将其的计数清零,这将使之前做的所有备份将变为不可用(一般情况下)。同时,需要对catalog数据库做reset处理。 4. 当进行数据库完全恢复,从发生故障的时间点前的备份中恢复损坏文件时,一定不要使备份中的redo log文件覆盖了当前的redo log文件,否则就只能进行不完全恢复并且要丢失一部分数据。 6 BC镜像技术 卷复制技术,目前该技术主要针对数据库进行快速的镜像备份。 正向同步定义:由vg_database同步到vgdb(相当于备份生产数据库) 反向同步定义:由vgdb同步到vg_database(相当于将备份恢复到生产数据库) 6.1 正向同步数据库并启动实例 1. 以oracle身份在生产数据库操作 alter system checkpoint; alter system archive log current; (此步骤完成后,可以查询生产库的重做日志状态,select * from v$log,在status选项中找到current和active状态的group#和thread#进行记录,将在以下步骤"11.恢复bc数据库"中使用) 以下alter ... begin backup步骤可以使用/arch1/lijun下的名为beginbackup.sh的脚本代替。使用脚本时要将脚本中rem @tablespacebackup1.sql的“rem”取消。 如果不使用脚本,需要首先查询生产库的表空间名称: select tablespace_name from dba_tablespaces;然后执行如下语句: alter tablespace SYSTEM begin backup; alter tablespace UNDOTBS1 begin backup; alter tablespace CWMLITE begin backup; alter tablespace DRSYS begin backup; alter tablespace INDX begin backup; alter tablespace ODM begin backup; alter tablespace TOOLS begin backup; alter tablespace UNDOTBS2 begin backup; alter tablespace USERS begin backup; alter tablespace XDB begin backup; alter tablespace MIS_CONTROL_DATA begin backup; alter tablespace MIS_USERINFO_DATA begin backup; alter tablespace MIS_TEMP_DATA begin backup; alter tablespace MIS_HISTORY_DATA begin backup; alter tablespace MIS_USERINFO_INDEX begin backup; alter tablespace MIS_TEMP_INDEX begin backup; alter tablespace IPCC_CONTROL_DATA begin backup; alter tablespace IPCC_TEMP_DATA begin backup; alter tablespace IPCC_HISTORY_DATA begin backup; alter tablespace IPCC_USERINFO_DATA begin backup; alter tablespace TBI_SYSTEM begin backup; alter tablespace TBI_RULE begin backup; alter tablespace TBI_WSDL begin backup; alter tablespace TBI_TRAN_LOG begin backup; alter tablespace TBI_AUTH_LOG begin backup; alter tablespace TBI_INDEX begin backup; alter tablespace MIS_WORKFLOW begin backup; alter tablespace MIS_HISTORY_INDEX begin backup; alter tablespace YLTEST begin backup; alter tablespace UNDOTEMP begin backup; alter system suspend;注意执行该步骤后,不要exit退出当前sqlplus环境,否则不可以再进行连接。如果同步过程中,生产库数据操作少,可以省略该步骤,在恢复时使用上述步骤中select * from v$log记录的current日志组恢复即可) (TEMP表空间不需要begin backup,同步后通过手工建立即可) 2. 以root身份开始同步 vgchange -a n vgdb vgexport vgdb export HORCC_MRCF=1 export HORCMINST=0 horcmstart.sh 0 1 pairresync -g vgdb -l -c 15 pairdisplay -g vgdb -fc (会在status一栏显示pair字样) 3. 以root身份切开 pairsplit -g vgdb pairdisplay -g vgdb -fc(会在status一栏显示ssus,psus字样) horcmshutdown.sh 0 1 (可不执行) 4. 生成卷组 检查/HORCM/vgdb/下的vgbcImport.sh是否修改过,当前状态是-rwx------ 1 root sys 1581 Dec 21 2004 vgbcImport.sh,如果确认没有修改,则执行/HORCM/vgdb/vgbcImport.sh 5. 修改vgdb的属主信息 cd /dev/vgdb chown bcoracle:dba * chmod 770 * 6. 手工激活卷 vgchange -a y /dev/vgdb 7. 以oracle身份在生产数据库操作 alter system resume;(如果上述步骤中使用了alter system suspend;就需要在此时执行alter system resume;让数据库恢复正常) 以下alter ... end backup步骤可以使用/arch1/lijun下的名为endbackup.sh的脚本代替。使用脚本时要将脚本中rem @tablespacebackup1.sql;的“rem”取消。如果不使用脚本,请将begin backup状态的所有表空间都end backup。 alter tablespace SYSTEM end backup; alter tablespace UNDOTBS1 end backup; alter tablespace CWMLITE end backup; alter tablespace DRSYS end backup; alter tablespace INDX end backup; alter tablespace ODM end backup; alter tablespace TOOLS end backup; alter tablespace UNDOTBS2 end backup; alter tablespace USERS end backup; alter tablespace XDB end backup; alter tablespace MIS_CONTROL_DATA end backup; alter tablespace MIS_USERINFO_DATA end backup; alter tablespace MIS_TEMP_DATA end backup; alter tablespace MIS_HISTORY_DATA end backup; alter tablespace MIS_USERINFO_INDEX end backup; alter tablespace MIS_TEMP_INDEX end backup; alter tablespace IPCC_CONTROL_DATA end backup; alter tablespace IPCC_TEMP_DATA end backup; alter tablespace IPCC_HISTORY_DATA end backup; alter tablespace IPCC_USERINFO_DATA end backup; alter tablespace TBI_SYSTEM end backup; alter tablespace TBI_RULE end backup; alter tablespace TBI_WSDL end backup; alter tablespace TBI_TRAN_LOG end backup; alter tablespace TBI_AUTH_LOG end backup; alter tablespace TBI_INDEX end backup; alter tablespace MIS_WORKFLOW end backup; alter tablespace MIS_HISTORY_INDEX end backup; alter tablespace YLTEST end backup; alter tablespace UNDOTEMP end backup; 8. 查看/bcoracle/OraHome/下是否有arch1和arch2目录,没有则建立(注意权限),并将生产数据库在步骤1产生的最新/arch1/arch_xx.dbf对应拷贝至/bcoracle/OraHome/arch1; /arch2/arch_xx.dbf对应拷贝至/bcoracle/OraHome/arch2,拷贝时注意磁盘空间,拷贝完成后请将*.dbf文件的用户和组权限进行修改:chown bcoracle:dba *.dbf 9. 在生产库以dba身份执行alter database backup controlfile to trace;然后到/oracle/OraHome/admin/orcl/udump找到该trace文件,参考步骤10的红色部分内容修改该文件,特别注意数据库名和卷组名等地方。 10. 在bcor数据库进行实例启动(以下操作由bcoracle系统用户进行) su - bcoracle sqlplus "/ as sysdba" startup nomount pfile=/bcoracle/OraHome/dbs/initbcor.ora(注意检查initbcor.ora文件状态,目前是-rwxr-xr-x 1 bcoracle dba 3290 May 31 19:02 initbcor.ora) 运行修改过的控制文件,如下: CREATE CONTROLFILE SET DATABASE "BCOR" RESETLOGS NOARCHIVELOG -- SET STANDBY TO MAXIMIZE PERFORMANCE MAXLOGFILES 192 MAXLOGMEMBERS 3 MAXDATAFILES 1024 MAXINSTANCES 32 MAXLOGHISTORY 3403 LOGFILE GROUP 1 '/dev/vgdb/rredo1_1' SIZE 300M, GROUP 2 '/dev/vgdb/rredo1_2' SIZE 300M, GROUP 3 '/dev/vgdb/rredo1_3' SIZE 300M, GROUP 4 '/dev/vgdb/rredo2_1' SIZE 300M, GROUP 5 '/dev/vgdb/rredo2_2' SIZE 300M, GROUP 6 '/dev/vgdb/rredo2_3' SIZE 300M -- STANDBY LOGFILE DATAFILE '/dev/vgdb/rsystem', '/dev/vgdb/rundotbs1', '/dev/vgdb/rcwmlite', '/dev/vgdb/rdrsys', '/dev/vgdb/rindx', '/dev/vgdb/rodm', '/dev/vgdb/rtools', '/dev/vgdb/rundotbs2', '/dev/vgdb/rusers', '/dev/vgdb/rxml', '/dev/vgdb/rmis_control_data', '/dev/vgdb/rmis_userinfo_data', '/dev/vgdb/rmis_temp_data', '/dev/vgdb/rmis_userinfo_index', '/dev/vgdb/rmis_temp_index', '/dev/vgdb/rmis_history_data01', '/dev/vgdb/ripcc_control_data', '/dev/vgdb/ripcc_temp_data', '/dev/vgdb/ripcc_history_data', '/dev/vgdb/ripcc_userinfo_data', '/dev/vgdb/rtbi_system', '/dev/vgdb/rtbi_rule', '/dev/vgdb/rtbi_wsdl', '/dev/vgdb/rtbi_tran_log', '/dev/vgdb/rtbi_auth_log', '/dev/vgdb/rtbi_index', '/dev/vgdb/rmis_workflow', '/dev/vgdb/rmis_control_data1', '/dev/vgdb/rmis_history_data02', '/dev/vgdb/roralv01', '/dev/vgdb/roralv02', '/dev/vgdb/roralv03', '/dev/vgdb/roralv04', '/dev/vgdb/roralv05', '/dev/vgdb/roralv11', '/dev/vgdb/roralv12', '/dev/vgdb/roralv14', '/dev/vgdb/roralv06', '/dev/vgdb/rmis_history_data03', '/dev/vgdb/rmis_history_data04', '/dev/vgdb/rmis_history_data05', '/dev/vgdb/roralv15', '/dev/vgdb/roralv16', '/dev/vgdb/rmis_history_data08', '/dev/vgdb/rmis_history_data06', '/dev/vgdb/roralv07', '/dev/vgdb/roralv08', '/dev/vgdb/roralv09', '/dev/vgdb/roralv10', '/dev/vgdb/roralv17', '/dev/vgdb/roralv18', '/dev/vgdb/roralv19', '/dev/vgdb/rmis_history_data07', '/dev/vgdb/rmis_history_data09', '/dev/vgdb/rmis_history_data10', '/dev/vgdb/roralv20', '/dev/vgdb/rroralv46', '/dev/vgdb/rroralv47', '/dev/vgdb/rroralv45', '/dev/vgdb/rroralv39' CHARACTER SET ZHS16GBK; 完成控制文件重建后可以看到字样:Control file created. 11. 恢复bc数据库(可参照本文7.6附:正向同步数据库恢复bc的过程) recover automatic database using backup controlfile; 看到提示后选择上述步骤1中select * from v$log,status选项为current和active状态的日志(恢复顺序是先需要active状态的日志,然后是current状态的日志),如/dev/vgdb/rredo1_1, /dev/vgdb/rredo1_2, /dev/vgdb/rredo1_3, /dev/vgdb/rredo2_1, /dev/vgdb/rredo2_2, /dev/vgdb/rredo2_3进行恢复。 恢复完成后,可以看见字样: Media recovery complete 12. 使用命令alter database open resetlogs启动bcor数据库。 13. 重建临时表空间,ALTER TABLESPACE "TEMP" ADD TEMPFILE '/dev/vgdb/rtemp' SIZE 4118M; 14. 查看/bcoracle/OraHome/network/admin目录下的listener.ora和tnsnames.ora文件,查看bcor数据库的描述是否正确。以bcoracle身份执行lsnrctl start L0启动监听,即可进行bcor数据库的连接。(目前以上文件状态是: -rwxrwxrwx 1 bcoracle dba 690 Oct 13 15:40 listener.ora -rwxrwxr-x 1 bcoracle dba 195 Oct 13 15:47 sqlnet.ora -rwxrwxr-x 1 bcoracle dba 1139 Oct 13 15:44 tnsnames.ora) 6.2 反向同步并进行数据库恢复 反向同步的前提:环境的参数设置正确。 反向同步的操作: 1. 以oracle身份到生产数据库 shutdown immediate 2. 进行方向同步 XP磁盘阵列中激活80模式 export HORCC_MRCF=1 export HORCMINST=0 horcmstart.sh 0 1 pairdisplay -g vgdb -fc pairresync -g vgdb –restore -l -c 15 pairdisplay -g vgdb -fc horcmshutdown.sh 0 1 6.3 利用BC进行数据库恢复 1. 确认HORCM1 和HORCM2 进程启动 $ ps –ef |grep horcm,未开启请使用horcmstart.sh 0 1 2. 确认BC切开 pairdisplay -g vgdb –fc 3. IMPORT BC 卷 /opt/HORCM/vgdb/vgimport_db1.sh 4. 确认VG_DB配置 # pairdisplay -g vgdb 5. 用bcoracle 用户登陆 # su - bcoracle 6. 启动监听 $ lsnrctl start L0 7. 启动BC 数据库到nomount 状态 SQL>startup nomount pfile=/bcoracle/OraHome/dbs/initbcor.ora 8. 以oracle身份登陆设置NLS_LANG环境变量,启动rman su - oracle export NLS_LANG=american_america.US7ASCII export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS' $ORACLE_HOME/bin/rman 9. 连接target、catalog和auxiliary数据库 RMAN>connect auxiliary sys/*@bcor RMAN>connect target sys/*@orcl1 RMAN>connect catalog rman/*@rman 或rman target sys/*@orcl1 catalog rman1/*@rman auxiliary sys/*@bcor 10. 执行数据恢复测试脚本dup_db(该脚本见后附) RMAN>print script dup_db; RMAN>run {execute script dup_db;} 11. 检查恢复测试数据库状态,可用性 通过sqlplus访问bcor,察看恢复数据库的可用性 7 附件 7.1 附dup-db脚本 script dup_db RMAN> print script dup_db; printing stored script: dup_db { SET UNTIL TIME 'SYSDATE-2'; allocate auxiliary channel dupdb1 device type 'sbt_tape'; allocate auxiliary channel dupdb2 device type 'sbt_tape'; allocate auxiliary channel dupdb3 device type 'sbt_tape'; allocate auxiliary channel dupdb4 device type 'sbt_tape'; allocate auxiliary channel dupdb5 device type 'sbt_tape'; allocate auxiliary channel dupdb6 device type 'sbt_tape'; allocate auxiliary channel dupdb7 device type 'sbt_tape'; allocate auxiliary channel dupdb8 device type 'sbt_tape'; allocate auxiliary channel dupdb9 device type 'sbt_tape'; allocate auxiliary channel dupdba device type 'sbt_tape'; allocate auxiliary channel dupdbb device type 'sbt_tape'; allocate auxiliary channel dupdbc device type 'sbt_tape'; allocate auxiliary channel dupdbd device type 'sbt_tape'; allocate auxiliary channel dupdbe device type 'sbt_tape'; allocate auxiliary channel dupdbf device type 'sbt_tape'; duplicate target database to bcor pfile = /bcoracle/OraHome/dbs/initbcor.ora; } 7.2 附:生产数据库initorcl.ora *.aq_tm_processes=1 *.audit_trail='NONE' *.background_dump_dest='/oracle/OraHome/admin/orcl/bdump' *.cluster_database=true *.cluster_database_instances=2 *.compatible='9.2.0.0.0' *.control_files='/dev/vg_database/rcontrol1','/dev/vg_database/rcontrol2','/dev/vg_database/rcontrol3' *.core_dump_dest='/oracle/OraHome/admin/orcl/cdump' *.db_block_size=8192 *.db_cache_size=1200M *.db_domain='' *.db_file_multiblock_read_count=64 *.db_name='orcl' *.db_writer_processes=1 *.disk_asynch_io=TRUE orcl1.event='29740 trace name errorstack level 3' orcl2.event='29740 trace name errorstack level 3' *.fast_start_mttr_target=100 *.hash_join_enabled=TRUE orcl1.instance_name='orcl1' orcl2.instance_name='orcl2' orcl2.instance_number=2 orcl1.instance_number=1 *.java_pool_size=31457280 *.job_queue_processes=6 *.large_pool_size=125829120 orcl1.local_listener='LISTENER_ORCL1' orcl2.local_listener='LISTENER_ORCL2' orcl1.log_archive_dest_1='location=/arch1/' orcl2.log_archive_dest_1='location=/arch2/' *.log_archive_format='arch_%t_%s.dbf' *.log_archive_start=true *.log_buffer=1048576 *.open_cursors=1000 *.pga_aggregate_target=314572800 *.processes=500 *.query_rewrite_enabled='FALSE' *.remote_listener='LISTENERS_ORCL' *.remote_login_passwordfile='exclusive' *.shared_pool_size=800M *.sort_area_retained_size=10485760 *.sort_area_size=10485760 *.star_transformation_enabled='FALSE' orcl1.thread=1 orcl2.thread=2 *.timed_statistics=TRUE *.undo_management='AUTO' *.undo_retention=10800 orcl1.undo_tablespace='UNDOTBS1' orcl2.undo_tablespace='UNDOTBS2' *.undo_tablespace='UNDOTBS1' *.user_dump_dest='/oracle/OraHome/admin/orcl/udump' *.utl_file_dir='/arch1' 7.3 附:生产数据库oracle用户环境变量 # @(#)B.11.11_LR # Default user .profile file (/usr/bin/sh initialization). # Set up the terminal: if [ "$TERM" = "" ] then eval ` tset -s -Q -m ':?hp' ` else eval ` tset -s -Q ` fi stty erase "^H" kill "^U" intr "^C" eof "^D" stty hupcl ixon ixoff tabs # Set up the search paths: PATH=$PATH:. # Set up the shell environment: set -u trap "echo 'logout'" 0 # Set up the shell variables: EDITOR=vi export EDITOR stty erase ^? DISPLAY=10.180.177.28:0.0 export DISPLAY umask 022 ORACLE_BASE=/oracle/OraHome export ORACLE_BASE ORACLE_HOME=/oracle/OraHome export ORACLE_HOME JAVA_HOME=/oracle/OraHome/JRE export JAVA_HOME SHLIB_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/usr/lib:/usr/lib/MOTIF1.2 export SHLIB_PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32 export LD_LIBRARY PATH=$ORACLE_HOME/bin:/usr/sbin:$JAVA_HOME/jre/bin:$JAVA_HOME/bin:$PATH export PATH NLS_LANG=american_america.zhs16gbk export NLS_LANG ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export ORA_NLS33 LANG=C export LANG CLASSPATH=/oracle/OraHome/jlib/:/oracle/OraHome/JRE/lib/rt.jar:/oracle/OraHome/jlib/srvm.jar export CLASSPATH SRVM_SHARED_CONFIG=/dev/vg_database/rsrvcfg export SRVM_SHARED_CONFIG DBCA_RAW_CONFIG=/oracle/yd_raw_config export DBCA_RAW_CONFIG ORACLE_SID=orcl1 export ORACLE_SID 7.4 附:生产数据库tnsnames.ora # TNSNAMES.ORA Network Configuration File: /oracle/OraHome/network/admin/tnsnames.ora # Generated by Oracle configuration tools. LISTENER_ORCLBACK = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1529)) (ADDRESS = (PROTOCOL = TCP)(HOST = yd_dtptr)(PORT = 1522)) ) LISTENERS_ORCL = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db2)(PORT = 1521)) ) LISTENER_ORCL2 = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db2)(PORT = 1521)) LISTENER_ORCL1 = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1521)) FAILOVER = (DESCRIPTION = (enable = broken) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db2)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) RMAN = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_dtptr)(PORT = 1522)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = rman) ) ) ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db2)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) # added by libing for duplicate oracle INST1_HTTP = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = MODOSE) (PRESENTATION = http://HRService) ) ) EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) ) ORCL2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db2)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) (INSTANCE_NAME = orcl2) ) ) ORCL1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db2)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) (INSTANCE_NAME = orcl1) ) ) LISTENER_TYYD = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1529)) TYYD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1529)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = tyyd) ) ) LISTENER_BCOR = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1527)) BCOR = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1527)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = bcor) ) ) 7.5 附:生产数据库listener.ora # LISTENER.ORA Network Configuration File: /oracle/OraHome/network/admin/listener.ora # Generated by Oracle configuration tools. SID_LIST_L3 = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /oracle/OraHome) (PROGRAM = extproc) ) ) SID_LIST_L2 = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = rman) (ORACLE_HOME = /oracle/OraHome) (SID_NAME = rman) ) ) SID_LIST_L1 = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /oracle/OraHome) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /oracle/OraHome) (SID_NAME = orcl1) ) ) L3 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1529)) ) ) ) L2 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_dtptr)(PORT = 1522)) ) ) ) L1 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = yd_db1)(PORT = 1521)) ) ) ) 7.6 附:正向同步数据库恢复bc的过程 以bcoracle身份运行sqlplus "/ as sysdba"。 SQL>startup nomount pfile=/bcoracle/OraHome/dbs/initbcor.ora 启动数据库到nomount状态后执行生成控制文件的脚本,同6.1的10红色部分(略) 生成控制文件成功可以看到字样:Control file created. 此时表明可以进行bcor数据库的恢复。 SQL> recover automatic database using backup controlfile; ORA-00279: change 617321926 generated at 10/13/2005 12:34:53 needed for thread 1 ORA-00289: suggestion : /bcoracle/OraHome/arch2/arch_1_4947.dbf ORA-00280: change 617321926 for thread 1 is in sequence #4947 ORA-00278: log file '/bcoracle/OraHome/arch2/arch_1_4947.dbf' no longer needed for this recovery ORA-00308: cannot open archived log '/bcoracle/OraHome/arch2/arch_1_4947.dbf'(此处表示需要正向同步时select * from v$log结果集中 status为current的实例1的日志,对应以下绿色字体) ORA-27037: unable to obtain file status HP-UX Error: 2: No such file or directory Additional information: 3 Specify log: {=suggested | filename | AUTO | CANCEL} /dev/vgdb/rredo1_3 ORA-00279: change 617321926 generated at 10/13/2005 12:34:53 needed for thread 2(此处表示需要正向同步时select * from v$log结果集中 status为current的实例2的日志,对应以下绿色字体) Specify log: {=suggested | filename | AUTO | CANCEL} /dev/vgdb/rredo2_1 Log applied. Media recovery complete. 至此bc数据库恢复过程完成,可以用命令alter database open resetlogs启动bcor数据库。 7.7 RMAN的管理 7.7.1 Report命令 Report 命令可以检测那些文件需要备份,那些备份能被删除以及那些文件能不能获得的信 息,如 报告数据库的所有能备份数据文件对象 Report schema 或者 RMAN> REPORT SCHEMA AT TIME 'SYSDATE-14'; RMAN> REPORT SCHEMA AT SCN 1000; RMAN> REPORT SCHEMA AT SEQUENCE 100 THREAD 1; 报告需要备份的数据文件 Report need backup [ redundancy | days | incremental n]; 报告过期了的数据文件或者不可用的备份与拷贝 Report obsolete [orphan] 报告不能获得或者不能到达的数据文件信息 Report unrecoverable [database] 7.7.2 List命令 List命令一般用来查看备份与拷贝信息,如 查看备份信息 List backup 查看备份汇总信息 List backup summary 查看文件拷贝的信息 List copy 查看具体的备份信息 List backup of datafile ‘file name’ list incarnation of database; 7.7.3 Crosscheck命令 检查磁盘或磁带上的备份或拷贝是否正确,并更新备份或者拷贝的状态 如果不正确,将标记为expired(过期) Crosscheck backup; Crosscheck archivelog all; Delete [noprompt] expired backup命令删除过期备份 也可以用List来查看相应的报告 LIST EXPIRED BACKUP; LIST EXPIRED BACKUP SUMMARY; 7.7.4 Delete 命令 Delete命令可以用来删除指定的备份或者用来删除废弃或者是过期的备份集 如删除指定的备份集与备份片 RMAN> DELETE BACKUPPIECE 101; RMAN> DELETE CONTROLFILECOPY '/tmp/control01.ctl'; RMAN> DELETE BACKUP OF TABLESPACE users DEVICE TYPE sbt; 删除过期或者废弃了的备份 RMAN> DELETE EXPIRED BACKUP; RMAN> DELETE NOPROMPT OBSOLETE; RMAN> DELETE OBSOLETE REDUNDANCY = 3; RMAN> DELETE OBSOLETE RECOVERY WINDOW OF 7 DAYS; 删除指定的备份归档 RMAN> DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE = 300; 7.7.5 DP IDB与catalog数据库的同步 使用命令crosscheck backup和delete expired backup。 例如: allocate channel for maintenance type ‘sbt_tape’; crosscheck backup; release channel; allocate channel for maintenance type ‘sbt_tape’; delete expired backup release channel; 7.8 配置catalog数据库 1. 创建数据库。 2. 在该数据库创建RMAN用户专用表空间: create tablespace rman1 datafile 'd:\oracle\oradata\test1\rman01.dbf' size 20m; 3. 在该数据库创建RMAN数据库用户: create user rman identified by rman default tablespace rman1 temporary tablespace temp quota unlimited on rman1; 4. 向RMAN用户授权 grant connect ,resource , RECOVERY_CATALOG_OWNER to rman. 3. 连接到CATALOG数据库 rman catalog rman/rman 4. 创建恢复目录: rman> create catalog tablespace rman1 5. 登记目标数据库: rman>connect target sys/system rman>register database 这样就可以利用该catalog数据库来备份目标数据库了。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档