Oracle备份恢复二(手动完全恢复)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
    平台:redhat linux as5,oracle10g
    备份和恢复对于数据库来说是非常重要的,如果没有有效的备份,那么数据的安全就是只空谈,所以说备份重于一切,oracle备份恢复()里已经讨论如何手动备份整个数据库以及单独备份控制文件等,现在讨论当数据库有损坏时如何利用备份恢复数据.
恢复分为完全恢复和不完全恢复,完全恢复是把数据库恢复到失败点,不完全恢复是当数据库出现文件损坏时,把数据库恢复到备份点和失败点之间的某个时间,
    本文讨论如何完全恢复,先介绍在mount状态及open状态恢复数据的步骤,然后通过两个实例看如何一步步的把损坏的数据恢复回来.

1.Mount状态恢复步骤

1.启动数据库到mount状态
SQL>startup mount;
SQL>startup force mount;
2.转储备份的数据文件
SQL>! cp ‘backup.dbf’ ‘/xxx/aaa’
3.恢复数据文件
SQL>recover datafile file#
SQL>recover from ‘/u01/oracle/xxx.log’ datafile file#
SQL>recover database databasename
4.恢复数据库为open状态
SQL> alter database open;
Database altered.

2.open状态恢复步骤

1,数据库到open状态,损坏的数据文件脱机
如果现在数据库为shutdown状态,先到mount状态脱机损坏的数据文件,然后把数据库open
SQL>startup mount;
SQL>startup force mount;
SQL>select file#,error from v$recover_file;
SQL>alter database datafile file# offline;
SQL>alter database open
如果现在数据库为open状态,接在把损坏的数据文件脱机
SQL>select file#,error from v$recover_file ;
SQL>alter database datafile file# offline;
2.转储备份的数据文件
SQL>! cp ‘backup.dbf’ ‘/xxx/aaa’
3.恢复数据文件
SQL>recover datafile file#
SQL>recover from ‘/u01/oracle/xxx.log’ datafile file#
SQL>recover tablespace tablespacename;
4.数据文件联机
SQL>alter database datafile file# online;

3.实例

1.mount状态恢复system表空间
    在system表空间建一个表t,并插入数据
SQL> alter system switch logfile;
SQL> create table t(i number) tablespace system;
SQL> insert into t values(1);
SQL> insert into t values(2);
SQL> insert into t values(3);
SQL> commit;
SQL> alter system switch logfile;
SQL> select * from t;
         I
-------------------
         1
         2
         3
关闭数据库,删除数据文件system01.dbf
SQL> shutdown immediate;
SQL> ! mv /u01/oradata/denver/system01.dbf /u01/oradata/denver/system01.dbf.bak
启动数据库
SQL> startup;
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u01/oradata/denver/system01.dbf'
SQL> select status from v$instance;
STATUS
------------
MOUNTED
#只能启动到mounted状态
查看需要恢复的数据文件
SQL> col error format a30
SQL> select file#,error,change# from v$recover_file;
 FILE#   ERROR                           CHANGE#
---------- ------------------------------ -------------------------------------
   1     FILE NOT FOUND                      0
查看一下恢复需要的archivelog
SQL> col archive_name format a30
SQL> select sequence#,archive_name from v$recovery_log;
 SEQUENCE#    ARCHIVE_NAME
------------------- ----------------------------------------------
        29      /u01/oradata/denver/archive/1_29.dbf
#只要归档日志1_29.dbf还存在就能恢复
转储备份的数据文件
SQL> ! cp /u01/backup/system01.dbf /u01/oradata/denver/
SQL> select file#,error,change# from v$recover_file;
FILE#    ERROR                           CHANGE#
---------- ------------------------------ ------------------------------------------
   1                                        1661187
恢复
#1_29.dbf不在默 认归档目
SQL> recover from '/u01/oradata/denver/archive/1_29.dbf datafile 1;
#1_29.dbf在默认归档目
SQL> recover datafile 1;
ORA-00279: change 1661187 generated at 05/05/2009 21:51:54 needed for thread 1
ORA-00289: suggestion : /u01/oradata/denver/archive/1_29.dbf
ORA-00280: change 1661187 for thread 1 is in sequence #29
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
Log applied.
Media recovery complete.
改变数据库为open状态,查看是否恢复成功
SQL> alter database open;
Database altered.
SQL> select * from t;
         I
--------------------
         1
         2
         3
