Oracle数据库的闪回技术

这篇具有很好参考价值的文章主要介绍了Oracle数据库的闪回技术。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当 Oracle 数据库发生逻辑损坏时,可以使用闪回技术简单快捷地进行数据库的恢复。

闪回数据库使用闪回日志执行闪回。闪回删除使用回收站。其它所有技术都使用还原数据。并不
是所有闪回功能都会修改数据库。有些功能只是一些用来查询数据以往版本的方法

一、闪回数据库
使用闪回数据库,通过还原自先前某个时间点以来发生的所有更改,可快速将数据库恢复到过去
的某个时间点上的状态。使用闪回数据库功能时,不需要还原备份。闪回数据库功能可以方便地
撤消导致逻辑数据损坏的更改。如果数据库发生介质丢失或物理损坏,则必须使用传统的方法进
行恢复。
1. 配置闪回数据库的方法
SQL>shutdown immediate;
SQL>startup mount exclusive;
SQL>alter system set db_flashback_retention_terget=2880 scope=both;
SQL>alter system set DB_RECOVERY_FILE_DEST_SIZE=20G scope=both;
SQL>alter system set db_recovery_file_dest='+FRA' scope=both;
SQL>alter database flashback on;
SQL>alter database open;

注意:DB_FLASHBACK_RETENTION_TARGET 初始化参数用来设置保留目标,可指定数据库所
能闪回的上限(以分钟为单位)。此参数只是一个目标,并不提供任何保证,闪回时间间隔取决
于在快速恢复区中保存的闪回日志的数据量。
查询确认闪回数据库是否已经启用:
SQL>select flashback_on from v$database;

2. 闪回数据库的方法
闪回数据库必须以 EXCLUSIVE 模式装载才能执行 FLASHBACK DATABASE 命令,而且在完成时
必须使用 RESETLOGS 选项打开数据库。
在使用 RMAN 命令 FLASHBACK DATABASE 命令执行闪回数据库操作时,可以使用 SEQUENCE
和 THREAD 指定作为下限的重做日志序列号和线程号,RMAN 只选择可用于闪回到指定序列号(但
不包括指定序列号)的文件。
也可以使用 FLASHBACK DATABASE 的 SQL 命令将数据库恢复到过去的某个时间或 SCN. 如果

使用 TO SCN 子句,则必须提供一个编号。如果指定 TO TIMESTAMP, 则必须提供一个时间戳
值。还可以指定还原点名称,例如:
RMAN> FLASHBACK DATABASE TO TIME="TO_DATE('2013-05-27 09:00:00',
'YYYY-MM-DD HH24:MI:SS')";
RMAN> FLASHBACK DATABASE TO SCN=23565;
RMAN> FLASHBACK DATABASE TO SEQUENCE=223 THREAD=1;
或者:
SQL> FLASHBACK DATABASE TO TIMESTAMP(SYSDATE-1/24);
SQL> FLASHBACK DATABASE TO SCN 53943;
SQL> FLASHBACK DATABASE TO RESTORE POINT b4_load;
3. 闪回数据库测试
本节实验测试基于时间戳的数据库闪回。
1) 创建用于实验的测试表 hr.t_obj:
SQL>create table hr.t_obj as select * from dba_objiects;
SQL>select count(*) from hr.t_obj;

2) 获取当前系统时间:
SQL>select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') tm from dual;

3) 删除 hr 用户及其对象:
SQL>drop user hr cascade;
SQL>select count(*) from hr.t_obj;
4) 建立对照表
SQL>select count(*) from system.tab1;
5) 执行闪回数据库操作,恢复 hr
SQL>shutdown immediate;
SQL>startup mount;
SQL>flashback database to timestamp to_timestamp
    2   ('2014-11-03 10:48:48','yyyy-mm-dd hh24:mi:ss');
SQL>alter database open resetlogs;

