己亥清爽系列说明:清爽系列是作为恢复系列的基础篇,基于FS(File System)文件系统的手工还原恢复,也叫基于用户管理的还原恢复。来自于博客园AskScuti
实验说明:在有完全备份基础下,物理删除关键系统数据文件 system01.dbf ,模拟介质损坏或丢失,并进行手工还原恢复操作。
基于版本:Oracle 11gR2 11.2.0.4 AskScuti
概念说明:请严格区分什么叫还原(Restore),什么叫恢复(Recover)。
还原(Restore):如果是基于用户管理(手工)的还原恢复,需要用户主动在系统层面进行拷贝粘贴,这个操作过程称之为还原;如果是基于恢复管理器(RMAN)的恢复,则通过Restore命令进行还原(自动进行),后者不在基础篇讨论。
恢复(Recover):在完成还原动作之后,数据回到了还原点,但从这个还原点到宕机时间点之间的数据,就要利用归档日志和在线日志进行前滚,直至应用到宕机前最后一次commit提交的状态(完全恢复),或应用到指定的某个时间点(不完全恢复)。
目录
1. 备份
1.1 确定当前数据库核心文件位置
1.2 干净一致关闭数据库
1.3 OS拷贝核心文件
1.4 开启数据库
2. 实验
2.1 删除 system01.dbf
2.2 重启数据库
2.3 还原数据文件
2.4 恢复数据文件
2.5 打开数据库
1. 备份
1.1 确定当前数据库核心文件位置(实验环境,生产库还需留意口令密码文件、参数文件、归档日志)
SQL> select name from v$datafile; NAME ------------------------------------------ /u01/app/oracle/oradata/PROD1/system01.dbf /u01/app/oracle/oradata/PROD1/sysaux01.dbf /u01/app/oracle/oradata/PROD1/undotbs01.dbf /u01/app/oracle/oradata/PROD1/users01.dbf /u01/app/oracle/oradata/PROD1/example01.dbf SQL> select name from v$controlfile; NAME ------------------------------------------- /u01/app/oracle/oradata/PROD1/control01.ctl /u01/app/oracle/fast_recovery_area/PROD1/control02.ctl SQL> select member from v$logfile; MEMBER ---------------------------------------- /u01/app/oracle/oradata/PROD1/redo03.log /u01/app/oracle/oradata/PROD1/redo02.log /u01/app/oracle/oradata/PROD1/redo01.log
1.2 干净一致关闭数据库
SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down.
1.3 OS拷贝核心文件
SQL> !mkdir /u01/app/oracle/backup SQL> !cp /u01/app/oracle/oradata/PROD1/*.dbf /u01/app/oracle/backup/ SQL> !cp /u01/app/oracle/oradata/PROD1/*.ctl /u01/app/oracle/backup/ SQL> !cp /u01/app/oracle/fast_recovery_area/PROD1/control02.ctl /u01/app/oracle/backup/ SQL> !cp /u01/app/oracle/oradata/PROD1/*.log /u01/app/oracle/backup/
1.4 开启数据库
SQL> startup ORACLE instance started. Total System Global Area 417546240 bytes Fixed Size 2228944 bytes Variable Size 293604656 bytes Database Buffers 117440512 bytes Redo Buffers 4272128 bytes Database mounted. Database opened.
2. 实验
2.1 删除 system01.dbf
SQL> !rm -rf /u01/app/oracle/oradata/PROD1/system01.dbf
2.2 重启数据库
SQL> startup force; ORACLE instance started. Total System Global Area 417546240 bytes Fixed Size 2228944 bytes Variable Size 293604656 bytes Database Buffers 117440512 bytes Redo Buffers 4272128 bytes Database mounted. ORA-01157: cannot identify/lock data file 1 - see DBWR trace file ORA-01110: data file 1: '/u01/app/oracle/oradata/PROD1/system01.dbf'
2.3 还原数据文件
2.3.1 查询当前数据库状态
SQL> select status from v$instance; STATUS ------- MOUNTED
2.3.2 查询动态性能视图 v$recover_file 确认哪些文件需要恢复
SQL> select * from v$recover_file; FILE# ONLINE ONLINE_STATUS ERROR CHANGE# ---------- ------- ------------- -------------- ------- 1 ONLINE ONLINE FILE NOT FOUND 0
2.3.3 ERROR列显示根本就没有1号文件,下面进行还原
SQL> !cp /u01/app/oracle/backup/system01.dbf /u01/app/oracle/oradata/PROD1/
2.3.4 再次查询动态性能视图 v$recover_file 确认哪些文件需要恢复
SQL> select * from v$recover_file; FILE# ONLINE ONLINE_STATUS ERROR CHANGE# TIME ---------- ------ ------------- ----- ------- ------------------- 1 ONLINE ONLINE 1288399 2019-05-16 16:41:47
2.4 恢复数据文件
SQL> recover datafile 1; Media recovery complete.
2.5 打开数据库
SQL> alter database open; Database altered.