oracle scn 恢复数据,【oracle】摸拟故障 - 数据文件丢失恢复,SCN的作用。

2023-12-22 07:20

本文主要是介绍oracle scn 恢复数据,【oracle】摸拟故障 - 数据文件丢失恢复,SCN的作用。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

模拟数据文件丢失恢复,redolog、archivelog、controlfile文件未丢失的情况恢复。

1、创建一个表空间、用户、分配权限、建表。

a)createtablespaceHXW_WEN

datafile'D:\ORACLE\ORADATA\HXW168\HXW_WEN_D01.DBF'

size5Mautoextendonnext1Mmaxsize20M;

b)createuserwenidentifiedbyzerostudydefaulttablespacehxw_wen;

c)grantdbatowen;

d)grantexecuteondbms_flashbacktowen; --dba不用

e)createtablet1(idnumber,scnnumber,insertdatedate);

f)createsequenceseq_wen_autoidincrementby1startwith1maxvalue99999999cyclenocache;--序列

g)insertintot1

values(seq_wen_autoid.nextval,dbms_flashback.get_system_change_number,sysdate);--先不插入数据

2、scn与归档日志关系

事务对应的scn如果落在了哪个archivelog里,那么这个archivelog在恢复时就被用到。

使用下面语句插入数据:

insertintot1

values(seq_wen_autoid.nextval,dbms_flashback.get_system_change_number,sysdate);

查看日志信息:

selecta.GROUP#,a.SEQUENCE#,a.STATUS,a.FIRST_CHANGE#,a.NEXT_CHANGE#,b.MEMBERfromv$log a,v$logfile bwherea.GROUP#=b.GROUP#;

7a73a11d368589bba9625d0e10234c95.png

0e0a44d55cc2f944238cd63e849e8c5b.png

重复插入并switch logfile:

selectSEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE#,NAMEfromv$archived_log

8eeb3c8b3b106d13a9954cda36e77b52.png

若是要恢复ID为6的数据,那么需要75号归档日志文件。

Oracle通过scn把多个归档日志文件组成一个大的逻辑文件,所有连续的归档日志可以看作是某段时间对oracle数据库操作的日志信息的一个独立大文件。即物理上独立,逻辑上统一。

3、模拟数据库在有数据的情况下丢失数据文件

a)关闭数据,复制一份hxw_wen_d01.dbf文件(丢失多个数据文件一个数据文件恢复步骤一样)。

脱机备份,需要备份:

控制文件(重要)、数据文件(临时文件不用备份)、redolog文件(重要)、归档日志文件(重要)、参数文件、口令文件。

select*fromv$parameterwherenamelike'%control_files%'

select*fromdba_data_files

select*fromv$logfile

show parameter log_archive_dest

b)启动数据库,进行增删改操作:

当前数据:

739ca07327f3d540ff37c169a2a6b95a.png

添加数据:重复下面的动作。

SQL> insert into t1values(seq_wen_autoid.nextval,dbms_flashback.get_system_chan

ge_number,sysdate);

SQL> commit;

SQL> alter system switch logfile;

9bd89f7418f4fd80be0624546745d8b2.png

再添加二条数据,但不提交事务。

20     970159 2014/10/01 12:03:47

21     970160 2014/10/01 12:03:48

摸拟数据库异常,并且导致hxw_wen_d01.dbf文件丢失。要求恢复的记录有id19的数据。

注:未提交的事务,oracle会自动rollback。

Shutting down instance (abort)

License high water mark = 8

USER (ospid: 4232): terminating theinstance

Instance terminated by USER, pid = 4232

Wed Oct 01 12:05:09 2014

Instance shutdown complete

关闭数据库,然后把hxw_wen_d01.dbf文件改名,启动数据库报错提示如下:

3ab0ec878b18479b87da4d515541ee8f.png

95646fda78ebb9f31912b99919e913d8.png

现在启动到mount状态:

9a98b676145c7ab874c3a7316a3bc23d.png

查看scn值:

1198c3842bf19b5617b27cb64350e5b8.png

由于6号文件丢失,所以v$datafile_header查的scn值为0。

050bc525bd1663df2d0cc5d1b3316521.png

把备份的(旧的)dbf文件复制回来。

8d4424af2d8db3636d6728e80ec54a3b.png

4、数据文件恢复

旧的备份文件已复制回来,此时Alter database open;提示需要介质恢复。

3133016956378db761c7cbafe267f0dd.png

恢复数据文件6号或者恢复数据库都可以,命令如下:

Recover datafile 6;

Recover database; --多个数据文件丢失时可以直接用这个。

恢复过程如下:

eb470413d0c64149823bbf394a2551d3.png

由于归档日志都在原位置,所以不用指定文件,可以直接输入auto也可以直接回车。

恢复时只用到归档日志80号,81、82没有用到。

8d8f087be4ddad23398814315be3676d.png

33154c47471e2d8109869fcd927065de.png

4b260122dd96d85212fe6f3fb8d5bc50.png

0fb54b847095983f27be8549171dc208.png

上面操作小总结:恢复数据文件,就是通过归档日志来提升旧数据文件的scn 号,提升过程中,需要从归档日志或者redolog中找到对数据库的操作记录,重新在数据文件、buffer操作一次。达到恢复到所需要的时间点的数据。

参考:

这篇关于oracle scn 恢复数据,【oracle】摸拟故障 - 数据文件丢失恢复,SCN的作用。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/523062

相关文章

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

C++中detach的作用、使用场景及注意事项

《C++中detach的作用、使用场景及注意事项》关于C++中的detach,它主要涉及多线程编程中的线程管理,理解detach的作用、使用场景以及注意事项,对于写出高效、安全的多线程程序至关重要,下... 目录一、什么是join()?它的作用是什么?类比一下:二、join()的作用总结三、join()怎么

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I