Oracle 闪回技术

闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成)sql

1. 闪回查询

UNDO_MANAGEMENT数据库

指定回滚段的管理方式,若是设置为 AUTO,则采用撤销表空间自动管理回滚信息express

UNDO_TABLESPACE大数据

指定用于回滚信息自动管理的撤销表空间名code

UNDO_RETENTIONit

指定回滚信息的最长保留时间io

  • 使用 ALTER SYSTEM 命令修改各个参数值
ALTER SYSTEM SET UNDO_RETENTION=1200;
  • 基本语法
SELECT column_name [,...]
FROM table_name
[AS OF SCN|TIMESTAMP expression]
[WHERE condition]
  • 基于 AS OF TIMESTAMP 的闪回查询
ALTER SESSION 
SET_NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
--
SET TIME ON

--查询当前状态
SELECT * FROM scott.emp
WHERE empno=7844;

--查询前一个小时
SELECT * FROM scott.emp
AS OF TIMESTAMP SYSDATE-1/24
WHERE empno=7844;

--查询某个时刻
SELECT * FROM scott.emp
AS OF TIMESTAMP TO_TIMESTAMP('2009-3-23 09:14:41','YYYY-MM-DD HH24:MI:SS')
  • 基于 AS OF SCN 的闪回查询

若是须要对多个相互有主外键约束的表进行恢复,使用 AS OF TIMESTAMP 方式,可能会因为时间点的不统一而形成数据恢复失败,使用 AS OF SCN 方式则可以确保约束的一致性。table

-- 查询当前的 SCN
SELECT current_scn
FROM v$database;

-- 查询当前表的数据
SELECT * FROM scott.emp
WHERE empno=7844;

--查询某个 SCN 的数据
SELECT * FROM scott.emp
AS OF SCN 617244
WHERE empno=7844;

系统时间与 SCN 之间的关系能够经过查询 SYS 模式下的 SMON_SCN_TIME 表得到class

SELECT scn, TO_CHAR(time_dp, 'YYYY-MM-DD HH24:MI:SS') time_dp
FROM sys.smon_scn_time;