oracle从归档日志恢复数据,备份与恢复--从备份的归档日志中恢复数据

本文详细介绍了如何从备份的归档日志中恢复Oracle数据库数据,包括将数据文件替换、恢复表空间以及在归档日志丢失或空间不足情况下的恢复方法。通过具体的SQL命令和操作步骤,展示了恢复过程中的常见问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在恢复过程中,Oracle利用归档日志进行恢复,默认情况下,Oracle会在归档日志的产生目录来寻找归档日志文件。

如果在恢复时发现归档日志被备份并从归档目录删除,则Oracle在恢复过程中无法找到指定的归档日志文件。[@more@]

SQL> alter tablespace users offline;

Tablespace altered.

备份当前的归档日志

SQL> host cp /u01/app/oracle/admin/orcl/archive/*.* /u01/backup/archive

移除当前的归档日志

SQL> host rm /u01/app/oracle/admin/orcl/archive/*.*

用备份的datafile替换当前的

SQL> host cp /u01/backup/users01.dbf /u01/app/oracle/oradata/orcl

SQL> recover tablespace users;

ORA-00279: change 685260 generated at 01/13/2009 09:45:47 needed for thread 1

ORA-00289: suggestion : /u01/app/oracle/admin/orcl/archive/1_23_675592897.dbf

ORA-00280: change 685260 for thread 1 is in sequence #23

Specify log: {=suggested | filename | AUTO | CANCEL}

AUTO

ORA-00308: cannot open archived log '/u01/app/oracle/admin/orcl/archive/1_23_675592897.dbf'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

ORA-00308: cannot open archived log '/u01/app/oracle/admin/orcl/archive/1_23_675592897.dbf'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

这时做recovery时提示找不到归档日志。

SQL> host cp /u01/backup/archive/*.* /u01/app/oracle/admin/orcl/archive

SQL> recover tablespace users;

ORA-00279: change 685260 generated at 01/13/2009 09:45:47 needed for thread 1

ORA-00289: suggestion : /u01/app/oracle/admin/orcl/archive/1_23_675592897.dbf

ORA-00280: change 685260 for thread 1 is in sequence #23

Specify log: {=suggested | filename | AUTO | CANCEL}

AUTO

ORA-00279: change 685550 generated at 01/13/2009 10:00:56 needed for thread 1

ORA-00289: suggestion : /u01/app/oracle/admin/orcl/archive/1_24_675592897.dbf

ORA-00280: change 685550 for thread 1 is in sequence #24

ORA-00278: log file '/u01/app/oracle/admin/orcl/archive/1_23_675592897.dbf' no longer needed

for this recovery

ORA-00279: change 685552 generated at 01/13/2009 10:00:56 needed for thread 1

ORA-00289: suggestion : /u01/app/oracle/admin/orcl/archive/1_25_675592897.dbf

ORA-00280: change 685552 for thread 1 is in sequence #25

ORA-00278: log file '/u01/app/oracle/admin/orcl/archive/1_24_675592897.dbf' no longer needed

for this recovery

ORA-00279: change 685603 generated at 01/13/2009 10:02:38 needed for thread 1

ORA-00289: suggestion : /u01/app/oracle/admin/orcl/archive/1_26_675592897.dbf

ORA-00280: change 685603 for thread 1 is in sequence #26

ORA-00278: log file '/u01/app/oracle/admin/orcl/archive/1_25_675592897.dbf' no longer needed

for this recovery

Log applied.

Media recovery complete.

将归档日志都拷贝回来后,recovery成功。

如果归档目录的空间不足,无法将归档日志拷贝到归档目录下,则可以使用下面三种方法进行恢复。

方法一:分别指定备份的归档日志

SQL> host rm /u01/app/oracle/admin/orcl/archive/*.*

SQL> host cp /u01/backup/users01.dbf /u01/app/oracle/oradata/orcl

SQL> recover tablespace users;

ORA-00279: change 685260 generated at 01/13/2009 09:45:47 needed for thread 1

ORA-00289: suggestion : /u01/app/oracle/admin/orcl/archive/1_23_675592897.dbf

ORA-00280: change 685260 for thread 1 is in sequence #23

Specify log: {=suggested | filename | AUTO | CANCEL}

/u01/backup/archive/1_23_675592897.dbf

ORA-00279: change 685550 generated at 01/13/2009 10:00:56 needed for thread 1

ORA-00289: suggestion : /u01/app/oracle/admin/orcl/archive/1_24_675592897.dbf

ORA-00280: change 685550 for thread 1 is in sequence #24

ORA-00278: log file '/u01/backup/archive/1_23_675592897.dbf' no longer needed for this

recovery

Specify log: {=suggested | filename | AUTO | CANCEL}

/u01/backup/archive/1_24_675592897.dbf

ORA-00279: change 685552 generated at 01/13/2009 10:00:56 needed for thread 1

ORA-00289: suggestion : /u01/app/oracle/admin/orcl/archive/1_25_675592897.dbf

ORA-00280: change 685552 for thread 1 is in sequence #25

ORA-00278: log file '/u01/backup/archive/1_24_675592897.dbf' no longer needed for this

recovery

Specify log: {=suggested | filename | AUTO | CANCEL}

/u01/backup/archive/1_253_675592897.dbf

ORA-00308: cannot open archived log '/u01/backup/archive/1_253_675592897.dbf'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

Specify log: {=suggested | filename | AUTO | CANCEL}

/u01/backup/archive/1_25_675592897.dbf

ORA-00279: change 685603 generated at 01/13/2009 10:02:38 needed for thread 1

ORA-00289: suggestion : /u01/app/oracle/admin/orcl/archive/1_26_675592897.dbf

ORA-00280: change 685603 for thread 1 is in sequence #26

ORA-00278: log file '/u01/backup/archive/1_25_675592897.dbf' no longer needed for this

recovery

Specify log: {=suggested | filename | AUTO | CANCEL}

/u01/backup/archive/1_26_675592897.dbf

Log applied.

Media recovery complete.

第一种方法也是最简单的一种方法,在恢复过程中直接给出每个归档日志包含当前路径的文件名。这种方

法适合需要恢复的重做日志数量不多。

方法二:

SQL> host cp /u01/backup/users01.dbf /u01/app/oracle/oradata/orcl

SQL> alter database recover automatic from '/u01/backup/archive' tablespace users;

Database altered.

SQL> alter tablespace users online;

Tablespace altered.

SQL> select count(*) from jglu.a;

COUNT(*)

----------

2

第二种方法是使用ALTER DATABASE RECOVER FROM语句指定恢复时读取归档日志的目录。

看看日志记录的信息,这种方法比较快捷

Tue Jan 13 10:15:43 2009

alter database recover automatic from '/u01/backup/archive' tablespace users

Tue Jan 13 10:15:43 2009

Media Recovery Start

Tue Jan 13 10:15:43 2009

Media Recovery Log /u01/backup/archive/1_23_675592897.dbf

Tue Jan 13 10:15:43 2009

Media Recovery Log /u01/backup/archive/1_24_675592897.dbf

Tue Jan 13 10:15:43 2009

Media Recovery Log /u01/backup/archive/1_25_675592897.dbf

Tue Jan 13 10:15:43 2009

Media Recovery Log /u01/backup/archive/1_26_675592897.dbf

Tue Jan 13 10:15:43 2009

Recovery of Online Redo Log: Thread 1 Group 2 Seq 27 Reading mem 0

Mem# 0 errs 0: /u01/app/oracle/oradata/orcl/redo02.log

Tue Jan 13 10:15:44 2009

Recovery of Online Redo Log: Thread 1 Group 3 Seq 28 Reading mem 0

Mem# 0 errs 0: /u01/app/oracle/oradata/orcl/redo03.log

Tue Jan 13 10:15:44 2009

Recovery of Online Redo Log: Thread 1 Group 1 Seq 29 Reading mem 0

Mem# 0 errs 0: /u01/app/oracle/oradata/orcl/redo01.log

Tue Jan 13 10:15:44 2009

Media Recovery Complete (orcl)

Completed: alter database recover automatic from '/u01/backup/archive' tablespace users

第三种方法:

SQL> alter tablespace users offline;

Tablespace altered.

SQL> host cp /u01/backup/users01.dbf /u01/app/oracle/oradata/orcl

SQL> set logsource '/u01/backup/archive'

SQL> recover tablespace users;

ORA-00279: change 685260 generated at 01/13/2009 09:45:47 needed for thread 1

ORA-00289: suggestion : /u01/backup/archive/1_23_675592897.dbf

ORA-00280: change 685260 for thread 1 is in sequence #23

Specify log: {=suggested | filename | AUTO | CANCEL}

AUTO

ORA-00279: change 685550 generated at 01/13/2009 10:00:56 needed for thread 1

ORA-00289: suggestion : /u01/backup/archive/1_24_675592897.dbf

ORA-00280: change 685550 for thread 1 is in sequence #24

ORA-00278: log file '/u01/backup/archive/1_23_675592897.dbf' no longer needed for this

recovery

ORA-00279: change 685552 generated at 01/13/2009 10:00:56 needed for thread 1

ORA-00289: suggestion : /u01/backup/archive/1_25_675592897.dbf

ORA-00280: change 685552 for thread 1 is in sequence #25

ORA-00278: log file '/u01/backup/archive/1_24_675592897.dbf' no longer needed for this

recovery

ORA-00279: change 685603 generated at 01/13/2009 10:02:38 needed for thread 1

ORA-00289: suggestion : /u01/backup/archive/1_26_675592897.dbf

ORA-00280: change 685603 for thread 1 is in sequence #26

ORA-00278: log file '/u01/backup/archive/1_25_675592897.dbf' no longer needed for this

recovery

Log applied.

Media recovery complete.

SQL> alter tablespace users online;

Tablespace altered.

SQL> select * from jglu.a;

ID

----------

1

2

这种方法是利用SQLPLUS的SET命令设置读取归档日志的目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值