Oracle中rman使用记录

        最近在项目中,遇到使用RMAN的操作来恢复数据库中某个时间归档日志,RMAN的原理和理解,网友们百度了解一下。我重点将实操部分了。直接上实验环节,让网友更懂。(特别提醒:我是1:1用VMware克隆数据库进行RMAN还原。涉及到两个数据库的数据文件、日志文件、控制文件、参数文件的路径一致,如果两个数据库安装路径不同,内部配置路径环境不同,将不适用本方法了。)

目录

一、环境部署

二、源数据库数据体量的检查

​三、源数据库使用RMAN脚本进行数据备份

四、将源数据库中的配置文件,传送到目标数据中

五、目标数据库进行RMAN还原

六、RMAN恢复总结

七、参考文件


一、环境部署

VMware中部署两台数据库应用

我这里分别是192.168.188.141(源数据库),192.168.188.152(目标数据库)

两个数据库版本是Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production(实验前,我将源数据库克隆到152的数据库后,在用impdp数据导入,将数据量增大。)

二、源数据库数据体量的检查

检查源数据库的DBID,控制文件路径

查找数据文件路径

查找字符集和数据总量

查找日志文件的路径

这里有个坑。(使用RMAN操作,数据库必须开启归档模式,不然热备份不了相关的配置文件)

图一是我没有开启归档模式,使用rman脚本进行备份文件,死活备份不了,图二我开启自动归档模式以后,rman脚本就成功了)

三、源数据库使用RMAN脚本进行数据备份

RMAN的脚本(注意bakdir和autobak的路径,写在home用户下面的路劲)

#************************************************************************ 
#*** rman_bak_L0.sh *** 
#************************************************************************ 
#!/bin/bash
source /home/oracle/.bash_profile
rq=`date +%Y%m%d`
bakdir=/home/oracle/topsoft/rmanbak/${rq}
autobak=/home/oracle/topsoft/rmanbak/autobackup/
if [ ! -d ${bakdir} ];
then mkdir -p ${bakdir}
fi
if [ ! -d ${autobak} ];
then mkdir -p ${autobak}
fi
cd $ORACLE_HOME/bin 
./rman target / log=$bakdir/rmanfull_${rq}.log   <<EOF
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${autobak}/%F';
run { 
allocate channel c1 type disk; 
allocate channel c2 type disk;
allocate channel c3 type disk; 
allocate channel c4 type disk;
allocate channel c5 type disk; 
allocate channel c6 type disk;
sql 'alter system archive log current';
backup as compressed backupset incremental level 0 database tag 'dbfull' format '${autobak}/backlv0_%d_%T_%t_%s_%p.bak';
sql 'alter system archive log current';
backup as compressed backupset archivelog all tag 'arch' format '${autobak}/arch_%d_%T_%t_%s_%p.bak';
backup current controlfile format '${autobak}/ctl_%d_%T_%t_%s_%p.bak';
release channel c1; 
release channel c2;
release channel c3; 
release channel c4;
release channel c5; 
release channel c6;
} 
report obsolete; 
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete;
delete noprompt expired backup;
list backup summary; 
exit; 
EOF
echo "备份数据完成."

参数说明:

sysdate-1/12   :2小时之前的归档。

%U_%d_%T_%s
%U:默认是%u_%p_%c的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一个唯一名称,这是最常用的命名方式,执行不同备份操作时,生成的规则也不同,如下所示:
 生成备份片段时,%U=%u_%p_%c;
%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集生成一个唯一的名称。
%p:备份集中备份片段的编号,从1开始。
%c:备份片段的复制数(从1开始编号,最大不超过256)。
%d:Oracle数据库名称。
%T:当前时间的年月日格式(YYYYMMDD)。
%s:备份集号。 

