闪回应用及实践

针对主机故障、网络故障、系统软件故障、存储介质故障、人为操作失误等各类故障,可以通过RAC、RMAN、Data Guard等成熟的解决方案来处理,不过对于人为操作失误防范的首推技术还是使用闪回。

闪回大体有一下内容:闪回查询(Flashback Query)、闪回版本查询(Flashback Version Query)、闪回事务查询(Flashback Transcation Query)、闪回表(Flashback Table)都基于UNDO的保留信息;闪回删除(Flashback Drop)基于RECYCLE回收站机制;闪回数据库(Flashback Database)基于闪回日志;

11g的版本还多了闪回数据归档的功能,后台进程FBDA可将UNDO的信息归档,对特定表开启,起到长期历史数据追溯的作用。还支持在主库open状态下开启/关闭闪回数据库的功能,无需重启mount
第一天:
以时间戳方式恢复被勿删更新数据:
1.查看UNDO的空间是否充足

SELECT SUM(bytes / 1024 / 1024/1024) "undo sizeG"
FROM dba_data_files WHERE tablespace_name = 'UNDOTBS1';

Undo空间是Oracle数据库中用于管理事务回滚和恢复的一种机制。当事务对数据库中的数据进行修改时,Oracle会在Undo空间中为该事务分配一个Undo段,这个Undo段用于存储事务中的DML语句的Undo信息,也就是数据在被修改之前的值。

在Rollback或实例恢复(前滚)过程中,Oracle会使用Undo信息来撤销或重做事务中的操作。另外,在一致性读CR块的构造过程中,Undo信息也会被使用。由于Undo的引入,Oracle的Select语句在实现一致性读时,不需要任何锁。

需要注意的是,如果使用自动管理模式,Oracle会使用Undo表空间来管理Undo数据。如果使用手动管理模式,Oracle则会使用回滚段来管理Undo数据。在自动管理模式下,如果没有配置初始化参数UNDO_TABLESPACE,Oracle会自动选择第一个可用的Undo表空间存放Undo数据。如果没有可用的Undo表空间,Oracle会使用SYSTEM回滚段存放Undo记录,并在ALTER文件中记载警告。

2.询问操作发生时间,比如是23:48:48,经确认这个表中数据变化很小。如果能把这个时间点前的表中数据恢复出来,就能把问题的影响降到最低。
先尝试使用闪回查询来做,依赖一些缓存空间和系统的负载,在反复确认时间后,写了如下的语句:
create table tmp_xxxxx as select * from owner_account.xxxxx as of timestamp to_timestamp('20140723234845','yyyymmddHH24misss');
总结:1.在脚本提交之前,如果是DML语句,最好能够评估修改的影响范围。
2.如果脚本比较大,有性能方面的潜在因素,尽量让DBA来把关。
3.充分的测试也很重要,保证数据的安全和高可用性是很有必要的。

第二天:
使用FlashbackQuery巧妙抽取指定数据
定义:FlashbackQuery是ORACLE数据库的一项特性,它允许从回滚段中读取表在一定时间内操作过的数据,实现数据比对或者修正由于意外提交造成的错误数据。(简单的说是以时间戳的方式从指定表内抽取,若存在多个表的映射依赖关系,以映射id等条件抽取)
比如有customer和subscriber两张表的映射id是customer_id分别抽取语句如下:
select * from customer as of timestamp xxxxx where customer_id=100;
select * from subscriber as of timestamp xxxxx where customer_id=100;
xxxxx代表抽取的时间戳。
将抽取的数据保存,生成dump文件,使用exp/expdp导出dump。
create table customer nologging as select * from customer as of timestamp xxxxx where customer_id=100;
create table subscriber nologging as select * from subscriber as of timestamp xxxxx where customer_id=100;

使用exp导出dump文件:
exp username/password@service_name file=dump_file.dmp log=dump_log.log feedback=10000 buffer=104857600 statistics=none owner=schema_name
其中,username和password是连接到数据库的用户名和密码;service_name是数据库服务名称;dump_file.dmp是要生成的dump文件名;dump_log.log是日志文件名;feedback指定每处理多少行给出一次反馈;buffer指定缓冲区大小;statistics指定是否收集统计信息;owner指定要导出的模式名称。

