使用RMAN恢复数据库的过程

63次阅读
没有评论

共计 9641 个字符,预计需要花费 25 分钟才能阅读完成。

这篇文章主要讲解了“使用 RMAN 恢复数据库的过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“使用 RMAN 恢复数据库的过程”吧!

由于需要搭建一个测试环境,把上周末的一个全备拿出来做恢复,首先备份一下测试库上现有的重要表:

exp banping/bangping@ERPTEST file=f:\20090905.dmp tables=(msgtaskdef,rptcol,rptdata)

然后把全备的备份片文件和控制文件 COPY 过来:

rcp p5b1:/orabak/ctl_file/c-2400249746-20090828-02 /orabak
rcp p5b1:/orabak/arch/* /orabak

文件属主给 Oracle:

p5b2@/orabak#chown oracle.dba *

然后启动数据库到 nomount 状态,进入 Rman 环境,restore 控制文件:

$ rman target /
RMAN restore controlfile from /orabak/ c-2400249746-20090828-02

启动到 mount 状态:

RMAN sql alter database mount

根据测试库的环境重命名数据文件的位置:

run {
 allocate channel c1 device type disk;
 allocate channel c2 device type disk;
 set newname for datafile /dev/rdb_system to /u02/oradata/erpdev2/rdb_system
 set newname for datafile /dev/rdb_undotbs1 to /u02/oradata/erpdev2/rdb_undotbs1
 set newname for datafile /dev/rdb_sysaux to /u02/oradata/erpdev2/rdb_sysaux
 set newname for datafile /dev/rdb_undotbs2 to /u02/oradata/erpdev2/rdb_undotbs2
 set newname for datafile /dev/rdb_users to /u02/oradata/erpdev2/rdb_users
 set newname for datafile /dev/rdb_erp to /u02/oradata/erpdev2/rdb_erp
 set newname for datafile /dev/rdb_erp_index to /u02/oradata/erpdev2/rdb_erp_index
 set newname for datafile /dev/rdb_erp_xm to /u02/oradata/erpdev2/rdb_erp_xm
 set newname for datafile /dev/rdb_erp_ht to /u02/oradata/erpdev2/rdb_erp_ht
 set newname for datafile /dev/rdb_erp_wl to /u02/oradata/erpdev2/rdb_erp_wl
 set newname for datafile /dev/rdb_erp_cw to /u02/oradata/erpdev2/rdb_erp_cw
 set newname for datafile /dev/rdb_erp_zj to /u02/oradata/erpdev2/rdb_erp_zj
 set newname for datafile /dev/rdb_erp_sp to /u02/oradata/erpdev2/rdb_erp_sp
 set newname for datafile /dev/rdb_cndwl to /u02/oradata/erpdev2/rdb_cndwl
 set newname for datafile /dev/rdb_xdwl to /u02/oradata/erpdev2/rdb_xdwl
 set newname for datafile /dev/rdb_sysaux2 to /u02/oradata/erpdev2/rdb_sysaux2
 set newname for datafile /dev/rdb_erp2 to /u02/oradata/erpdev2/rdb_erp2
 set newname for datafile /dev/rdb_erp_ht2 to /u02/oradata/erpdev2/rdb_erp_ht2
 restore database;
 switch datafile all;
}

然后执行 recover 操作:

RMAN recover database;

这时数据库报错了:

Oracle Error:
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: /u02/oradata/erpdev2/rdb_system

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 09/04/2009 14:31:39
RMAN-06053: unable to perform media recovery because of missing log
RMAN-06025: no backup of log thread 2 seq 106090 lowscn 10440022578 found to restore
RMAN-06025: no backup of log thread 2 seq 106089 lowscn 10440021828 found to restore
RMAN-06025: no backup of log thread 2 seq 106088 lowscn 10440020848 found to restore
RMAN-06025: no backup of log thread 2 seq 106087 lowscn 10440018779 found to restore
RMAN-06025: no backup of log thread 2 seq 106086 lowscn 10440007985 found to restore
RMAN-06025: no backup of log thread 2 seq 106085 lowscn 10439981571 found to restore
RMAN-06025: no backup of log thread 2 seq 106084 lowscn 10439980750 found to restore
RMAN-06025: no backup of log thread 1 seq 99356 lowscn 10440022588 found to restore
RMAN-06025: no backup of log thread 1 seq 99355 lowscn 10440021839 found to restore
RMAN-06025: no backup of log thread 1 seq 99354 lowscn 10440020856 found to restore
RMAN-06025: no backup of log thread 1 seq 99353 lowscn 10440018824 found to restore
RMAN-06025: no backup of log thread 1 seq 99352 lowscn 10440008036 found to restore
RMAN-06025: no backup of log thread 1 seq 99351 lowscn 10439981670 found to restore
RMAN-06025: no backup of log thread 1 seq 99350 lowscn 10439980746 found to restore

看来有些备份片不全,于是把全备后的备份片弄过来放到 /orabak/arch 目录,先注册到控制文件:

RMAN catalog start with /orabak/arch

searching for all files that match the pattern /orabak/arch

List of Files Unknown to the Database
=====================================
File Name: /orabak/arch/CNDERPDB_arch_20090829_696171285_15256_1
File Name: /orabak/arch/CNDERPDB_arch_20090829_696171311_15258_1
File Name: /orabak/arch/CNDERPDB_arch_20090829_696171617_15257_1
File Name: /orabak/arch/CNDERPDB_arch_20090829_696171922_15259_1
File Name: /orabak/arch/CNDERPDB_arch_20090829_696172209_15260_1
File Name: /orabak/arch/CNDERPDB_arch_20090829_696172385_15261_1

Do you really want to catalog the above files (enter YES or NO)? y
cataloging files…
cataloging done

List of Cataloged Files
=======================
File Name: /orabak/arch/CNDERPDB_arch_20090829_696171285_15256_1
File Name: /orabak/arch/CNDERPDB_arch_20090829_696171311_15258_1
File Name: /orabak/arch/CNDERPDB_arch_20090829_696171617_15257_1
File Name: /orabak/arch/CNDERPDB_arch_20090829_696171922_15259_1
File Name: /orabak/arch/CNDERPDB_arch_20090829_696172209_15260_1
File Name: /orabak/arch/CNDERPDB_arch_20090829_696172385_15261_1

重新进行 recover 操作:

RMAN recover database;

Starting recover at 07-SEP-09
using channel ORA_DISK_1

starting media recovery

archive log thread 1 sequence 99417 is already on disk as file /u02/ora_arch/1_99417_640266118.dbf
unable to find archive log
archive log thread=2 sequence=106154
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 09/07/2009 08:59:16
RMAN-06054: media recovery requesting unknown log: thread 2 seq 106154 lowscn 10444622603

继续找不到需要的备份片,尝试了几次后发现会一直这样找下去:

unable to find archive log
archive log thread=1 sequence=99470
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 09/07/2009 09:29:02
RMAN-06054: media recovery requesting unknown log: thread 1 seq 99470 lowscn 10444784948

由于测试用,指定 SCN 恢复:

RMAN run {
2   set until scn 10444783788;
3   recover database ;
4 }

executing command: SET until clause

Starting recover at 07-SEP-09
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 09/07/2009 09:38:44
RMAN-06556: datafile 1 must be restored from backup older than scn 10444783788

这个通过 list backup of archivelog all 找出来的 SCN 竟然不对,继续把备份片拿回来,执行到刚才说缺失的 10444784948 号 SCN 进行恢复:

RMAN run {
2   set until scn 10444784948;
3   recover database ;
4 }

executing command: SET until clause

Starting recover at 07-SEP-09
using channel ORA_DISK_1

starting media recovery

archive log thread 2 sequence 106205 is already on disk as file /u02/ora_arch/2_106205_640266118.dbf
channel ORA_DISK_1: starting archive log restore to default destination
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=99470
channel ORA_DISK_1: reading from backup piece /orabak/arch/CNDERPDB_arch_20090830_696257683_15267_1
channel ORA_DISK_1: restored backup piece 1
piece handle=/orabak/arch/CNDERPDB_arch_20090830_696257683_15267_1 tag=TAG20090830T130014
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
archive log filename=/u02/ora_arch/1_99470_640266118.dbf thread=1 sequence=99470
archive log filename=/u02/ora_arch/2_106205_640266118.dbf thread=2 sequence=106205
media recovery complete, elapsed time: 00:00:03
Finished recover at 07-SEP-09

尝试打开后报错:

RMAN alter database open;

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 09/07/2009 09:57:10
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

RMAN alter database open resetlogs;

RMAN-06900: WARNING: unable to generate V$RMAN_STATUS or V$RMAN_OUTPUT row
RMAN-06901: WARNING: disabling update of the V$RMAN_STATUS and V$RMAN_OUTPUT rows
ORACLE error from target database:
ORA-19921: maximum number of 64 rows exceeded

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 09/07/2009 09:57:20
ORA-00344: unable to re-create online log /dev/rdb_redo1_11
ORA-27040: file create error, unable to create file
IBM AIX RISC System/6000 Error: 13: Permission denied

按照备份的文件,先在测试库建立一系列 redo 文件:

SQL alter database rename file /dev/rdb_redo1_11 to /u02/oradata/erpdev2/rdb_redo1_1

Database altered.

建立临时表空间文件,可以删除不必要的:

SQL select name from v$tempfile;

NAME
——————————————————————————–
/dev/rdb_erp_temp
/dev/rdb_erp_temp2
/dev/rdb_erp_temp3

SQL alter database rename file /dev/rdb_erp_temp to /u02/oradata/erpdev2/rdb_erp_temp

Database altered.

SQL select name from v$tempfile;

NAME
——————————————————————————–
/u02/oradata/erpdev2/rdb_erp_temp
/dev/rdb_erp_temp2
/dev/rdb_erp_temp3

SQL alter database tempfile /dev/rdb_erp_temp2 drop including datafiles;

Database altered.

SQL alter database tempfile /dev/rdb_erp_temp3 drop including datafiles;

Database altered.

SQL select name from v$tempfile;

NAME
——————————————————————————–
/u02/oradata/erpdev2/rdb_erp_temp

由于是不完全恢复,要 resetlogs 打开:

SQL alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL alter database open resetlogs;

Database altered.

查看归档模式:

SQL archive log list 
Database log mode  Archive Mode
Automatic archival  Enabled
Archive destination  /u02/ora_arch/
Oldest online log sequence  0
Next log sequence to archive  1
Current log sequence  1

关闭归档:

SQL shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL startup mount;
ORACLE instance started.

Total System Global Area  603979776 bytes
Fixed Size  2074704 bytes
Variable Size  318769072 bytes
Database Buffers  276824064 bytes
Redo Buffers  6311936 bytes
Database mounted.
SQL alter database noarchivelog;

Database altered.

SQL alter database open;

Database altered.

感谢各位的阅读,以上就是“使用 RMAN 恢复数据库的过程”的内容了,经过本文的学习后,相信大家对使用 RMAN 恢复数据库的过程这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-01发表,共计9641字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)