6) 验证
SQL>select count(*) from hr.t_obj;
SQL>select count(*) from system tab1;

可以看到,执行闪回数据库时间戳之前的更改都得到了恢复,之后的更改不再有效。因此,闪回
数据库是对数据库的整体回退。
 二、表的删除闪回
表删除(drop)闪回的原理是使用回收站技术,被删除的对象会临时放入回收站中并且仍属于其
所有者。当删除的表移到回收站时,会使用系统生成的名称重命名该表及其关联对象和约束条件。
回收站本身也是一个数据字典表,它用来维护删除对象的原始名称与其系统生成名称之间的关系。
使用 DBA_RECYCLEBIN, USER_RECYCLEBIN 视图可查询回收站的内容。
要使用闪回删除功能,必须将 FLASHBACK TABLE 或 FLASHBACK ANY TABLE 系统权限授予
使用闪回表功能的用户。此外,还必须将 SELECT, INSERT, DELETE 和 ALTER 对象权限授予
用户。
1. 表的删除闪回语法
FLASHBACK TABLE table_name TO BEFORE DROP [RENAME TO new_name];
2. 表的删除闪回测试
1) 删除 hr.t_obj 表:
SQL>conn hr/hr
SQL>select count(*) from hr.t_obj;
SQL>drop table hr.t_obj;
SQL>select count(*) from hr.t_obj;

2) 查询回收站并执行闪回删除:
SQL>select object_name, original_name, can_undrop, base_object
    2   from user_recyclebin;
SQL>flashback table hr.t_obj to before drop;
SQL>select count(*) from hr.t_obj;

三、闪回查询
闪回查询通常用于检索一条记录的所有历史版本,回溯单独的事务或者回溯从指定时间以来对特
定表的所有变化。
1. 闪回查询的语法
SELECT <column_name_list> FROM <table_name> 
AS OF <SCN> --- 使用 as of scn
或 AS OF <TIMESTAMP> --- 使用 as of timestamp
 
[WHERE <filter_conditions>]
[GROUP BY <unaggregated columns>]
[HAVING <group_filter>]
[ORDER BY <column_positions_or_name>]
2. 闪回查询测试
1) 创建实验用测试表 tab1:
SQL>create table hr.tab1 as select user_id, username from dba_users where 1=0;
SQL>insert into hr.tab1 select user_id, username from dba_users where user_id < 10;
SQL>commit;
SQLselect * from hr.tab1;

2) 对表进行删除操作,并进行闪回查询:
SQL>conn hr/hr;
SQL>select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') tm from dual;
SQL>delect tab1 where username='SYS';
SQL>select * from tab1;
SQL>seelct *from tab1 as of timestamp to_timestamp ('2022-08-01 11:00:00', 'yyyy-mm-dd hh24:mi:ss');


四、闪回表
1. 表闪回的方法
使用闪回表的先决条件是必须启用表的行迁移:
ALTER TABLE schema_name.table_name ENABLE ROW MOVEMENT;
表闪回的语法:
FLASHBACK TABLE schema_name.table_name TO SCN <scn_number>
-- 基于 SCN 的表闪回
或 TO TIMESTAMP <timestamp> -- 基于 TIMESTAMP 的表闪回
或 TO RESTORE POINT <restore_point> -- 基于 RESTORE POINT 的表闪回
[<ENABLE | DISABLE> TRIGGERS]
2. 表闪回测试
本节实验基于 RESTORE POINT 的表闪回。
基于 RESTORE POINT 的表闪回首先要创建适当的还原点,创建还原点的语法为:
CREATE RESTORE POINT point_name;
对于闪回成功之后无用的闪回点可以及时删除掉,删除闪回点的语法为:
DROP RESTORE POINT point_name;
1) 创建用于闪回表的测试表 hr.tab2,并创建还原点 p1:
SQL>create table hr.tab2 as select user_id, username from dba_users where 1 = 0;
SQL>alter table hr.tab2 enanle row movement;
SQL>insert into hr.tab2 seelct user_id, username from dba_users where user_id < 10;
SQL>select * from hr.tab2;
SQL>create restore point p1;

