oracle-SYSTEM表空间的备份与恢复
场景2:启动时,undotbs01.dbf文件头部损坏 SQL> startup ORA-01092: ORACLE instance terminated,Disconnection forced ORA-01578: ORACLE data block corrupted (file # 3,block # 128) ORA-01110: data file 3: ‘/u01/app/oracle/oradata/orcl/undotbs01.dbf‘ 9.2 备份使用RMAN的backup database、backup datafile、backup tablespace都可以备份数据文件 RMAN> backup as backupset tablespace system,undotbs1; Starting backup at 18-JUL-19 using channel ORA_DISK_1 channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf channel ORA_DISK_1: starting piece 1 at 18-JUL-19 channel ORA_DISK_1: finished piece 1 at 18-JUL-19 piece handle=/u01/app/oracle/fra/ORCL/backupset/2019_07_18/o1_mf_nnndf_TAG20190718T111222_glzrwp9z_.bkp tag=TAG20190718T111222 comment=NONE channel ORA_DISK_1: backup set complete,elapsed time: 00:00:03 Finished backup at 18-JUL-19 Starting Control File and SPFILE Autobackup at 18-JUL-19 piece handle=/u01/app/oracle/fra/ORCL/autobackup/2019_07_18/o1_mf_s_1013944345_glzrwsd5_.bkp comment=NONE Finished Control File and SPFILE Autobackup at 18-JUL-19 创建镜像复制 RMAN> run { allocate channel c1 device type disk; allocate channel c2 device type disk; backup as copy (datafile ‘/u01/app/oracle/oradata/orcl/system01.dbf‘ channel c1) (datafile ‘/u01/app/oracle/oradata/orcl/undotbs01.dbf‘ channel c2) } 备份所有的数据文件 RMAN> run { allocate channel c1 device type disk; allocate channel c2 device type disk; allocate channel c3 device type disk; backup as copy database; } 运行以上RMAN命令时,确保在mount状态或open状态,open状态还需要启动归档模式。 9.3 恢复恢复关键数据文件的核心步骤:db进入mount状态、从备份还原(restore或switch)、使用增量备份或重做日志恢复(recover)、打开db 在整个介质恢复流程中(restore和recover),db始终处于mount状态,而不是open状态,在恢复完成之前db不能接受应用的连接。 9.3.1 恢复前的准备 要恢复数据文件,先要启动到mount阶段,不然就需要搞定参数文件和控制文件。 显示启动到mount阶段:startup mount 如果发现问题时实例没有关闭,用:shutdown abort停止实例 也有可能数据字典的损坏甚至SYS不能通过sqlplus和RMAN登录的情况 $ sqlplus / as sysdba ERROR: ORA-01075:you are currently logged on 登录不报错,连接到空闲实例,但实例还存在 SQL> sqlplus / as sysdba SQL> select * from v$database; ERROR at line 1 : ORA-01012: not logged on Process ID: 0 Session ID: 0 Serial number :0 使用RMAN登录也报错 $ rman target / RMAN-00554 RMAN-04005: error from target database ORA-00604: error occurred at recursive SQL level 1 ORA-01578: ORACLE data block corrupted (file # 1,block #857) ORA-01110: data file 1: ‘/u01/app/oracle/oradata/orcl/system01.dbf‘ 此时必须终止实例才能开始恢复操作,比如将后台进程SMON 杀死,另一个后台进程PMON $ kill -9 `ps aux |grep ora_smon_orcl |grep -v grep | awk ‘{print $2}‘` 9.3.2 恢复流程 恢复操作必须在mount下进行,具体步骤: --1 如果实例尚未崩溃,使用shutdown abort或者操作系统的kill将实例关闭 --2 执行startup mount将实例启动到mount状态 --3 使用RMAN执行restore或switch还原损坏的关键数据文件 --4 使用RMAN执行recover database 利用归档日志和在线日志恢复数据文件 --5 执行alter database open 打开数据库 第一步确保实例已经停止,可以通过RMAN的一个运行块完成,比如恢复undotbs1表空间的数据文件 RMAN> run { startup mount; restore tablespace undotbs1; recover database; alter database open; } 再比如恢复1号数据文件 RMAN> run { startup mount; restore datafile 1; recover database; alter database open; } 当数据文件的镜像复制处于磁盘上时,可用switch命令取代restore将控制文件中的数据文件名立即换成镜像复制名,文件越大,还原操作节省的时间就越多。 首先启动到mount状态 RMAN> startup mount; 查看镜像复制信息和生成时间 RMAN> list datafilecopy all; RMAN> run { switch datafile 1 to datafilecopy ‘/u01/app/oracle/fra/ORCL/autobackup/2019_07_18/o1_mf_s__glzrwsd5_.dbf‘; recover database; alter database open; } 现在查看1号数据文件的路径将是镜像复制 SQL> select name from v$datafile where file#=1; NAME /u01/app/oracle/fra/ORCL/autobackup/2019_07_18/o1_mf_s__glzrwsd5_.dbf 而查看镜像复制的路径将是原来的数据文件 RMAN> list copy of tablespace system; /u01/app/oracle/oradata/orcl/system01.dbf 如果原来数据文件已经是损坏的,此镜像复制当然也是损坏的,dba需要考虑这样的复制是否有意义,所以在使用switch之后要执行validate RMAN> validate datafilecopy all; 如有错误,可以删除 RMAN> delete noprompt datafilecopy 44; RMAN> backup as copy datafile 1 format ‘/u01/app/oracle/oradata/orcl/system01.dbf’; (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |