欢迎来到阿里云授权服务中心典名科技有限公司!咨询电话:023-66887777 18623333330

微信
手机版
网站地图

使用RMAN恢复数据库的过程

2021-08-25 10:29:36 投稿人 : admin 围观 : 318 次 0 评论

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

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

未标题-1.jpg

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.

版权声明:本站部分文章内容、图片来源于网友推荐、互联网收集整理而来,仅供大家学习参考,不代表本站立场,如有侵权,请联系站长,我们会第一时间处理!本站原创内容未经允许不得转载,或转载时需注明出处:典名科技资讯门户

相关文章

  • mysql5.7如何修改root密码
    mysql5.7如何修改root密码

    这篇文章主要介绍了mysql5.7如何修改root密码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql5.7如何修改root密码文章都会有所收获,下面我们一起来看看吧。方法:1、用“set passwo...

    2022-05-23 13:47:02
  • mysql如何修改column
    mysql如何修改column

    这篇文章主要介绍“mysql如何修改column”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql如何修改column”文章能帮助大家解决问题。方法:1、用“alter table 表名 mo...

    2022-05-23 13:47:01
  • mysql的慢查询日志记录哪些内容
    mysql的慢查询日志记录哪些内容

    本篇内容主要讲解“mysql的慢查询日志记录哪些内容”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql的慢查询日志记录哪些内容”吧!在mysql中,慢查询日志记录的是响应时间超过阈值的语句...

    2022-05-23 13:47:01
  • 常见SQL注入类型及原理是什么
    常见SQL注入类型及原理是什么

    这篇“常见SQL注入类型及原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“常见SQL注入类型及原理是什么”文章吧。M...

    2022-05-23 13:47:01
  • mysql workbench中如何注释
    mysql workbench中如何注释

    本篇内容介绍了“mysql workbench中如何注释”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!mysql workbench中的注释...

    2022-05-23 13:46:58
  • mysql如何修改definer
    mysql如何修改definer

    这篇文章主要介绍“mysql如何修改definer”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql如何修改definer”文章能帮助大家解决问题。修改方法:1、利用“update mysql...

    2022-05-23 13:46:56
  • mysql如何查询当前登录的用户
    mysql如何查询当前登录的用户

    本文小编为大家详细介绍“mysql如何查询当前登录的用户”,内容详细,步骤清晰,细节处理妥当,希望这篇“mysql如何查询当前登录的用户”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。方法:1、用USER()函数,...

    2022-05-18 10:01:01
  • mysql如何查询外键约束
    mysql如何查询外键约束

    这篇文章主要介绍了mysql如何查询外键约束的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql如何查询外键约束文章都会有所收获,下面我们一起来看看吧。在mysql中,可以利用show语句查询外键约束,sh...

    2022-05-18 10:01:01
  • mysql查询如何设置降序
    mysql查询如何设置降序

    本篇内容介绍了“mysql查询如何设置降序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在mysql中,可以利用desc关键字对查询结果进行...

    2022-05-18 10:01:00
  • mysql如何修改主键的值
    mysql如何修改主键的值

             这篇文章主要介绍了mysql如何修改主键的值的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql如何修改主键的值文章都会有所收获,下面我们...

    2022-05-18 10:01:00
发表评论