30-Oracle 23ai-回顾从前的Flashback设置

配置和测试了Oracle 23 ai的Flashback Log Placement后,

刚好身边11g,19c的环境都在,还是把从前的flashback整理下,温故知新,循序渐进。

 一、闪回技术

Flashback Database 允许将整个数据库回退到过去的某个时间点/SCN,基于以下核心机制: 

闪回日志 (Flashback Logs)​​ 

  • 专用后台进程 ​RVWR​ 记录数据块在修改前的完整镜像。
  • 存储位置:闪回恢复区(DB_RECOVERY_FILE_DEST)。
  • 不同于重做日志:重做日志记录变化量,闪回日志记录完整块
  • 循环覆盖写入,空间不足时自动删除旧日志。如果空间不足,即使设置保留时间也会被删除。

闪回恢复区 (Flash Recovery Area)​​  

  • 集中管理闪回日志、归档日志、RMAN 备份。
  • 需配置路径 (DB_RECOVERY_FILE_DEST) 和大小 (DB_RECOVERY_FILE_DEST_SIZE)。​
  • 由 DB_FLASHBACK_RETENTION_TARGET 控制(单位:分钟),默认 1440 分钟(1天)。

闪回分级:闪回技术用于快速恢复人为误操作等逻辑错误,分为多种级别:

    • 数据库级,慎重-闪回数据库会丢失目标时间点后的所有数据变更
    • 表级别闪回
    • 事务级别闪回
    • 闪回查询(不修改数据)

特性:​

  1. 本质​:将数据库回退到历史时间点,闪回点之后的所有数据变更将丢失。
  2. RESETLOGS:​ 闪回后必须使用 ALTER DATABASE OPEN RESETLOGS;,从此(生成新分身)。
  3. 依赖闪回日志:​核心机制依赖于闪回日志(Flashback Log),依赖闪回日志​(存储数据块完整映像)。
  4. 前提条件:​​ 数据库必须处于归档模式且配置了闪回恢复区。
  5. 快速恢复​:比传统时间点恢复更快(直接应用闪回日志)。

四、开启Flashback​

​​开启归档模式​:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;-- 1. 设置闪回恢复区
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/u01/app/oracle/flash_recovery_area' SCOPE=BOTH;
-- 根据磁盘空间调整
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 50G SCOPE=BOTH;-- 2. 设置闪回保留时间(默认 1440 分钟)
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=1440;-- 3. 启用闪回(MOUNT 状态下执行)
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE FLASHBACK ON;
ALTER DATABASE OPEN;-- 4. 验证状态
SELECT LOG_MODE, FLASHBACK_ON FROM V$DATABASE;
LOG_MODE      FLASHBACK_ON
_____________ _______________
ARCHIVELOG    YES

五、数据库、表、行、事务、闪回的脚本

1)、数据库级闪回 (FLASHBACK DATABASE)​​
​1. 基于时间点闪回
-- 步骤1: 强制日志切换并记录当前时间点
ALTER SYSTEM ARCHIVE LOG CURRENT;
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
SELECT SYSTIMESTAMP AS current_time FROM DUAL; -- 记录此时间-- 步骤2: 关闭并挂载数据库
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;-- 步骤3: 执行闪回 (RMAN环境)
RMAN> RUN {SET UNTIL TIME "TO_DATE('2025-06-13 14:30:00', 'YYYY-MM-DD HH24:MI:SS')";FLASHBACK DATABASE;ALTER DATABASE OPEN RESETLOGS;
}

2. 基于 SCN 闪回​ 

-- 获取当前SCN并记录,示例: 7654321
SELECT CURRENT_SCN FROM V$DATABASE;-- 执行闪回 (SQL*Plus)
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO SCN 7654321;
ALTER DATABASE OPEN RESETLOGS;

3. 基于还原点闪回​ 

-- 创建担保还原点
CREATE RESTORE POINT b_migration GUARANTEE FLASHBACK DATABASE;-- 执行闪回
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO RESTORE POINT b_migration;
ALTER DATABASE OPEN RESETLOGS;
2)、表级闪回 (FLASHBACK TABLE)​​
​1. 恢复误删表​
-- 查看回收站
SELECT object_name, original_name, droptime 
FROM user_recyclebin 
WHERE original_name = 'test_EMP';-- 恢复表到删除前状态
FLASHBACK TABLE test_EMP TO BEFORE DROP;-- 重命名恢复的表
FLASHBACK TABLE "BIN$skjdsf93jksdf$" TO BEFORE DROP RENAME TO test_EMP_recovered;

 2. 回滚表数据到指定时间点​