先将数据库关闭,然后将数据库启动mount模式,开启归档记录,然后开启数据库实例再用RMAN进行备份(RMAN的备份机制,有时间可以了解一下。这里我挖坑一个早上

将脚本放进去服务器内,加上chmod +x 执行脚本(这里我又重新备份一次作为展示,备份时间是4月12号

检查一下RMAN备份完成下来的备份文件,发现日志文件、数据文件、控制文件、归档文件都被RMAN脚本执行备份下来了。

还需要准备源数据库的参数文件,在SQL中执行脚本将参数文件备份出来,

 将源数据库的数据库的密码文件orapwfzdb,备份到RMAN的文件夹中

四、将源数据库中的配置文件,传送到目标数据中

        传送到目标数据库中,目标数据库创建对面的文件路径存放文件(记得目标数据库关闭防火墙,还需要有对接用户的账号密码)

传送过去目标数据库有6个文件:日志文件,ARCH格式归档文件,C-9开头控制文件,initfz开头数据库参数文件,还有backlv的数据文件,还有源数据库中密码文件orapwfzdb文件

这里我挖了一个坑,没有传送过去日志文件,导致我后面的recover database;还原归档日志时候报错,缺少日志文件,还原归档时间是根据你传送过去的日志文件序列号时间进行还原

检查一下目的数据库的文件已经保存源数据库的文件。

因为我是虚拟机克隆源数据库到目标数据库,数据库的配置文件路径和数据库的名字和ID都是一致的了,如果不是安装路径和配置文件参数一致的源数据库和目标库,一定要修改initfzdb20240425.ora中的配置参数。具体方法,改期研讨

五、目标数据库进行RMAN还原

进入目标数据库先关闭数据实例,用非挂在模式用源数据库数据库中参数文件启动数据库(因为我两个库都是一样信息,配置文件一样直接启动)

如果数据库的SID不是一样,要设置成源数据库一致的SID。(我是克隆过来数据库,SID完全一直)

[oracle@localhost ~]$ export ORACLE_SID=fzdb

使用源数据库文件生成参数文件。

生成参数完毕后,关闭数据库实例,在启动非挂载模式,进行控制文件的还原

使用rman target /进行控制文件还原(注意:控制文件还原,需要将数据库启动到非归档模式
这里set DBID和控制文件中的参数29**是一致的了,

数据库中启动归档模式,在进行归档模式下面进行归档文件和数据文件的还原。

在RMAN中使用alter指令切换数据库进入归档模式,在用catalog 指令读取目标库路径中的存在备份文件地方。

这里会显示日志文件已经损坏,不需要担心。

RMAN> restore database;   --还原数据文件(因为我的数据文件很大,我就截图前后)

RMAN> recover database;  --还原归档日志  

提示如下报错:

大概意思:媒体恢复请求未知的归档日志,用于恢复线程1的序列号为101的日志,起始SCN为2605247。(因为数据库的归档日志是有记录每次归档序列号,如果想用RMAN恢复时候是要选择恢复到归档日志的多少序列号)

 直接用recover恢复到序列号101的归档日志的数据库(这里叫不完全恢复)

恢复数据文件和归档文件,--恢复完成后,将库启动到read only模式,查询一下数据是否正常

目标数据库的数据库容量

源数据库的数据体量和目标库的体量相同。(按道理来说要检查数据库的数数据文件存放位置、查看临时文件位置、查看日志文件位置等等,我这里图方便,因为虚拟机克隆1:1源数据库就不查这些参数了。)

确定数据总量相同后,将数据库关闭,把源数据库的密码文件放到目标数据库的配置文件下面。

在正常启动数据库,发现目标库的开启日志记录功能。使用alter语句正常开启重置日志记录功能即可(RESETLOGSoption :清除所有在线重做日志并修改所有在线数据文件以表明不需要恢复。重置重做日志后,现有的日志文件或数据文件备份都不能使用。)

数据库正常启动,源数据库的数据

六、RMAN恢复总结

        首先源数据库需要开启归档模式进行RMAN的数据备份,记录好备份的配置文件,传送到目标库中,第二,目标库中的数据库的配置文件是否和源数据库中的配置文件一致,像我实验中都是1:1还原,很多步骤可以省略,如果不是1:1的话,需要将目标库中数据文件、控制文件、参数文件等改成和源数据库的路径一致,说白了,还原就是房子的家具怎么摆,到新的房子家具也怎么摆。床的位置、沙发的位置都要重新划分。第三就是恢复控制文件时候使用非归档模式和恢复数据文件、归档文件时候,数据库开启归档模式,一定要区分开。最后确定数据恢复没问题后,还要把数据库的密码文件放回到目标库的配置文件中。

还要感谢福娃老师提供RMAN的笔记。下次研究一下如何在不同数据库配置环境下实现RMAN还原

最后感谢

福娃筱欢-CSDN博客老师。

七、参考文件

《Oracle系列》Oracle归档日志管理(开启归档日志、删除归档日志)_oracle删除归档日志-CSDN博客

Oracle RESETLOGS 和 NORESETLOGS 区别说明-CSDN博客

ORACLE开启归档日志_oracle归档日志-CSDN博客

RMAN异机恢复数据库详解-CSDN博客

oracle rman备份 归档模式,将Oracle数据库改为归档模式并启用RMAN备份-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值