在一台恢复测试机器上验证oracle备份有效性

news2024/10/5 21:19:47

一 目的

定期将生产环境oracle数据库恢复到一台测试环境数据库服务器上,以验证备份是否有效,是否能正常恢复。

二 环境

这里以恢复orcl1库为例,计划在orcl这个实例上进行恢复测试。

三 实验步骤

3.1 在目标端创建和源端一样的备份目录

① 查看下源端备份脚本,确定备份目录。

这里是/backup/日期

示例:

202404080100

② 在目标端创建全备目录

su - oracle

mkdir -p /backup/202404080100

3.2 获取源端备份文件

如果备份文件上传到了ftp服务器上的话,则这样获取:

cd /backup/

vi downloadbak.sh

添加如下内容:

cd /backup/202404080100

ftp -ivn <<!

open ftp服务器ip

user 账号/密码

bin

cd  备份路径

mget *

bye

!

#开始下载备份

nohup sh downloadbak.sh > downloadbak.log 2>&1 &

tail -f downloadbak.log

检查日志和备份文件数量,大小,确保都下载成功了。

下载完毕后,最后一行会输出如下:

221 Goodbye. You uploaded 0 bytes and downloaded 20345794.00 KB.

3.3 确保目标端db_name和源端保持一致

如果不一致,后面恢复完控制文件,将数据库启动到mount状态时会报错:

ORA-01103: 控制文件中的数据库名 ''ORCL1'' 不是 ''ORCL''。

修改示例:

示例:

create pfile='/home/oracle/temp.ora' from spfile;

vi /home/oracle/temp.ora

将*.db_name='orcl'改为*.db_name='orcl1'

shutdown immediate;

startup nomount pfile='/home/oracle/temp.ora';

create spfile from pfile='/home/oracle/temp.ora';

show parameter db_name; #检查确认

3.4 在目标端恢复数据

3.4.1 恢复控制文件

3.4.1.1 将目标端数据库启动至nomount状态

SQL> shutdown immediate;

SQL> startup nomount;

3.4.1.2 查询源端dbid

SQL> select dbid from v$database;

      DBID

----------

1368003574

3.4.1.3 在目标端恢复控制文件

#指定dbid为3.4.2查询到的源端dbid

RMAN> set dbid 1368003574;     

executing command: SET DBID

#恢复控制文件

RMAN>restore controlfile from '/backup/202404080100/orcl_ctl0_20240408_ORCL1_5756_1';

/*

从哪个备份文件恢复控制文件,这个值需要先从主库进行查询下,每次值都不一样的:

list backup of controlfile;

*/

3.4.2将数据库启动到mount状态

RMAN> alter database mount;

3.4.3 恢复数据库

--在恢复前,先删除下测试环境恢复库的数据文件和redo log文件。

删除数据文件一是为了释放空间,二是不删除的话,到时恢复完后分不清是以前的数据文件,还是新的数据文件。

删除redo log文件是为了避免后面恢复完后,启动数据库报错。

#删数据文件

cd /data/app/oracle/oradata/orcl

rm -rf data_D-*

#删redo

rm -rf redo*.log

#加载备份目录,删除过期备份。

catalog start with '/backup/202404080100';

report schema;

crosscheck backup;

delete expired backup;

#将输出放日志里,方便看错误,也方便看restore用了多长时间。

cd ~/baidd/

rman target / log restore.log append

run {

allocate channel t1 type disk;
allocate channel t2 type disk;
allocate channel t3 type disk;
allocate channel t4 type disk;
allocate channel t5 type disk;
allocate channel t6 type disk;
allocate channel t7 type disk;
allocate channel t8 type disk;

allocate channel t9 type disk;
allocate channel t10 type disk;

set newname for database to '/data/app/oracle/oradata/orcl/%U';

restore database;

switch datafile all;

switch tempfile all;

}

restore用时较长,等restore成功后,再recover。

#可以这样查看restore进度:

tail -f restore.log

执行sql查看进度

select sid,

serial#,

context,

sofar,

totalwork,

round(sofar / totalwork * 100, 2) "%_complete"

from v$session_longops

where opname like 'RMAN%'

and opname not like '%aggregate%'

and totalwork != 0

and sofar<>totalwork;

示例:

rman restore完毕后,就查看不到输出结果了。

#检查restore.log是否有报错:

less restore.log

exit

rman target /

recover database;

假如恢复库的时候报类似这样的错:

则在目标端查看下归档日志备份,找到最新的一个归档日志的next_scn:

list backup of archivelog all;

recover database until scn=找到的SCN值

如果是RAC,需要指定thread的话,可以这样:

recover database until sequence 197315 thread 2;

3.4.4 启动数据库

3.4.4.1 检查源端redo log所在路径在目标环境是否存在