2) 对表 hr.tab2 进行插入操作,并创建还原点 p2:
SQL>insert into hr.tab2 select user_id, username from dba_users
    2   where user_id >= 10 and user_id < 20;
SQL> select * from hr.tab2;
SQL>select * from hr.tab2;
SQL>create restore point p2;
 

3) 从表 hr.tab2 进行删除,创建还原点 p3:
SQL>delect hr.tab2 where user_id = 5;
SQL>seelct * from hr.tab2;
SQL>create restore point p3;


4) 开始执行闪回表操作:
SQL>flashback table hr.tab2 to restore point p1;
SQL>select * from hr.tab2;
SQL>flashback table hr.tab2 to restore point p2;
SQL>select * from hr.tab;
SQL>flashback table hr.tab2 to restore point p3;
SQL>select * from hr.tab2;


5) 删除还原点:
SQL>fdrop restore point p1;
SQL>drop restore point p2;
SQL>drop restore point p3;

五、闪回版本查询
闪回版本查询指的是 Oracle 可以针对特定的对象来查询某一特定时段内该对象变化的所有情
况,也可以根据特定的需要来将该对象修正到特定的时刻。
闪回版本查询同闪回查询、闪回表一样,都是使用了 UNDO 段的数据,即数据变更的历史副本,
当 UNDO 段的数据由于空间变化而被清除后,则无法进行闪回。
1. 闪回版本查询语法
SELECT <columns> FROM <schema_name.table_name>
VERSIONS BETWEEN SCN <minimum_scn> AND <maximum_scn>
-- 基于 SCN 的版本查询
或者:
SELECT <columns> FROM <schema_name.table_name>
VERSIONS BETWEEN timestamp 
to_timestamp('start_timestamp') and to_timestamp('end_timestamp')
-- 基于 TIMESTAMP 的版本查询
2. 闪回版本查询测试
使用上节课闪回表查询创建的测试表 hr.tab2:
SQL>col USER_ID format 99999
SQL>col USERNAME format a10
SQL>seelct user_ID, username, versions_xid, versions_startscn,
   2    versions_endscn, versions_operation
   3    from hr.tab2 versions between scn minvalue and maxvalue;

其中:
versions_xid - 记录指定版本事务的唯一标识符。
versions_startscn - 记录的起始 SCN 号。
versions_endscn -- 记录的终止 SCN 号。
versions_operation - 记录的操作类型(I 表示插入,U 表示更新,D 表示删除)。

闪回事务查询是对闪回版本查询的扩展。从某种程度上来说,闪回版本查询通常用于更细粒度的
查询,如针对特定的记录。而闪回事务则是针对某一事务进行闪回,是基于事务级别的。闪回事
务查询是通过查询视图 flashback_transaction_query 来获得某个或多个特定事务信息,
同时可根据该视图中提供的 undo_sql 列中的语句来反转事务,从而保证数据的完整性。
要使用闪回事务查询,必须要启用补充日志记录功能并建立正确的权限。例如,要对上一节闪表
操作创建的测试表 tab2 使用闪回事务处理,就要以 SYSDBA 权限在 SQL*Plus 中执行下列设
置步骤:

SQL>alter database add supplemental log data;
SQL>alter database add supplemental log data (primary key)  columns;
SQL>grant execute on dbms_flashback to hr;
SQL>grant select any transaction to hr;

然后对 hr.tab2 进行增删改操作,然后按照十六进制的行 ID 进行闪回事务查询了:文章来源地址https://www.toymoban.com/news/detail-613664.html

