【赵渝强老师】Oracle数据库的闪回表

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS SQL Server,基础系列 2核4GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介: 本文介绍了Oracle数据库中的闪回表(Flashback Table)功能,它能够将表的数据快速恢复到特定时间点或系统改变号(SCN),无需备份。文章通过实战示例详细演示了如何使用闪回表恢复数据,包括授权、创建测试表、记录时间与SCN号、删除数据、启用行移动功能、执行闪回操作以及验证恢复结果等步骤。同时,还展示了如何通过触发器禁止插入操作,并在闪回过程中处理触发器的启用问题。文末附有视频讲解,帮助读者更好地理解闪回表的使用方法。

b235.png

Oracle的闪回表(Flashback Table)实际上是将表中的数据快速回退到过去的一个是时间点或者系统改变号SCN上,从而达到恢复数据的目的。


视频讲解如下:


一、 闪回表简介


闪回表可以将一张或多张表恢复到特定的时间点,并且整个恢复的过程是不需要有备份的。使用闪回表的时候,同时还会还原表及其关联的对象(如索引、约束条件、触发器等)中的数据。闪回表在执行的过程中国,会在还原数据中检索到用于满足闪回表请求的数据。因此,闪回表为用户提供了可快速容易地恢复意外的修改,而不需要数据库管理员的干预的方法。


# 使用闪回表需要有flashback table或flashback any table的系统权限。


闪回表的语法格式如下所示:


flashback table [schema.]<表名> to
{[before drop [rename to 表名]] [SCN|时间戳] 表达式
[enable|disable] triggers}
# 其中:
# schema:代表模式名,一般就是指的用户名。
# to before drop:代表恢复到删除之前。
# rename to:代表更换表名。


二、 【实战】使用闪回表恢复数据


在了解到了什么是Oracle数据库的闪回表后,下面将通过一个具体是示例来演示如何使用闪回表恢复数据。


(1)使用数据库管理登录数据库,并授权c##scott用户闪回表的权限。

SQL> conn / as sysdba
SQL> grant flashback any table to c##scott;


(2)切换到c##scott用户上,创建测试表并插入测试数据。

SQL> conn c##scott/tiger
SQL> create table flashback3(tid number, tname varchar2(20));
SQL> insert into flashback3 values(1,'Tom');
SQL> insert into flashback3 values(2,'Mary');
SQL> insert into flashback3 values(3,'Mike');
SQL> commit;


(3)查询表flashback3中的数据。

SQL> select * from flashback3;
# 输出的信息如下:
TID TNAME
---------- --------------------
   1    Tom
   2    Mary
   3    Mike


(4)记录当前的时间和SCN号。

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') "current time",
       timestamp_to_scn(sysdate) SCN from dual;  
# 输出的信息如下:
current time      SCN
----------------------- -----------------
2025-03-25 11:30:51    2754561


(5)删除测试表中的一条数据。

SQL> delete from flashback3 where tid=2;
SQL> commit;
# 这里的delete语句用于模拟用户误删除了表中的数据。


(6)执行闪回表恢复删除的数据:

SQL> flashback table flashback3 to scn 2754561;
# 此时将输出下面的错误信息:
ERROR at line 1:
ORA-08189: cannot flashback the table because row movement is not enabled


(7)执行闪回表需要启用表的行移动功能。

SQL> alter table flashback3 enable row movement;


(8)重新执行闪回表恢复删除的数据。

SQL> flashback table flashback3 to scn 2754561;


(9)执行查询语句验证数据是否恢复。

SQL> select * from flashback3;
# 输出的信息如下:
TID TNAME
---------- --------------------
   1    Tom
   2    Mary
   3    Mike
# 在默认情况下,闪回表将禁用表上的触发器。


(10)在表flashback3创建一个触发器用于禁止插入操作。

SQL> create or replace trigger mytrigger
before insert
on flashback3
begin
    raise_application_error(-20001,'Insert disabled');
end;
/
# 当在表flashback3上执行插入操作时,
# 触发器mytrigger将被触发并直接抛出错误号是-20001的错误信息。
# 换句话说,表flashback3上的插入操作被禁用了。


(11)记录当前的时间和SCN号。

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') "current time",
  timestamp_to_scn(sysdate) SCN from dual;
# 输出的信息如下:
current time      SCN
--------------------- ------------------
2025-03-25 11:54:38    2755332


(12)删除数据。

SQL> delete from flashback3 where tid=2;
SQL> commit;


(13)重新执行闪回表恢复删除的数据

SQL> flashback table flashback3 to scn 2755332 enable triggers;
# 这里执行的闪回表操作启用了表上触发器。
# 此时,将输出下面的错误信息:
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: Insert disabled
ORA-06512: at "C##SCOTT.MYTRIGGER", line 2
ORA-04088: error during execution of trigger 'C##SCOTT.MYTRIGGER'


相关文章
|
17天前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
197 93
|
3月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
23天前
|
数据库
【赵渝强老师】达梦数据库实例的状态
达梦数据库实例包含NORMAL、PRIMARY和STANDBY三种模式,以及MOUNT、OPEN和SUSPEND三种状态。模式之间可在MOUNT状态下相互转换,不同状态与模式适用于数据库的启动、配置及运行需求。
|
29天前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
96 8
|
2月前
|
存储 关系型数据库 MySQL
【赵渝强老师】MySQL数据库的多实例环境
MySQL多实例是指在一台服务器上运行多个MySQL服务,通过不同端口提供独立的数据服务。各实例共享安装程序,但使用各自的配置文件和数据文件,实现资源高效利用。本文详细介绍了如何通过“mysqld_multi”工具配置和启动多个MySQL实例,并演示了目录创建、初始化、配置文件修改及实例启动等操作步骤。
|
3月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
127 11
|
2月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
163 0
|
2月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle客户端与服务器端连接建立的过程
Oracle数据库采用客户端-服务器架构,客户端通过其网络环境与服务器通信,实现数据库访问。监听程序负责建立连接,通过命令lsnrctl可启动、停止及查看监听状态。本文介绍了监听器的作用及相关基础管理操作。
100 0
|
3月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL中的数据库对象
本教程详细介绍了MySQL数据库中的常见对象,包括表、索引、视图、事件、存储过程和存储函数的创建与管理。内容涵盖表的基本操作、索引的使用、视图简化查询、事件调度功能等,并通过具体示例演示相关SQL语句的使用方法。
|
3月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。

推荐镜像

更多