存在的话,可跳过这一步,执行‘3.4.4.2 启动数据库’。

不存在的话,将redo log指定到一个已存在(有该目录)的路径下,再启动数据库,否则启动数据库会报错:

ORA-00349: 无法获得 '/oracle/app/oracle/oradata/orcl/redo01.log' 的块大小

ORA-27041: 无法打开文件

Linux-x86_64 Error: 2: No such file or directory

Additional information: 9

假如启动库报了上面这个错,然后指定redo log到新位置了,再启动库,还会报这个错:

RMAN> alter database open resetlogs;

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: 位于 04/05/2024 10:58:27 的 sql statement 命令失败

ORA-00392: 日志 1 (用于线程 1) 正被清除, 不允许操作

ORA-00312: 联机日志 1 线程 1: '/data/app/oracle/oradata/orcl/redo01.log'

这就需要重新恢复了,需要确保在启动数据库之前,就rename redo log到一个存在目录的路径。

具体操作示例:

select member from v$logfile;

目标端没有这个目录:

/oracle/app/oradata/ztefssc

select 'alter database rename file '||''''||member||''''||' to '||chr(39)||replace(member,'旧路径','新路径')||''';'   

from v$logfile;

示例:

select 'alter database rename file '||''''||member||''''||' to '||chr(39)||replace(member,'/oracle/app/oradata/ztefssc','/data/app/oracle/oradata/orcl')||''';'   from v$logfile;

执行输出来的sql,重命名下redo log。

……

                                     

#检查确认                                    

select member from v$logfile;

3.4.4.2 启动数据库

alter database open resetlogs;

启动完数据库后,会自动生成redo log。

#检查redo log是否生成。

cd /data/app/oracle/oradata/orcl

ls -l | grep redo

3.4.5 升级和更新数据字典

假如是从11g往12c恢复或者oracle小版本往大版本恢复,则需要升级和更新一下数据字典:

$ORACLE_HOME/bin/dbupgrade

如果是同版本实例,则不用做这一步。

#启动下目标端数据库

执行完$ORACLE_HOME/bin/dbupgrade后,发现数据库自动关闭了,将其起来:

startup;

3.5 验证

select username from dba_users;

查看下新用户有没有恢复过来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1579614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始写 Docker(十)---实现 mydocker logs 查看容器日志

本文为从零开始写 Docker 系列第十篇&#xff0c;实现类似 docker logs 的功能&#xff0c;使得我们能够查查看容器日志。 完整代码见&#xff1a;https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识&#xff1a; 核心原理&#x…

51单片机之自己配串口寄存器实现波特率9600

本配置是根据手册进行开发配置的 1、首先配置SCON 所以综上所诉 SCON 0x40 &#xff08;0100 0000&#xff09; 2、PCON不用配置 3、配置定时器1 4、波特率的计算 5、配置AUXR 6、对比 7、实现 8、优化&#xff08;实现字符串&#xff09; 引入TI &#xff08;智能延时&…

加州大学欧文分校英语基础语法专项课程03:Simple Past Tense 学习笔记(完结)

Learn English: Beginning Grammar Specialization Specialization Certificate course 3&#xff1a; Simple Past Tense Course Certificate 本文是学习 https://www.coursera.org/learn/simple-past-tense 这门课的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。…

Java基础笔记(一)

