Oracle中rman使用记录

embedded/2024/9/25 7:54:34/

        最近在项目中,遇到使用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博客


http://www.ppmy.cn/embedded/15471.html

相关文章

C++的线程

#include<iostream> #include<thread> #include<unistd.h> using namespace std; void myrun() {while(true){cout<<"I am a thread"<<endl;sleep(1);} } int main() {thread t(myrun);t.join();return 0; } 如果不添加-lpthread就会报…

深入探讨负载均衡的原理及算法

在现代分布式系统中,负载均衡扮演着至关重要的角色。随着用户数量和流量的不断增长,单个服务器已经无法承担巨大的负载。因此,需要将负载分散到多个服务器上,以确保系统的高可用性、可扩展性和响应能力。负载均衡不仅可以提高系统的整体性能,还能够实现故障转移和灾难恢复,从而…

统一建模语言UML图

uml 图定义 Unified Modeling Language&#xff08;统一建模语言&#xff0c;UML&#xff09;是一种用于软件系统设计和建模的标准化语言。它提供了一套图形化的符号和约定&#xff0c;用于描述软件系统的结构、行为和交互&#xff0c;以及系统与外部环境之间的关系。UML通常用…

天人、人间、二神之间的宗教战争

文本&#xff1a;创世记 2-3、马太福音 23-24、启示录 12-13  天人、地球人和两位神之间的宗教战争是什么样的&#xff1f;  属天的&#xff08;天体&#xff09;是神&#xff08;创世记6&#xff09;&#xff0c;属地的&#xff08;地上的人&#xff09;是肉身。有两个主要的…

BERT论文阅读

一.前情提要 1.本文理论为主&#xff0c;并且仅为个人理解&#xff0c;能力一般&#xff0c;不喜勿喷 2.本文理论知识较为成体系 3.如有需要&#xff0c;以下是原文&#xff0c;更为完备 BERT 论文逐段精读【论文精读】_哔哩哔哩_bilibili 二.正文 1.前言&#xff1a; ①…

VSCode配置Springboot开发环境

VSCode配置Springboot开发环境 一、下载和安装JDK一、pandas是什么&#xff1f;二、下载和安装Maven三、VSCode配置3.1 插件管理3.2 VSCode中的Maven配置3.3 创建项目3.4 VSCode中打包springboot项目3.5 springboot项目发布服务后&#xff0c;前端跨域问题&#xff1a; 四、VSC…

C++智能指针

智能指针 1. 异常导致的内存泄露2. 智能指针的使用及原理2.1 RAII 3. 库里面的智能指针3.1 std::auto_ptr3.2 std::unique_ptr3.3 std::shared_ptr3.3.1shared_ptr的缺陷——循环引用3.3.2 weak_ptr 1. 异常导致的内存泄露 在我们异常那块章节中&#xff0c;我们有提到如果异常…

【设计模式】9、facade 外观模式

文章目录 九、外观模式9.1 player9.1.1 player_test.go9.1.2 player.go 9.2 login_register9.2.1 account_test.go9.2.2 account.go 九、外观模式 https://refactoringguru.cn/design-patterns/facade 如果有一个复杂的系统, 内部有很多子系统, 可以用 facade 封装一层, 只暴…