【oracle rman 全库备份 异地恢复】

操作系统:Centos5.5
Oracle10g版本: 10.2.0.1.0
内容:在A机上做备份,到B机上做恢复

说明:

  • A机、B机数据库版本一致
  • B机oracle的安装目录最好和A机相同,如,控制文件,重做日志文件,数据文件保持和A机一致 如同在:/opt/oracle/oradata/orcl/目录下,不然需要进行更改路径恢复
  • 联机备份前必须设置好快闪恢复区,备份数据到数据集(backupset),恢复时也从数据集(backupset)恢复。当然备份路径除了默认的快闪恢复区,还有rman参数指定路径(rman参数查看show all,但要注意用户设置的rman配置在nomount数据库状态是无法获取的,只能是rman默认配置。所以自动恢复参数或控制文件自能在默认配置路径中)。
  • B机恢复时先新建库实例(如orcl),或有现存的类似数据库删除相同的用户或表空间后也可以恢复。恢复一次后,后续便可以直接恢复。
  • 启动rman可执行程序,在oracle用户下输入rman启动,exit退出

1. 在oracle中创建专用的rman用户及赋权。(推荐建立专用的rman用户)

启动sqlplus:./sqlplus /nolog
忽略口令登陆oracle:connect /as sysdba
创建rman用户:create user rmanuser identified by oracle;
赋予DBA权限:grant resource,connect,dba to rmanuser;
oracle用户下登录: rman target rmanuser/oracle

 注:或者oracle用户下直接使用操作系统认证连接到RMAN,rman target /

2. 对A机全库进行备份

2.1 A机全库备份:backup as compressed backupset database include current controlfile plus archivelog;

输出如下:

Starting backup at 2019-06-30 23:21:47
current log archived  --当前日志归档
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed archived log backup set --做的是归档日志的备份
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=96 RECID=85 STAMP=1012342987  --
input archived log thread=1 sequence=97 RECID=86 STAMP=1012343146  --
input archived log thread=1 sequence=98 RECID=87 STAMP=1012346482  --
input archived log thread=1 sequence=99 RECID=88 STAMP=1012346507  --包含了85,86,87,88四个归档日志
channel ORA_DISK_1: starting piece 1 at 2019-06-30 23:21:47
channel ORA_DISK_1: finished piece 1 at 2019-06-30 23:21:50
piece handle=/u01/app/oracle/fast_recovery_area/RYAN1/backupset/2019_06_30/o1_mf_annnn_TAG20190630T232147_gkknwcjy_.bkp tag=TAG20190630T232147 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 2019-06-30 23:21:50

Starting backup at 2019-06-30 23:21:50
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed full datafile backup set --接着做数据文件全备
channel ORA_DISK_1: specifying datafile(s) in backup set --备份集里包含以下数据文件

input datafile file number=00007 name=/oradata/datafile/ryan1/cbo01.dbf
input datafile file number=00001 name=/oradata/datafile/ryan1/system01.dbf
input datafile file number=00002 name=/oradata/datafile/ryan1/sysaux01.dbf
input datafile file number=00005 name=/oradata/datafile/ryan1/ryan01.dbf
input datafile file number=00003 name=/oradata/datafile/ryan1/undotbs01.dbf
input datafile file number=00004 name=/oradata/datafile/ryan1/users01.dbf
input datafile file number=00006 name=/oradata/datafile/ryan1/undotbs2_01.dbf
channel ORA_DISK_1: starting piece 1 at 2019-06-30 23:21:51
channel ORA_DISK_1: finished piece 1 at 2019-06-30 23:24:06
piece handle=/u01/app/oracle/fast_recovery_area/RYAN1/backupset/2019_06_30/o1_mf_nnndf_TAG20190630T232150_gkknwhd6_.bkp tag=TAG20190630T232150 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:15
channel ORA_DISK_1: starting compressed full datafile backup set --另一个数据文件备份
channel ORA_DISK_1: specifying datafile(s) in backup set --没有数据文件,只剩下控制文件和SPFILE文件

including current control file in backup set  --此备份集包含了当前控制文件
including current SPFILE in backup set  --包含了SPFILE文件