一、面向对象高级基础 1.Java的动态绑定机制 public class DynamicBinding {public static void main(String[] args) {//a 的编译类型 A, 运行类型 BA a new B();//向上转型System.out.println(a.sum());//40 子类sum()注释后-> 30System.out.println(a.sum1());//30 子类…

STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档)

目录 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 2.2 设计电路规范 3、代码 4、资料清单 资料下载地址&#xff1a;STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档) 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 经过一个星期的画PCB&#xff0c;今…

上传应用程序到苹果应用商店的工具和要点

引言 在今天的移动应用市场中&#xff0c;将应用程序上传到苹果应用商店&#xff08;App Store&#xff09;是许多开发者的首要任务之一。然而&#xff0c;不同操作系统下的开发者可能需要使用不同的工具和遵循不同的要求来完成这一任务。本文将介绍在 macOS、Windows 和 Linu…

day75 js 正则表达式 window对象轮播图片调用定时器

一 正则表达式: RegExp 对象: 对字符串执行模式匹配的强大工具。 1 创建正则表达式对象 let reg /模式/修饰符 修饰符 attributes 是一个可选的字符串&#xff0c;包含属性 "g"、"i" 和 "m"&#xff0c; …

kmeans聚类sklearn实现(Python实验)

Kmeans毫无疑问&#xff0c;好用又“便宜”的算法&#xff0c;经常在很多轻量化场景中实现。所谓的“聚类”&#xff08;Clustering&#xff09;&#xff0c;就是通过欧氏距离找哪些点构成一个簇。假设我们空间中有一堆点&#xff0c;通过肉眼大概可以看出有两簇&#xff0c;思…

rman 物理误删除的整库恢复

故障模拟: 有备份情况下,物理删除了 rm -rf /oraback/* 下的所有文件1 环境准备 备份 rman target / log/oraback/rmanbak/0_rmanbak.log <<EOF run{ delete noprompt backup; allocate channel c1 type disk maxpiecesize 1000M; allocate channel c2 type disk max…

java实战基础------一文搞定maven

&#x1f388;个人主页&#xff1a;靓仔很忙i &#x1f4bb;B 站主页&#xff1a;&#x1f449;B站&#x1f448; &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;JAVA实战基础 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处…

什么是SD NAND?

文章目录 前言一、SD NAND 简介二、CS创世 SD NAND 的六点优势三、CS创世 SD NAND 相较于其它存储产品的优缺点四、结语 前言 本文转自 雷龙官网 一、SD NAND 简介 什么是CS创世 SD NAND呢&#xff1f;很多的朋友一直想知道这个问题。今天我们雷龙也精心准备了SD NAND 的一个介…

程序员搞副业对自身有提升吗?

一、程序员如何搞副业 程序员利用自身技能开展副业的方式有很多&#xff0c;以下是一些常见的选择&#xff1a; 1. 开发独立软件或APP&#xff1a;如果你有独特的创意或者发现市场上存在某种需求&#xff0c;可以开发独立的软件或手机应用&#xff0c;并通过广告、付费下载或内…

云测了解记录

1.app、web、接口&#xff0c;一般通过特定的录制工具&#xff0c;录制后可在云测平台执行。平台可查看自动执行的过程&#xff0c;生成测试报告等 2.app真机实测 选择机型&#xff0c;类似手机模拟器&#xff0c;可安装app&#xff0c;以及模拟各种操作。实现特定机型bug复现…

HCIP-Datacom(H12-821)题库补充(4月9日)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整题库请扫描上方二维码访问&#xff0c;持续更新中。 IS—IS过载标志位是指LSP报文中的OL字段。对设备设置过载标志位后&#xff0c;其它设备在进行SPF计算时不会使用这台设备做转发&#xff0c;只计算该设备的直连路由。 …

计算机服务器中了rmallox勒索病毒怎么办?Rmallox勒索病毒解密流程步骤

网络为企业的生产运营提供便利的同时&#xff0c;也为企业的数据安全带来严重威胁。随着互联网技术的不断应用与发展&#xff0c;企业的生产运营离不开网络&#xff0c;利用网络可以开展各项工作业务&#xff0c;极大地方便了企业生产运营&#xff0c;大大提升了企业生产效率&a…

item_search_shop获得店铺的所有商品API接口显示指定商铺下所有商品列表数据

要获取店铺的所有商品API接口显示指定商铺下所有商品列表数据&#xff0c;首先需要了解API的具体请求方式、参数以及返回数据格式。以下是一个示例&#xff1a; 公共参数 API请求地址: API接口调用key、secret 名称类型必须描述keyString是调用key&#xff08;必须以GET方式…

Leetcode C语言习题

Leetcode习题27&#xff1a;移除元素 题目&#xff1a; 说明&#xff1a; 示例&#xff1a; 题解&#xff1a; 方法一&#xff1a;&#xff08;开辟额外的数组空间&#xff09; 我们可以创建一个新的数组&#xff0c;然后用循环来遍历原数组&#xff0c;将原数组中不为 val…

淘宝/1688开放API数据采集接口:包含商品详情描述及主图,订单列表,订单详情及相关应用

电商网站的数据包含了丰富的市场和用户信息&#xff0c;对于商业决策和竞争分析至关重要。数据采集是获取这些有价值信息的关键步骤。下面将详细介绍如何采集电商网站数据&#xff0c;帮助你掌握这一重要技能。 淘宝/天猫获取购买到的商品订单详情 API 返回值说明 buyer_order…

C语言程序的编译与链接

目录 1.翻译环境和运行环境2.翻译环境2.1 预处理&#xff08;预编译&#xff09;2.2 编译2.3 汇编2.4 链接 3.运行环境 1.翻译环境和运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 翻译环境&#xff1a;在这个环境中源代码被转换为可执⾏的机器指令&am…

maven { url ‘https://www.jitpack.io‘ }在新版Android Studio中的位置

Android Studio升级到Arctic Fox后&#xff0c;一些配置项的位置都做了改变。 github上的很多库通过JitPack.io发布的&#xff0c;引用这些库时&#xff0c;除了在模块的build.gradle文件中加入依赖&#xff0c;还要在项目的build.gradle文件中加入maven { url ‘https://www.j…