#可见恢复成功了
2.openu状态恢复未备份的数据文件
先新建一个表空间chenxy,并在上面建表chenxy,如下:
SQL> create tablespace chenxy datafile '/u01/oradata/denver/chenxy.dbf' size 2M;
SQL> create table chenxy(i number) tablespace chenxy;
SQL> insert into chenxy values(10);
SQL> insert into chenxy values(20);
SQL> commit;
SQL> alter system switch logfile;
SQL> select * from chenxy;
         I
-------------------
        10
        20
删除数据文件chenxy.dbf
SQL> ! mv /u01/oradata/denver/chenxy.dbf /u01/oradata/denver/chenxy.dbf.bak;
再查表chenxy就报错了
SQL> select * from chenxy;
ERROR at line 1:
ORA-00376: file 13 cannot be read at this time
ORA-01110: data file 13: '/u01/oradata/denver/chenxy.dbf'
查看需要恢复的文件
SQL> select file#,error,change# from v$recover_file;
   FILE#   ERROR                             CHANGE#
-------------- ------------------------------------------------------------- ----------
    13    FILE NOT FOUND                          0
SQL> select status from v$datafile where file#=13;
STATUS
-------
RECOVER
因为没有备份,使用控制文件新建数据文件
SQL> alter database datafile 13 offline;
#如果有备份的数据文件
SQL>! cp backup.dbf  '/u01/oradata/denver/chenxy.dbf';
#l因为没有备份,现在用控制文件新建数据文件
SQL> alter database create datafile '/u01/oradata/denver/chenxy.dbf';
SQL> select file#,error,change# from v$recover_file;
     FILE# ERROR                             CHANGE#
---------- ------------------------------ ----------------------------------------
        13                                      1662171
恢复并把数据文件13联机
SQL> recover datafile 13;
Media recovery complete.
SQL> alter database datafile 13 online;
现在查chenxy
SQL> select * from chenxy;
         I
--------------------
        10
        20
恢复成功了,可见只要归档日志没有丢失,没有备份的数据文件也可以恢复回来.
其它
    完全恢复的三个语句
recover database      用来恢 整个数据的所有数据文件,只能在mount运行
recover tablespace     用来恢 某个表空的所有数据文件,只能在open运行
recover datafile       用来恢 某个数据文件,mount,open都可以运行
    恢复数据库时用到的动态性能视图
v$recover_file       示需要恢的数据文件
v$recovery_log      示恢所需的档日志,如果恢所需的日志,也就想恢,
v$archived_log       示所有的档日志
v$loghist              档日志SCN信息




本文转自 vfast_chenxy 51CTO博客,原文链接:http://blog.51cto.com/chenxy/170539,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
Oracle 关系型数据库 MySQL
Oracle OCP 19c 考试(1Z0-083)中关于Oracle不完全恢复的考点
下面是Oracle 19c OCP考试(1Z0-083)中关于Oracle不完全恢复的题目:
227 0
|
Oracle 关系型数据库 数据库
ORACLE不完全恢复的几种情况
ORACLE不完全恢复的几种情况 1、介绍        RMAN不完全恢复的三个标准模式:基于time、基于scn和基于sequence,与手工不完全恢复相比原理类似,语法稍有不同: 2、不完全恢复的几种情况 ### 1)不完全恢复用于最小化测试备份 ###①备份一部分数据文件 .
7367 0
|
Oracle 关系型数据库 数据库
|
SQL Oracle 关系型数据库
|
SQL Oracle 关系型数据库
oracle基于时间点的不完全恢复
下面我们做一个实验,演示如何对oracle进行基于时间点的不完全恢复(在实验之前请确保数据库具有有效备份): 获取此时的时间并记录下来: SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;...
1117 0
|
Oracle 关系型数据库 数据库
Oracle之不完全恢复
整理自《Oracle database 11g RMAN 备份与恢复》 001 概述     顾名思义,不完全恢复就是指不完全的数据库恢复。不完全恢复与完全恢复在许多方面是相同的,它们基本的命令集相同,但不完全恢复添加了一些其它命令。
1279 0
|
Oracle 关系型数据库 数据库
记录一次ORACLE的不完全恢复
前言:之前说过一句话,备份有时候就是用于数据库的恢复,虽然很多时候都用不上。但是你永远不知道什么时候会用上,这就是备份的意义; 昨天晚上10点多的时候,突然朋友打电话过来,要帮忙做一个数据库基于时间点的恢复。
784 0
|
21天前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
139 64