到了这里,关于Oracle数据库的闪回技术的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Oracle数据库面试题 精选 Oracle 面试题

    1.解释冷备份和热备份的不同点以及各自的优点 冷备份 发生在数据库已经正常关闭的情况下,将关键性文件拷贝到另外位置的一种说法。适用于所有模式的数据库。 优点 1. 是非常快速的备份方法(只需拷贝文件) 2. 容易归档(简单拷贝即可) 3. 容易恢复到某个时间点上(只

    2024年02月05日
    浏览(103)
  • 【Oracle】收集Oracle数据库内存相关的信息

    【声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) Oracle数据库包含多个内存区域,每个区域都包含多个子组件。 Oracle Database Memory Structures 根据具体问题的需要,可以通过如下命令收集Oracle数据库内存相关的信息。 例: 注:SET

    2024年01月21日
    浏览(70)
  • 【Oracle】使用 SQL Developer 连接 Oracle 数据库

    SQL Developer 是 Oracle 官方推出的一款免费的数据库开发工具,它提供了丰富的数据库开发功能,其中包括连接 Oracle 数据库的功能。 在本文中,我们将从多个方面详细阐述如何使用 SQL Developer 连接 Oracle 数据库。 在连接 Oracle 数据库前,需要需要做一些准备工作,包括安装 SQ

    2024年02月06日
    浏览(69)
  • Oracle数据库

    ①层次型数据库 ②网状型数据库 ③关系型数据库(主要介绍) E-R图:属性(椭圆形),实体(矩形),联系(菱形-一对一、一对多、多对多) 注:有的联系也有属性 关系型数据库的设计范式: 第一范式(1NF):属性不可再分,字段保证原子性 第二范式(2NF):在满足1

    2024年02月08日
    浏览(58)
  • Oracle 开发篇+Java通过HiKariCP访问Oracle数据库

    标签:HikariCP、数据库连接池、JDBC连接池、 释义:HikariCP 是一个高性能的 JDBC 连接池组件,号称性能最好的后起之秀,是一个基于BoneCP做了不少的改进和优化的高性能JDBC连接池。 ★ Java代码 ※ 如果您觉得文章写的还不错, 别忘了在文末给作者点个赞哦 ~

    2024年02月13日
    浏览(58)
  • 快速监控 Oracle 数据库

    Oracle 数据库在行业内应用广泛,通常存放的非常重要的数据,监控是必不可少的,本文使用 Cprobe 采集 Oracle 监控数据,极致简单,分享给大家。 安装配置 Oracle 简单起见,我使用 Docker 启动 Oracle,命令如下: 如上命令启动之后,Oracle 的监听端口是 1521,用户名/密码是 syst

    2024年01月20日
    浏览(51)
  • Oracle数据库完整卸载

    进入计算机管理,在服务中,找到oracle开头的所有服务,右击选择停止。 快捷键:ctrl+shift+esc打开任务管理器 点击开始菜单找到Oracle,然后点击Oracle安装产品,再点击Universal Installer。 点击之后稍等一会然后会进入进入下图界面,点击卸载产品。 单击“卸载产品”,选中除“Or

    2024年01月16日
    浏览(65)
  • oracle数据库巡检脚本

    用于Oracle数据库巡检的示例脚本: 

    2024年02月14日
    浏览(62)
  • Oracle数据库概念简介

    一般意义上的数据库包含两个部分 库:就是一个存储一堆文件的文件目录 数据库管理系统:管理库的系统 数据库管理系统(Database Management System),是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称 DBMS ; 它对数据库进行统一的管理和控制,以保证数

    2024年02月09日
    浏览(51)
  • 数据库(二) Oracle篇

    概述 SQL函数有单行函数和多行函数,其区别为: 单行:输入一行,返回一行,如字符、数字、转换、通用函数等 多行:输入多行,返回一行,也称为分组函数、组函数、聚合函数, 且多行函数会自动滤空 字符函数 CONCAT( X,Y): 连接字符串X和Y INSTR(X,STR) : 后面STR在前面字符串X第一次

    2024年02月10日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包