Oracle 闪回技术可将恢复时间从数小时缩短至数分钟。
任何预防措施都无法避免人为失误的发生。Oracle数据库闪回技术是一组独特而丰富的数据恢复解决方案,能够有选择性地高效撤销一个错误的影响,从人为错误中恢复。在采用闪回技术之前,损坏数据库只需数分钟,而要恢复它则需要数小时。有了闪回技术,纠正错误只需要数分钟的时间。此外,从错误中恢复所需的时间与数据库大小无关,这是Oracle 数据库独有的功能。闪回技术支持在所有层面上进行恢复,包括行、事务、表和整个数据库。
闪回功能的前提
打开闪回功能
-- 需要先把数据库切到Mount模式
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE ARCHIVELOG
ALTER DATABASE FLASHBACK ON
ALTER DATABASE OPEN
-- 对于多租户PDB,打开数据库操作
SHOW PDBS
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER PLUGGABLE DATABASE ORCLPDB1 OPEN;
-- 闪回功能状态查询
SELECT flashback_on FROM v$database;- 配置闪回区: 确保
db_recovery_file_dest和db_flashback_retention_target设置合理(例如保留 24 小时) - 其他相关的配置项目可参考官方文档:https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/DB_RECOVERY_FILE_DEST.html
开启表回收站
ALTER SYSTEM SET RECYCLEBIN = ON SCOPE=BOTH;
-- SCOPE 指定操作的配置文件的类型,可以是MEMORY、SPFILE、BOTH。
-- 查看当前回收站配置
SHOW PARAMETER recyclebin;
-- 查看回收站中的对象
SELECT * FROM DBA_RECYCLEBIN;
-- 类似的,用户回收站视图
SELECT * FROM USER_RECYCLEBIN
-- 恢复回收站中的对象
FLASHBACK TABLE table_name TO BEFORE DROP;
-- 清空回收站
PURGE DBA_RECYCLEBIN;
-- 类似的
PURGE RECYCLEBIN;
-- 删除回收站中的特定对象
PURGE TABLE table_name;- 特别注意,该功能对 SYS 用户和 SYSTEM 表空间无效。
闪回操作选择与常见场景
闪回查询
核对历史数据,想看看误删前的数据长什么样。或审计需要。
-- 查询 1 小时前的数据
SELECT * FROM schema.表名 AS OF TIMESTAMP (SYSDATE - 1/24);
-- 或者查询两个 SCN 之间的版本变化
SELECT * FROM schema.表名 VERSIONS BETWEEN SCN 1000 AND 2000;闪回删除
就像 Windows 的回收站功能。当执行 DROP TABLE 时,Oracle 默认会将其重命名放入回收站。
-- 1. 查看回收站里的表(原表名已变更为BIN$开头)
SHOW RECYCLEBIN;
-- 2. 执行闪回(恢复原名)
FLASHBACK TABLE schema.表名 TO BEFORE DROP;
-- 3. 如果有重名冲突,恢复并重命名
FLASHBACK TABLE schema.表名 TO BEFORE DROP RENAME TO 表名_old;闪回表
针对错误的 DELETE/UPDATE,由于数据库原理原因,需要打开行移动功能。
-- 0. 开启行移动(必须步骤)
ALTER TABLE schema.表名 ENABLE ROW MOVEMENT;
-- 1. 闪回到 10 分钟前
FLASHBACK TABLE schema.表名 TO TIMESTAMP (SYSDATE - 10/1440);
-- 2. 或者闪回到具体的 SCN
FLASHBACK TABLE schema.表名 TO SCN 12345678;
-- 3. 恢复完成后,建议关闭行移动(除非业务需要)
ALTER TABLE schema.表名 DISABLE ROW MOVEMENT;闪回数据库
针对一些无法挽回的重大错误,需要关闭数据库
-- 1. 关闭数据库
SHUTDOWN IMMEDIATE;
-- 2. 启动到 Mount 状态(不要 Open)
STARTUP MOUNT;
-- 3. 执行闪回(例如闪回到昨天 10:00)
FLASHBACK DATABASE TO TIMESTAMP TO_DATE('2023-10-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
-- 4. 打开数据库(必须使用 resetlogs,这会重置日志序列)
ALTER DATABASE OPEN RESETLOGS;常见错误
- ORA-08189:需要启动行移动
- ORA-38754:需要启用闪回功能
本文标题:ORACLE 闪回功能学习备忘
本文连接:https://blog.dextercai.com/archives/238.html
除另行说明,本站文字内容采用创作共用版权 CC-BY-NC-ND 4.0 许可协议,版权归本人所有。
除另行说明,本站图片内容版权归本人所有,未经许可前,严禁以任何形式的使用。
即日起视情况关闭全站评论区,您可以通过关于页面的电邮地址和我取得联系,谢谢