代码改变世界

己亥清爽恢复系列之数据文件1篇:SYSTEM物理损坏或丢失(关键表空间)

2019-05-16 17:28  askscuti  阅读(1072)  评论(1编辑  收藏  举报

己亥清爽系列说明:清爽系列是作为恢复系列的基础篇,基于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.