channel ORA_DISK_1: starting piece 1 at 2019-06-30 23:24:07
channel ORA_DISK_1: finished piece 1 at 2019-06-30 23:24:08
piece handle=/u01/app/oracle/fast_recovery_area/RYAN1/backupset/2019_06_30/o1_mf_ncsnf_TAG20190630T232150_gkko0qv7_.bkp tag=TAG20190630T232150 comment=NONE  --记住这个backup piece
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2019-06-30 23:24:08

Starting backup at 2019-06-30 23:24:08
current log archived --当前日志归档
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed archived log backup set --又做了一次归档日志的备份
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=100 RECID=89 STAMP=1012346648 --可以看到这是新的归档89
channel ORA_DISK_1: starting piece 1 at 2019-06-30 23:24:09
channel ORA_DISK_1: finished piece 1 at 2019-06-30 23:24:10
piece handle=/u01/app/oracle/fast_recovery_area/RYAN1/backupset/2019_06_30/o1_mf_annnn_TAG20190630T232409_gkko0s7n_.bkp tag=TAG20190630T232409 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2019-06-30 23:24:10

2.2 复制A机全库备份的文件到B机:scp -r /opt/oracle/flash_recovery_area/ORCL/backupset/* oracle@192.168.0.17:/opt/oracle/flash_recovery_area/ORCL/backupset  或者 使用(远程挂载网络磁盘详解---nfs共享)的方式

3.  在 B机 进行恢复:

3.1 SQL> startup nomount (先shutdown immediate数据库在启动到nomount状态)

3.2 RMAN> set DBID=1501782781 ,A机数据库的DBID(select DBID from v$database;)

3.3 恢复参数文件:可以用以下语句方式,也可以使用B机文件(整库恢复后在修改到A机库所需要的参数值)最好先备份 B机数据库参数文件文件夹(我的环境/opt/oracle/102/dbs文件夹)。

RMAN> restore spfile from "/opt/oracle/flash_recovery_area/ORCL/backupset/2022_01_05/o1_mf_ncsnf_TAG20220105T170515_jxbrbbvf_.bkp"; --前提o1_mf_ncsnf_TAG20220105T170515_jxbrbbvf_.bkp这个文件备份了参数文件信息,

3.4 恢复控制文件:RMAN> restore controlfile from "/opt/oracle/flash_recovery_area/ORCL/backupset/2022_01_06/o1_mf_ncsnf_TAG20220106T141508_jxf2x0fk_.bkp";

3.5 更改数据库到mount状态:RMAN> alter database mount;

3.6 恢复数据库:RMAN> restore database;(如果之前数据库恢复过,并使用resetlogs模式打开过数据库,那么请先执行reset database to incarnation 2;在执行restore database;进行恢复)

输出如下:

Starting restore at 05-122
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00002 to /opt/oracle/oradata/orcl/undotbs01.dbf
restoring datafile 00004 to /opt/oracle/oradata/orcl/users01.dbf
restoring datafile 00018 to /opt/oracle/oradata2/production/production_partition01.dbf
channel ORA_DISK_1: reading from backup piece /opt/oracle/flash_recovery_area/ORCL/backupset/2022_01_05/o1_mf_nnndf_TAG20220105T170515_jxbqtc5k_.bkp
channel ORA_DISK_1: restored backup piece 1
piece handle=/opt/oracle/flash_recovery_area/ORCL/backupset/2022_01_05/o1_mf_nnndf_TAG20220105T170515_jxbqtc5k_.bkp tag=TAG20220105T170515
channel ORA_DISK_1: restore complete, elapsed time: 00:18:56
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /opt/oracle/oradata/orcl/system01.dbf
restoring datafile 00003 to /opt/oracle/oradata/orcl/sysaux01.dbf
restoring datafile 00005 to /opt/oracle/oradata/orcl/example01.dbf
restoring datafile 00020 to /opt/oracle/oradata2/production/production_partition02.dbf
channel ORA_DISK_1: reading from backup piece /opt/oracle/flash_recovery_area/ORCL/backupset/2022_01_05/o1_mf_nnndf_TAG20220105T170515_jxbr5gk7_.bkp
channel ORA_DISK_1: restored backup piece 1
piece handle=/opt/oracle/flash_recovery_area/ORCL/backupset/2022_01_05/o1_mf_nnndf_TAG20220105T170515_jxbr5gk7_.bkp tag=TAG20220105T170515
channel ORA_DISK_1: restore complete, elapsed time: 00:06:56
Finished restore at 06-122

3.7 复制联机日志文件到B机目标端恢复当前日志记录 (如果A机库联机日志存在的情况下进行拷贝,如果不拷贝联机日志缺失情况下执行 recover database会报错,只能不完全恢复了)

scp /opt/oracle/oradata/orcl/redo01.log oracle@192.168.0.17:/opt/oracle/oradata/orcl
scp /opt/oracle/oradata/orcl/redo02.log oracle@192.168.0.17:/opt/oracle/oradata/orcl
scp /opt/oracle/oradata/orcl/redo03.log oracle@192.168.0.17:/opt/oracle/oradata/orcl

注:A机和B机都可进行复制,此处在A机进行的复制

3.8 B机恢复:RMAN> recover database;(有日志情况下使用recover database,否则报错但不影响数据库恢复启动。日志丢失无法使用redo数据时,使用recover database noredo命令恢复)

输出如下:

Starting recover at 06-122
using channel ORA_DISK_1

starting media recovery

archive log thread 1 sequence 47494 is already on disk as file /opt/oracle/oradata/orcl/redo03.log
archive log thread 1 sequence 47495 is already on disk as file /opt/oracle/oradata/orcl/redo01.log
archive log filename=/opt/oracle/oradata/orcl/redo03.log thread=1 sequence=47494
archive log filename=/opt/oracle/oradata/orcl/redo01.log thread=1 sequence=47495
media recovery complete, elapsed time: 00:00:24 --复原完成
Finished recover at 06-122

3.9 B机更改数据库到open状态:RMAN> alter database open resetlogs;(因为是新库,日志文件已经没有了,所以以resetlogs模式启动,重做日志序列号将重置从1开始)

--到此 oracle rman 全库备份 异地恢复 完成

archive log list;--查看归档是否开启
show parameter DB_RECOVERY_FILE_DEST--查看快闪恢复区路径及大小

注意:执行RMAN> restore database;--注意数据文件路径不全会报错
恢复时会覆盖原有文件,目标数据库中原本有而恢复文件中没有的文件将成为多余的数据文件不加载到库中

附:错误“没有找到预期的归档日志,归档日志的丢失将影响可恢复性” 是由于找不到归档日志,可能是之前手动删除物理归档日志造成的。参考https://blog.csdn.net/shayuwei/article/details/101511591--RMAN-06059: 没有找到预期的归档日志, 归档日志的丢失将影响可恢复性

附:RMAN-06023: no backup or copy of datafile 1 found to restore --报这个错误的解决方案
https://www.cnblogs.com/kerrycode/p/4320996.html(因为中间我对该数据库做了一次不完全恢复,做了resetlogs操作导致的错误)

附:SQL> recover database using backup controlfile until cancel; --不完全恢复数据库

附:当rman备份执行命令出现以下类似错误时关键在后两个错误,前3个忽略

RMAN> recover database;

Starting recover at 06-122
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 01/06/2022 00:24:48
ORA-19698: /opt/oracle/oradata/orcl/redo01.log is from different database: id=1475709944, db_name=ORCL

附:参考文章

https://www.cnblogs.com/ryanw/articles/11111910.html
https://blog.csdn.net/zq9017197/article/details/9223031


补充增量备份语句 

backup incremental level 0 as compressed backupset database include current controlfile plus archivelog; --incremental level 0(级别0的全库备份)
backup incremental level 1 cumulative as compressed backupset database include current controlfile plus archivelog; --incremental level 1 cumulative(级别1的累积增量备份)
backup incremental level 1 as compressed backupset database include current controlfile plus archivelog; --incremental level 1(级别1的差异增量备份) 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值