专业只做数据库实训和认证的品牌机构

微信公众号新浪微博
免费咨询电话:400-0909-964
当前位置: 网站首页 > DBA实战 > DBA课程 > DBA基础课程:Oracle备份恢复-手动完全恢复

DBA基础课程:Oracle备份恢复-手动完全恢复

文章来源: 更新时间:2016/6/24 13:27:39

在线老师点击咨询:

最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!

我要咨询

DBA基础课程:Oracle备份恢复-手动完全恢复

平台:redhat linux as5,Oracle10g

备份和恢复对于数据库来说是非常重要的,如果没有有效的备份,那么数据的安全就是只空谈,所以说备份重于一切,在Oracle备份恢复(手动备份)里已经讨论如何手动备份整个数据库以及单独备份控制文件等,现在讨论当数据库有损坏时如何利用备份恢复数据.

恢复分为完全恢复和不完全恢复,完全恢复是把数据库恢复到失败点,不完全恢复是当数据库出现文件损坏时,把数据库恢复到备份点和失败点之间的某个时间,

本文讨论如何完全恢复,先介绍在mount状态及open状态恢复数据的步骤,然后通过两个实例看如何一步步的把损坏的数据恢复回来.

一.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.

二.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;

三.实例

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: {=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信息

本文地址:http://www.cuug.com.cn/dba/kecheng/12299566193.html 转载请注明!


在线预约 抢先报名 获取课程排期

Oracle培训机构

金牌讲师<>

冉乃纲-老师CUUG金牌讲师
冉老师 CUUG金牌讲师 Oracle及RedHat高级讲师、Unix/Linux 资深专家...[详细了解老师]

免费咨询上课流程 客服在线中

陈卫星-老师CUUG金牌讲师
陈老师 CUUG金牌讲师 精通Oracle管理、备份恢复、性能优化 11年Ora...[详细了解老师]

免费咨询上课流程 客服在线中

选学校如何选择适合自己的学校

CUUG -CHINA UNIX USER GROUP,是国际UNIX组织UNIFORUM的中国代表,是国内悠久的专业UNIX培训机构,被誉为中国UNIX 的摇篮。多年来,以提高教学质量为本,强调素质教育,积极引进、消化国外的新技术,有效的结合中国....[详情]

一站式服务(从入学到就业一帮到底)

入学

学习

就业

实操

食宿
地址:北京市海淀区田村山南路35号院17号楼
课程咨询:010-59426307 010-59426319 400-0909-964
企业服务:137 1818 8639(陈经理)
部分信息来源于网络,如有错误请联系指正!
版权所有@北京神脑资讯技术有限公司 (CUUG,中国UNIX用户协会) Copyright 2016 ALL Rights Reserved 京ICP备11008061号-1