使用expdp导出dump文件:expdp username/password@service_name DIRECTORY=dir_name DUMPFILE=dump_file.dmp LOGFILE=dump_log.log FEEDBACK=10000 BUFFER=104857600 STATISTICS=NONE SCHEMAS=schema_name
其中,username和password是连接到数据库的用户名和密码;service_name是数据库服务名称;dir_name是目录对象名称,用于指定导出文件的存储位置;dump_file.dmp是要生成的dump文件名;dump_log.log是日志文件名;feedback指定每处理多少行给出一次反馈;buffer指定缓冲区大小;statistics指定是否收集统计信息;schemas指定要导出的模式名称。

请注意,上述示例中的参数值需要根据实际情况进行替换,如用户名、密码、服务名称、文件名等。另外,导出dump文件可能需要相应的权限和准备工作,请确保在导出之前进行相应的设置和备份。

第三天:

以下是文心一言AI大模型给出解释:

  1. 闪回查询(Flashback Query): 这是Oracle数据库中的一种查询,允许用户查看表在过去的某个时间点的状态。例如,你可以查询一个表在过去某个时间点的数据,当你希望了解数据在过去的某个时间点的状态时,这个功能非常有用。

    SELECT * FROM table_name AS OF TIMESTAMP TO_TIMESTAMP('2023-07-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
  2. 闪回版本查询(Flashback Version Query): 这种查询允许用户查看一个表在过去某个时间点的特定版本。这对于查看一个表在过去某个时间点的特定更改非常有用。
    SELECT versions_xid, versions_operation, versions_startscn, my_table.*
    FROM my_table
    VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE;
  3. 闪回事务查询(Flashback Transaction Query): 这种查询允许用户查看一个事务在过去某个时间点的状态。这对于理解事务的历史和变化非常有用。 
    SELECT * FROM flashback_transaction_query WHERE xid = '030015002AFD7600E05399020000021E';
  4. 闪回表(Flashback Table): 这是Oracle数据库中的一个功能,允许用户将一个表回滚到过去某个时间点的状态。这对于撤销表的更改或恢复误删除的数据非常有用。
    FLASHBACK TABLE my_table TO TIMESTAMP TO_TIMESTAMP('2023-07-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
  5. 闪回删除(Flashback Drop): 这是Oracle数据库中的一个功能,允许用户恢复被删除的表。这是基于RECYCLE回收站机制的。当一个表被删除时,它实际上被移动到了回收站,可以使用闪回删除来恢复它。  
    FLASHBACK TABLE my_table TO BEFORE DROP;
  6. 闪回数据库(Flashback Database): 这是Oracle数据库中的一个功能,允许用户将一个数据库回滚到过去某个时间点的状态。这是基于闪回日志的,闪回日志记录了数据库的所有更改。这对于在灾难恢复情况下恢复数据库非常有用。  
    STARTUP MOUNT;
    FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2023-07-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
    ALTER DATABASE OPEN RESETLOGS;

摘自:杨建荣《OracleDBA工作笔记:运维、数据迁移与性能调优》及文心一言AI

DBA容灾与备份恢复:闪回应用及实践(一)的更多相关文章

  1. HBase 学习之路(九)——HBase容灾与备份

    一.前言 本文主要介绍Hbase常用的三种简单的容灾备份方案,即CopyTable.Export/Import.Snapshot.分别介绍如下: 二.CopyTable 2.1 简介 CopyTabl ...

  2. HBase 系列(九)——HBase 容灾与备份

    一.前言 本文主要介绍 Hbase 常用的三种简单的容灾备份方案,即CopyTable.Export/Import.Snapshot.分别介绍如下: 二.CopyTable 2.1 简介 CopyTa ...

  3. 入门大数据---Hbase容灾与备份

    一.前言 本文主要介绍 Hbase 常用的三种简单的容灾备份方案,即CopyTable.Export/Import.Snapshot.分别介绍如下: 二.CopyTable 2.1 简介 CopyTa ...

  4. (4.4)mysql备份还原——备份存储容灾基础知识

    存储知识 1.为什么需要存储,存储一般解决哪些问题? 容量.速度.易于管理.安全(容灾与备份).可扩展性 2.存储发展历史 [2.1]大型机 [2.2]c/s结构(客户端->服务器) [2.3] ...

  5. 华为云计算IE面试笔记-请描述华为容灾解决方案全景图,并解释双活数据中心需要从哪些角度着手考虑双活设计

    容灾全景图: 按照距离划分:分为本地容灾 同城容灾 异地容灾  本地容灾包括本地高可用和本地主备.(本数据中心的两机房.机柜) 本地高可用这个方案为了保持业务的连续性,从两个层面来考虑: ①一个是从主 ...

  6. vivo 推送系统的容灾建设与实践

    作者:vivo 互联网服务器团队 - Yu Quan 本文介绍了推送系统容灾建设和关键技术方案,以及实践过程中的思考与挑战. 一.推送系统介绍 vivo推送平台是vivo公司向开发者提供的消息推送服务 ...

  7. 删库到跑路?还得看这篇Redis数据库持久化与企业容灾备份恢复实战指南

    本章目录 0x00 数据持久化 1.RDB 方式 2.AOF 方式 如何抉择 RDB OR AOF? 0x01 备份容灾 一.备份 1.手动备份redis数据库 2.迁移Redis指定db-数据库 3 ...

  8. 容灾恢复 | 记一次K8S集群中etcd数据快照的备份恢复实践

    [点击 关注「 全栈工程师修炼指南」公众号 ] 设为「️ 星标」带你从基础入门 到 全栈实践 再到 放弃学习! 涉及 网络安全运维.应用开发.物联网IOT.学习路径 .个人感悟 等知识分享. 希望各位 ...

  9. mysql容灾备份脚本

    一,环境需求 **安装前准备 操作系统环境:Centos 7.2 [root@localhost soft]# rpm -qa | grep mariadb [root@localhost soft] ...

  10. Redis全方位详解--磁盘持久化和容灾备份

    序言 在上一篇博客中,博客介绍了redis的数据类型使用场景和redis分布式锁的正确姿势.我们知道一旦Redis重启,存在redis里面的数据就会全部丢失.所以这篇博客中向大家介绍Redis的磁盘持 ...

随机推荐

  1. To ChatGPT:让你更加随意地使用所有ChatGPT应用

    现在其实已经有很多在线的llm服务了,当然也存在许多开源部署方案,但是不知道大家有没有发现一个问题,目前基于ChatGPT开发的应用,都是使用的OpenAI的接口.换句话说,如果没有OpenAI账号, ...

  2. Python与TensorFlow:如何高效地构建和训练机器学习模型

    目录 标题:<Python 与 TensorFlow:如何高效地构建和训练机器学习模型> 一.引言 随着人工智能的快速发展,机器学习作为其中的一个重要分支,受到了越来越多的关注和应用.而P ...

  3. SpringBoot 如何优雅的进行全局异常处理?

    在SpringBoot的开发中,为了提高程序运行的鲁棒性,我们经常需要对各种程序异常进行处理,但是如果在每个出异常的地方进行单独处理的话,这会引入大量业务不相关的异常处理代码,增加了程序的耦合,同时未 ...

  4. 完全兼容DynamoDB协议!GaussDB(for Cassandra)为NoSQL注入新活力

    摘要:DynamoDB是一款托管式的NoSQL数据库服务,支持多种数据模型,广泛应用于电商.社交媒体.游戏.IoT等场景. 本文分享自华为云社区<完全兼容DynamoDB协议!GaussDB(f ...

  5. 西门子S7系列PLC以太网通讯处理器编程调试方法

    捷米特(北京)科技有限公司研发的捷米特以太网通讯模块,转以太网通讯模块型号有ETH-S7200-JM01和ETH-S7300-JM01,适用于西门子S7-200/S7-300/S7-400.SMART ...

  6. Docker、CICD持续集成部署、Gitlab使用、Jenkins介绍

    目录 1.Docker的基本操作 1.1镜像拉取 1.2镜像的操作 1.3容器的操作 运行容器 查看正在运行的容器 查看容器运行日志 进入到容器内部 停止容器运行 删除容器 启动容器 2.Docker ...

  7. HTB靶场之Sandworm

    准备: 攻击机:虚拟机kali. 靶机:Sandworm,htb网站:https://www.hackthebox.com/,靶机地址:https://app.hackthebox.com/machi ...

  8. Vue: 在vscode中添加vue的代码片段

    创建vue文件模板 打开vscode,文件–>首选项->用户代码片段,在弹出的搜索框中输入vue,回车 删除原内容,将如下内容粘贴 { "Print to console&quo ...

  9. 【技术积累】Linux中的命令行【理论篇】【二】

    ag命令 命令介绍 ag命令是一个用于在Linux系统中进行文本搜索的工具.它是基于Silver Searcher的改进版本,具有更快的搜索速度和更强大的功能. ag命令的基本用法是在指定的目录中搜索 ...

  10. 数据分析师如何用SQL解决业务问题?

    本文来自问答. 提问:数据分析人员需要掌握sql到什么程度? 请问做一名数据分析人员,在sql方面需要掌握到什么程度呢?会增删改查就可以了吗?还是说关于开发的内容也要会?不同阶段会有不同的要求吗? 正 ...