第十六章 Oracle 闪回技术 主讲内容 : 闪回技术 闪回表 闪回数据库的使用 ;
复习上节课内容 备份和恢复概述 RMAN 工具 RMAN 备份 恢复 第 2 页
本节课内容 1. 闪回技术概述 2. 闪回删除 3. 闪回版本查询 4. 闪回数据库 第 3 页
一. 闪回技术概述 目的 : 为了让用户及时获取误操作之前的数据 ; 多种形式 : 闪回表 (Flashback Table) 闪回删除 (Flashback Drop) 闪回版本查询 (Flashback Version Query) 闪回事务查询 (Flashback Transaction Query) 闪回数据库 (Flashback Database) 闪回归档 ( Flashback Data Archive) 第 4 页
1 闪回表 闪回表技术用于恢复表中的数据, 实质上是将表中的数据恢复到指定的时间点 (TIMESTAMP) 或系统改变号 (SCN) 上 ; 闪回表需要用到数据库中的撤消表空间, 可以通过 SHOW PARAMETER undo 语句查看与撤消表空间相关的信息 第 5 页
其中,auto 表示系统使用自动撤销管理方法, 即使用撤销表空间记录撤销数据 ; Undo_retention 表示保留时间 ; Undo_tablespace 表示撤销表空间名称 第 6 页
问题? 1:00, 新建数据表 student; 约 1:10 时刻, 插入数据记录 3 条 ; 接着插入数据记录 5 条 ; 能否将表 student 返回至 1:10 时刻的数据状态? 第 7 页
实现过程 1 创建数据表 student 2 插入 3 条数据记录, 并提交数据 第 8 页
3 继续输入 5 条数据记录, 并提交 第 9 页
4 启用表的行移动功能 ;( 该步骤必须执行 ) SQL> alter table student enable row movement; 第 10 页
5 使用 flashback table 命令, 将表中数据闪回到初始状态 ; SQL> flashback table system.student to timestamp to_timestamp('2011-12-11 00:20:01','yyyy-mm-dd hh24:mi:ss'); 或者 SQL> flashback table student to timestamp to_timestamp('2011-12-11 00:27:01','yyyy-mm-dd hh24:mi:ss'); 第 11 页
第 12 页
进行闪回表操作需要使用 FLASHBACK TABLE 语句, 其语法格式详见 P 350 ; 语法说明 : SCN: 系统改变号 相对时间点而言, 系统改变号比较难以理解 ; TIMESTAMP: 时间戳, 包括年月日时分秒 ; ENABLE TRIGGERS: 与表相关的触发器恢复后, 默认为启用状态 第 13 页
二. 闪回删除 闪回删除技术用于恢复已经被用户删除 (Drop) 的数据库对象, 这需要使用到 Oracle 数据库系统中的回收站机制 回收站 启用与禁用状态 查看信息 清除 第 14 页
1 回收站状态管理 Oracle 系统中的回收站在默认情况下是启用状态的 ; 如果回收站处于禁用 (OFF) 状态, 则被删除的数据库对象无法保存到回收站中, 只能是被彻底删除 ; 可以通过设置初始化参数 recyclebin 的值来修改回收站的状态 第 15 页
语法格式 : ALTER SESSION SET recyclebin = ON OFF ; 第 16 页
2 查看回收站中的信息 普通用户可以使用 SHOW RECYCLEBIN 命令, 也可以使用 user_recyclebin 数据字典 ; 数据库管理员则可以使用 dba_recyclebin 数据字典 ; 第 17 页
查看 user_recyclebin 结构 : 对象的原名对象类型对象的删除时间 第 18 页
例 1, 在 scott 用户下创建表 student, 然后使用 drop 命令删 除该表 ; 查询 user_recyclebin 回收站信息 ; 1 2 第 19 页
3 4 第 20 页
实现过程 ( 总结 ): (1) 以 system 身份登录 : SQL> alter user scott account unlock; SQL> alter user scott identified by admin; (2) 以 scott 身份登录 : SQL> connect scott/admin SQL> create table student(sno char(9),sname char(6),ssex char(2),sbirth date,sdept varchar2(20)); SQL> drop table student; 第 21 页
(3) 查询回收站信息 ; SQL> desc user_recyclebin; SQL> select original_name,type,droptime from user_recyclebin; 第 22 页
3 清除回收站中对象 PURGE 命令 : PURGE { [ TABLESPACE tablespace_name [ USER user_name ] ] [ TABLE table_name INDEX index_name ] [ RECYCLEBIN DBA_RECYCLEBIN ] } ; 第 23 页
例 1, 清除回收站中的 student 表对象 ; SQL> purge table student; SQL> select original_name,type,droptime from user_recyclebin; 第 24 页
4 使用闪回删除 语法形式 : FLASHBACK TABLE table_name TO BEFORE DROP [ RENAME TO new_table_name ] ; 备注 : table_name 可以使用表的原名, 也可以使用表在回收站中的名称 ; 默认还原最近一次删除的表 ; 若还原对象名称已经存在, 则需要在还原该表时对其重命名, 这时需要使用 RENAME TO 子句 第 25 页
例 2, 在 scott 用户下创建表 student2 并删除该表后, 查询该表在回收站中的信息 ; SQL> conn scott/admin create table student2(sno char(9),sname char(6),ssex char(2),sbirth date,sdept varchar2(20)); insert into student2 values(200515001,' 赵菁 ',' 女 ',null,null); drop table student2; select original_name,type,droptime from user_recyclebin; 第 26 页
第 27 页
第二步 : 使用 FLASHBACK 语句还原该表, 使用 SELECT 语句 查询闪回表, 检查是否成功还原 ;; SQL> FLASHBACK TABLE student2 TO BEFORE DROP; 第 28 页
三. 闪回版本查询 闪回版本查询 :Flashback Version Query; 用于查询某段时间内对表的操作记录, 主要针对 INSERT UPDATE 和 DELETE 操作 第 29 页
例 1, 在 scott 用户下创建表 myversion, 并对该表进行一系列增删改操作, 每次 DML 操作后都使用 COMMIT 命令进行提交 ; 命令汇总 : SQL> create table student2(sno char(9),sname char(6),ssex char(2),sbirth date,sdept varchar2(20)); insert into student values(200515001,' 赵菁 ',' 女 ',null,null); Commit; 第 30 页
update student2 set sname=' 赵菁菁 ' where sname=' 赵菁 '; commit; delete from student2 where sno=200515003; commit; Select sno,sname,versions_operation, versions_starttime,versions_endtime from student2 versions between timestamp minvalue and maxvalue; 第 31 页
第 32 页
四. 闪回数据库 闪回数据库, 实际上就是将数据库回退到过去的一个时间 点或 SCN 上, 从而实现整个数据库的恢复, 这种恢复不需 要通过备份, 所以应用起来更方便 更快速 第 33 页
1 闪回数据库设置 闪回数据库是依赖于闪回日志的,Oracle 系统提供了一组闪回日志, 记录了数据库的前滚操作 参数说明 : db_recovery_file_dest: 闪回日志的存放位置 db_recovery_file_dest_size: 存放闪回日志的空间 ( 即恢复区 ) 的大小 db_flashback_retention_target: 闪回数据的保留时间, 其单位为分, 默认值为 1440, 即一天 第 34 页
启用闪回数据库功能需要使用如下语法形式 : ALTER DATABASE FLASHBACK ON OFF ; 启用闪回数据库功能的步骤如下 (1) 确定当前数据库的日志模式是否为归档模式 ; (2) 设置闪回数据库功能为启用状态 ; (3) 检查闪回数据库功能是否已经启用 ; 第 35 页
操作步骤 ( 汇总 ): (1) 查看闪回数据库功能是否启用 ; SQL>Conn system/admin SELECT flashback_on FROM v$database ; (2) 确定是否为归档模式 ; SQL> conn /as sysdba archive log list; 第 36 页
(3) 启用并查看闪回数据库功能 ; Shutdown immediate Startup mount Alter database flashback on; Alter database open; SELECT flashback_on FROM v$database ; 第 37 页
第一步 第二步 第 38 页
第三步 第四步 第 39 页
2 使用闪回数据库 使用闪回数据库, 需要用户具有 SYSDBA 权限 语法形式 : FLASHBACK [ STANDBY ] DATABASE [ database_name ] [ TO [ BEFORE ] SCN TIMESTAMP expr ] ; 第 40 页
语法说明 : STANDBY: 表示恢复一个备用数据库, 如果没有相应的备用数据库, 则系统返回一个错误 如果不指定该选项, 则所恢复的数据库可以是主数据库, 也可以是备用数据库 database_name: 数据库名称 默认为当前数据库 SCN: 指定一个 SCN TIMESTAMP: 指定一个时间戳 Expr: 指定一个值或表达式 BEFORE: 恢复到指定 SCN 或时间戳之前 第 41 页
例 1, 闪回数据库示例 ; (1) 在 scott 用户下创建两个表 student1 与 student2, 并向这两个表添加数据 ( 注意使用 COMMIT 命令进行提交 ); (2) 获取系统当前的时间, 供闪回数据库时使用 ; (3) 删除 student1 表, 并修改 student2 表中的数据 ; (4) 下面使用 sys 用户闪回当前数据库 ; (5) 使用 scott 用户连接数据库, 查询 student1 表和 student2 表 第 42 页
小结 闪回技术概述 闪回删除 闪回版本查询 闪回数据库 第 43 页
再见 第 44 页