-- 启用行移动
ALTER TABLE test_ORDERS ENABLE ROW MOVEMENT;-- 闪回到特定时间
FLASHBACK TABLE test_ORDERS TO TIMESTAMP TO_TIMESTAMP('2025-06-13 09:00:00', 'YYYY-MM-DD HH24:MI:SS');-- 验证数据
SELECT COUNT(*) FROM test_ORDERS AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE);

3. 恢复表到指定SCN​ 

-- 获取当前SCN
SELECT CURRENT_SCN FROM V$DATABASE; -- 示例: 2345678-- 执行闪回
FLASHBACK TABLE test_ORDERS TO SCN 2345678;
3)、行级闪回 (FLASHBACK QUERY)​​
​1. 查询历史数据​
-- 查询1小时前的数据
SELECT * FROM test_EMP 
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE)
WHERE department_id = 50;-- 查询特定SCN的数据
SELECT * FROM test_EMP 
AS OF SCN 1234567 
WHERE employee_id = 100;

2. 恢复误删数据 

-- 恢复1小时内删除的数据
INSERT INTO test_EMP
SELECT * FROM test_EMP 
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR)
WHERE employee_id NOT IN (SELECT employee_id FROM test_EMP
);

3. 恢复误更新数据​ 

-- 恢复被误更新的薪资
UPDATE test_EMP e
SET salary = (SELECT salary FROM test_EMP AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '30' MINUTE)WHERE employee_id = e.employee_id
)
WHERE department_id = 60;
4)、事务级闪回 (FLASHBACK TRANSACTION)​​
​1. 查询事务历史​
-- 查找最近2小时的事务
SELECT xid, start_scn, commit_scn, operation, table_name
FROM flashback_transaction_query
WHERE TABLE_NAME = 'test_ORDERS'
AND START_TIMESTAMP > SYSTIMESTAMP - INTERVAL '120' MINUTE
ORDER BY start_scn DESC;

 2. 撤销特定事务​

BEGINDBMS_FLASHBACK.TRANSACTION_BACKOUT(numtxns    => 1,txnnames   => SYS.ANYDATA.MAKEVARCHAR2('08000F00A8030000'), -- 替换为实际XIDoptions    => DBMS_FLASHBACK.CASCADE);
END;
/

 3. 增补SQL​ 

SELECT undo_sql 
FROM flashback_transaction_query 
WHERE xid = HEXTORAW('08000F00A8030000');

六、RMAN 空间竞争与清理脚本

闪回恢复区存储:
  • 闪回日志
  • 归档日志
  • RMAN 备份​空间不足时会导致数据库挂起(ORA-19815 告警)。
空间清理策略
  • 自动清理​Oracle 会在空间不足时按以下顺序删除:
  • 过期的 RMAN 备份
  • 已备份到磁带的归档日志
  • 早于 DB_FLASHBACK_RETENTION_TARGET 的闪回日志。

手动强制清理​ 

#!/bin/bash
export ORACLE_SID=your_sid
export ORACLE_HOME=/u01/app/oracle/product/19.3/dbhome_1# 使用 RMAN 删除过期备份和归档
--可以将命令在sqlplus单独执行
rman target / << EOF
CROSSCHECK BACKUP;          -- 校验备份有效性
DELETE NOPROMPT OBSOLETE;   -- 删除过期的备份
--脚本中的 SYSDATE-7 可根据需求调整归档保留天数。
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
EXIT;
EOF# 释放操作系统空间(清理残留文件)定期执行(如每天)避免空间不足。
find ${ORACLE_BASE}/flash_recovery_area -name "*.bak" -mtime +7 -exec rm {} \;

七、监控与优化建议​

