使用RMAN进行异机恢复Oracle数据库

目录

1、对源机的处理

1.1 、开启源机的归档模式

1.2 、切换日志

1.3、开始备份 

2、对备机的处理

2.1、安装Oracle12c软件

2.2 、解压备份文件

2.3、创建oracle工作目录

2.4、恢复数据库

2.4.1、恢复参数文件

2.4.2、恢复控制文件

2.4.3、恢复数据文件和归档日志

2.4.4、重做在线日志

2.4.5、查看与验证

3、总结


假设:某一台oracle12c机器上有30个pdb数据库,采用传统的exp/imp和expdp/impdp需要进行多次导入导出,极为不变。

 分析:可以采用oracle自带的RMAN命令导出参数文件、控制文件、数据文件、归档日志

  实施步骤如下:

1、对源机的处理

1.1 、开启源机的归档模式

命令行如下:

# 登陆系统

# 开启数据库

#查看当前归档方式以及归档位置

# 当前未开启归档,开启归档(本次测试归档模式下全库备份迁移)

#改变非归档模式为归档模式

# 关闭数据库
SQL>shutdown immediate
# 开启到mount状态
SQL>startup mount
# 改变归档日志状态
SQL>alter database archivelog;
# 打开数据库
SQL>alter database open;

注意:一定要在mount状态改变归档日志状态,否则会报错!

1.2 、切换日志

# 切换到另外一个日志组

SQL>alter system switch logfile;

说明:

 Archive Mode    --归档模式

Enabled  --自动归档

/u01/app/oracle/product/12.1.0/db_1/arch  --归档路径

25   --最旧的在线日志序列

27 --下一个待归档序列、当前日志序列

1.3 使用rman清理过期日志

su - oracle

rman target /

#列出过期的归档日志

RMAN> list expired archivelog all;

#删除所有过期的归档日志

RMAN> delete expired archivelog all;

#核验比对物理文件和归档日志记录信息一致性(确保控制文件记录与归档一致,防止导入时报错)

crosscheck archivelog all;

1.3、开始备份 

#在源机上的home目录创建backup目录

[oracle@jack /]$ mkdir -p /home/oracle/backup

#打开rman开始备份

注意:先备份数据文件和归档日志,在备份控制文件,在备份参数文件

#备份数据文件和归档日志

RMAN> backup as backupset format '/home/oracle/backup/data_inc0_%d_%I_%T_%t_%s_%p.dbf' database plus archivelog;

#备份控制文件

RMAN> backup current controlfile format '/home/oracle/backup/control_%d_%I_%T_%t_%s_%p.ctl';

#备份参数文件 

RMAN> backup spfile format '/home/oracle/backup/spfile_%d_%I_%T_%t_%s_%p.ora';

#打包、上传给备机

[root@jack ~]# tar -czf backup.tar.gz /home/oracle/backup/

[root@jack ~]# scp backup.tar.gz 192.168.3.22:/home/oracle/

注意:

1、源机的备份路径一定要和备机的路径一致(因为在备份的时候,首先备份的时数据文件,控制文件记录了备份路径)

2、备份的顺序不要乱,数据文件&归档日志、控制文件、参数文件

# 可以看到备份的内容:

2、对备机的处理

前提:

1、备机的系统版本、数据库版本要和主机的保持一致(如果不一致,会怎样?没测试过)

2、导库顺序:先导入参数文件、再导入控制文件、最后导入数据文件和归档日志。

2.1、安装Oracle12c软件

        安装步骤不做赘述,不懂安装的可以查看作者的oracle12c安装文档。

2.2 、解压备份文件

[root@docker ~]#  cd /home/oracle/

[root@docker ~]#  tar -zxvf backup.tar.gz

[root@docker ~]#  rm -rf backup.tar.gz

备机backup路径:/home/oracle/backup

2.3、创建oracle工作目录

mkdir -p /u01/app/oracle/oradata/cdb/pdb/
mkdir -p /u01/app/oracle/oradata/cdb/pdb01/
mkdir -p /u01/app/oracle/oradata/cdb/archivelog
mkdir -p /u01/app/oracle/oradata/cdb/redolog
mkdir -p /u01/app/oracle/admin/cdb/adump
mkdir -p /u01/app/oracle/fast_recovery_area/cdb/
mkdir -p /u01/app/oracle/audit
mkdir -p /u01/app/oracle/cfgtoollogs
mkdir -p /u01/app/oracle/oradata/cdb/pdbseed/

说明:做rman恢复的时候一定要把目录建好,否则在导数据文件的时候会提示datafile无法找到,备份结束!!!

# 授权(保证读取权限没有问题)

chown -R oracle:oinstall /u01/

chown -R oracle:oinstall /home/oracle/

2.4、恢复数据库

2.4.1、恢复参数文件

# 利用数据库自带的init.ora文件强制开启nomount状态

第一个报错:没找到initcdb.ora文件

处理:将init.ora改成initcdb.ora

第二个报错:找不到ORACLE_BASE

处理:将ORACLE_BASE改为绝对路径/u01/app/oracle

第三个报错:找不到路径

处理:因为我自己设置的全局数据库是cdb不是默认的orcl,所以找不到

小结:嫌麻烦可以直接使用源机的spfilecdb.ora将数据库启动到nomount状态;

# 恢复参数文件

RMAN> restore spfile from '/home/oracle/backup/spfile_CDB_2297573232_20240930_1181037243_22_1.ora';

2.4.2、恢复控制文件

# 恢复参数文件以后,启动报错,原因是我们的参数文件记录local_listener,系统找不到

处理方式:

# 因为spfilecdb.ora是二进制文件不能直接修改,所以需要创建pfile文件进行修改

   SQL> create spfile from pfile;

# 重新启动数据库,确保这次database是cdb(表示新的spfilecdb.ora生效)

# 恢复控制文件

RMAN> restore controlfile from '/home/oracle/backup/control_CDB_2297573232_20240930_1181037215_20_1.ctl';

2.4.3、恢复数据文件和归档日志

# 将数据库改位mount,进行数据恢复

# 开始恢复数据库

# 恢复结束的时候,报错:找不到datafile文件(事实上:我们已经将文件全部导出)

#处理方法:

1、通过report schema查看哪些文件没有导入

2、因为每一个pdb都有一个自己的目录,这里缺一个,所以需要新建、授权

[root@docker ~]# mkdir -p /u01/app/oracle/oradata/cdb/jsres
[root@docker ~]# chown -R oracle:oinstall /u01/

3、重新restore

# 通过recover进一步恢复数据库

归档日志写到28,29找不到,这里需要手动指定sequence,告诉数据库恢复到29结束。

2.4.4、重做在线日志

# 以resetlogs方式开启数据库

RMAN> sql alter database open resetlogs;

至此整个数据库恢复过程结束!!!

2.4.5、查看与验证

# 数据库已经可以打开

# 在线重做日志正常

3、总结

1、安装碰见问题在所难免,kill掉就ok!

2、注意操作细节!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值