-- 闪回恢复区使用情况
SELECT * FROM V$RECOVERY_FILE_DEST;  -- 空间占用明细(按文件类型)
SELECT FILE_TYPE, PERCENT_SPACE_USED, PERCENT_SPACE_RECLAIMABLE 
FROM V$FLASH_RECOVERY_AREA_USAGE;-- 减少闪回保留时间(按需)调整保留策略
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=720;  -- 12小时-- 停止记录 users 表空间的闪回日志排除非关键表空间
ALTER TABLESPACE users FLASHBACK OFF;-- 扩容至100GB扩展闪回恢复区
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=100G;​

 TIPS:

  • Flashback Database​ 是应对逻辑错误的利器,但依赖闪回恢复区。
  • ​定期清理归档和备份是避免空间竞争的关键(结合 RMAN 和cron脚本)。
  • 经常监控 V$FLASH_RECOVERY_AREA_USAGE,巡检第一位。

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

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

相关文章

Gartner《Reference Architecture for Federated Analytics》学习心得

研究背景 随着分析平台越来越易于被广泛用户使用,以及组织内用例的不断增多和多样化,分析架构的去中心化给专注于架构的分析专家带来了混乱。组织在交付一致、可复用和可信的分析方面面临挑战,分布式分析架构需要在控制和敏捷之间取得平衡,然而许多组织在这方面的控制力不…

Windows下Docker一键部署Dify教程

Windows环境下Docker部署Dify完整指南 &#x1f4cb; 目录 系统要求Docker安装验证Docker安装Dify部署访问Dify常见问题管理命令 &#x1f5a5;️ 系统要求 在开始安装之前&#xff0c;请确保你的Windows系统满足以下要求&#xff1a; 硬件要求 CPU: > 2核心内存: >…

idea maven打包很慢,怎么提速-多线程

作为一个技术运维人员&#xff0c;经常要更新程序然后重新打包发布jar包。由于程序子模块多&#xff0c;需要相互引用每次打包的时候都需要很久&#xff0c;怎么可以让打包快一点呢&#xff1f;可以启动打包的多线程。请参照下图设置&#xff0c;线程数量应该和cpu内核数量要能…

Java/Kotlin selenium 无头浏览器 [Headless Chrome] 实现长截图 三种方式

在自动化测试和网页抓取中&#xff0c;完整捕获整个页面内容是常见需求。传统截图只能捕获当前视窗内容&#xff0c;无法获取超出可视区域的页面部分。长截图技术通过截取整个滚动页面解决了这个问题&#xff0c;特别适用于&#xff1a; 保存完整网页存档生成页面可视化报告验…

【AI大模型】Elasticsearch9 + 通义大模型实现语义检索操作详解

目录 一、前言 二、Elasticsearch9 语义检索介绍 2.1 ES9 语义检索核心特性 2.2 semantic_text 字段类型说明 2.3 ES9 语义检索原理 2.4 ES9 语义检索优势与使用场景 三、 Elasticsearch9 搭建过程 3.1 环境说明 3.2 部署方式一 3.2.1 创建docker网络 3.2.2 获取es9镜…

linux开机原理以及如何开关机-linux023

linux开机原理以及如何开关机 Linux 系统启动过程概述 阶段描述内核引导启动时&#xff0c;BIOS执行自检&#xff0c;启动设备通常是硬盘。操作系统接管硬件后&#xff0c;读取/boot目录下的内核文件。运行 initinit是系统所有进程的起点&#xff0c;负责启动其他进程。它读取…

使用 socat 和 xinetd 将程序绑定到端口运行

在现代网络应用开发和系统管理中&#xff0c;经常需要将某些程序或脚本绑定到特定的网络端口上&#xff0c;以实现远程访问或服务化。例如&#xff0c;一个简单的 Python 脚本可能需要通过 TCP 端口提供服务&#xff0c;或者一个命令行工具需要通过网络接口暴露其功能。为了实现…

电阻篇---上拉电阻

一、上拉电阻的定义与本质 定义&#xff1a;上拉电阻是一端连接到电源&#xff08;VCC&#xff09;&#xff0c;另一端连接到电路节点的电阻元件&#xff0c;其核心作用是将该节点的电平 “拉” 至电源电压&#xff0c;使其在无信号输入时保持稳定的高电平状态。 本质原理&…

前端持续集成和持续部署简介

持续集成&#xff08;CI&#xff09;&#xff1a;代码提交后自动触发构建、静态检查、单元测试&#xff0c;确保代码质量。 持续部署&#xff08;CD&#xff09;&#xff1a;通过流水线将测试通过的代码自动发布到测试/生产环境&#xff0c;减少人工操作失误。 CI/CD 工具链 …

Elasticsearch高效文章搜索实践

功能 创建索引和映射 使用postman添加映射和查询 查询所有的文章信息&#xff0c;批量导入到es索引库中 server:port: 9999 spring:application:name: es-articledatasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/leadnews_article?useU…

React 中除了react-router还有哪些路由方案

在用React开发时&#xff0c;常用的路由是react-router &#xff0c;但除此之外&#xff0c;还有两个路由方案&#xff0c;因为他们具备 react-router 没有的特性。 1. tanstack/router 1.1. 主要特性 100% 推断的 TypeScript 支持 类型安全的导航 嵌套路由和布局路由 内置…

VINS-Fusion 简介、安装、编译、数据集/相机实测

目录 VINS-Fusion 简介 安装 VINS-Fusion 源码安装 运行数据集 双目模式 单目IMU 模式 双目IMU 模式 D455 相机实际运行 双目IMU 模式 VINS-Fusion 简介 VINS-Fusion 是继 VINS-Mono 和 VINS-Mobile&#xff08;单目视觉惯导 SLAM 方案&#xff09;后&#xff0c;香港科 技大学…

SQL Developer 表复制

SQL Developer 表复制 此方法在数据量比较大时&#xff0c;比一条一条的insert要快得多&#xff1b;具体是会覆盖掉原数据&#xff0c;还是增量的处理&#xff0c;请自行创建demo表测试一下。 注意&#xff1a;原库版本要与目标库数据库版本一致&#xff0c;否则可能会报错的。…

影视剧学经典系列-梁祝-《吕氏春秋·应同》

1、背景 07版电视剧《梁山伯与祝英台》中&#xff0c;谢道韫作为先生&#xff0c;给学生讲了其中的句子。 2、名言 君为尊&#xff0c;以白为黑&#xff0c;臣不能从&#xff1b;父虽亲&#xff0c;以黑为白&#xff0c;子不能从”出自《吕氏春秋应同》 其意为&#xff0c;…

异步爬虫---

代码结构分析 这是一个同步新闻爬虫程序&#xff0c;主要包含以下几个部分&#xff1a; 们把爬虫设计为一个类&#xff0c;类在初始化时&#xff0c;连接数据库&#xff0c;初始化logger&#xff0c;创建网址池&#xff0c;加载hubs并设置到网址池。 爬虫开始运行的入口就是r…

微服务架构中的 Kafka:异步通信与服务解耦(二)

三、Kafka 基础入门 3.1 Kafka 是什么 Kafka 最初由 LinkedIn 公司开发&#xff0c;是一个开源的分布式事件流平台&#xff0c;后成为 Apache 基金会的顶级项目 。它不仅仅是一个简单的消息队列&#xff0c;更是一个分布式流处理平台&#xff0c;具备强大的消息队列、存储系统…

Lighthouse与首屏优化

之前提到首屏优化&#xff0c;想到的就是Vue项目首页打开很慢需要优化。一般都是肉眼看看&#xff0c;对当前的加载速度并没有一个准确的衡量标准&#xff0c;也没有很清晰的解决思路。 前两天我想给自己的网站申请谷歌广告&#xff0c;听说审核对网站的性能要求很高。于是网上…

Maven 之 打包项目时没有使用本地仓库依赖问题

背景 pom 中使用了第三方jar包&#xff0c;远程仓库设置的是阿里云&#xff0c;之前运行很好&#xff0c;今天不知道怎么的&#xff0c;打包总是报错&#xff0c;阿里云仓库无法找到依赖包(本来也没有)&#xff0c;按理来说&#xff0c;编译打包时会优先选择本地仓库的包才对&a…

Mysql基础入门\期末速成

DDL 操作数据库语句 创建&删除数据库语句 创建数据库 create database 数据库名称; -- 直接创建 create database if not exists 数据库名称; -- 如果不存在&#xff0c;则创建 create database 数据库名称 default charset utf8mb4; -- 创建编译类型utf8的数据类型 cre…

SCADA|KingSCADA4.0中历史趋势控件与之前版本的差异

哈喽,你好啊,我是雷工! 最近用到KingSCADA4.0信创版本,也算尝鲜使用。 在使用的过程中发现有些功能或多或少存在一些差异, 这里将遇到的一些不同总结一下,便于后期更好的使用。 01 历史趋势控件 在KingSCADA中有一个历史趋势曲线控件KSHTrend。 该控件既可以连接King…