Oracle18学习总结——闪回技术及应用

1-闪回技术有什么用?

闪回是Oracle提供的一系列人为错误更正技术。闪回从根本上改变了数据恢复。利用闪回技术,更正错误的时间与错误发生时间几乎相同。而且它非常易用,使用一条短命令便可恢复整个数据库,而不必执行复杂的程序。闪回技术提供了一个 SQL 界面,能够快速分析和修复人为错误。闪回技术是 Oracle 数据库独有的特性,支持各级恢复,包括行、事务、表、表空间和数据库范围。

2-UNDO是什么?

撤销(Undo)数据是反转DML语句结果所需的信息。是记录数据的备份用的。 简单举个例子说明(实际过程比这要复杂的多): 1、当你发出一条update语句后,oracle先将更改前后信息写进redo(当满足一定条件后由日志写进程写入日志文件) 2、然后将更新前得数据镜像copy到undo中。 3、用道户rollback后,oracle 将undo中的数据覆盖回去。用户commit后,oracle可以根据redo的信息进行数据恢复,当然也可以利用undo进行flashback。

3-图文形式写出本机配置闪回恢复区操作步骤。

只要使用闪回技术操作数据,就必须首先建立闪回恢复区。闪回恢复区是一块用来集中存储所有与数据库恢复相关文件的存储区域,它为数据恢复提供了一个集中化的存储空间,这在很大程度上减小了管理开销。
配置闪回恢复区是一个很简单的过程,只需要在初始化参数文件中指定恢复区的位置(DB_RECOVERY_FILE_DEST)和大小(DB_RECOVERY_FILE_DEST_SIZE)即可,通常使用alter system语句来实现配置闪回恢复区。

alter system set db_recovery_file_dest_size=500M scope=both;

在这里插入图片描述

4-【闪回数据库】 recovery_database 代码每行写注释

在配置闪回恢复区之后,若要启用闪回数据库功能,还要需要进一步的配置,主要包括以下3点:
设置数据库必须运行在归档模式下(ARCHIVELOG);
通过数据库参数DB_FLASHBACK_RETENTION_TARGET,指定可以在多长时间内闪回数据库。
需要在MOUNT状态下使用ALTER DATABASE FLASHBACK ON命令启动闪回数据库功能。

SQL> archive log list;--查看数据库归档模式
数据库日志模式             非存档模式
自动存档             禁用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     50
当前日志序列           52
SQL> shutdown immediate;--关闭数据库实例
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;--mount模式打开数据库
ORACLE 例程已经启动。

Total System Global Area 1071333376 bytes
Fixed Size                  1375792 bytes
Variable Size             679477712 bytes
Database Buffers          385875968 bytes
Redo Buffers                4603904 bytes
数据库装载完毕。
SQL> alter database archivelog;--更改数据库归档模式

数据库已更改。

SQL> alter system set db_flashback_retention_target=7200;--指定闪回时间

系统已更改。

SQL> alter database flashback on;--启用闪回功能

数据库已更改。

SQL> alter database open;--打开数据库

数据库已更改。

SQL> archive log list;--查看此时数据库的归档模式
数据库日志模式            存档模式
自动存档             启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     50
下一个存档日志序列   52
当前日志序列           52

5-闪回表技术作用是什么?

闪回表技术可以恢复到之前的某个时间戳、SCN号或之前的任何drop动作

6-本地演示下闪回表实际案例的操作步骤。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7-【闪回表】 flashtable 代码每行写注释

SQL> conn scott/123456--连接数据库
已连接。
SQL> create table dept2 as select * from dept;--新建一个和dept一样的表dept2

表已创建。

SQL> select * from dept2;--查看dept2

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> set time on;--设置时间戳
16:06:55 SQL> delete from dept2 where deptno = 30;--删除dept2表的一行

已删除 1 行。

16:07:21 SQL> commit;

提交完成。

16:07:26 SQL> alter table dept2 enable row movement;--启用迁移功能

表已更改。

16:08:01 SQL> flashback table scott.dept2 to timestamp to_timestamp('2020-05-08 16:07:26','yyyy-mm-dd hh24:mi:ss');--闪回到删除一行之前的时间戳

闪回完成。

16:10:18 SQL> select * from dept2;--此时表已经恢复

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

8-闪回丢弃的技术作用是什么?

闪回丢弃技术:类似于操作系统的垃圾回收站,可以从其中恢复被DRO掉的表或索引,该功能基于撤销数据。

9-【闪回丢弃】 recycle 代码每行写注释

请输入用户名:  scott
输入口令:

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create table dept_copy as select * from dept;--根据dept表创建dept_copy表

表已创建。

SQL> select * from tab;--查看系统tab表,有dept_copy这个表

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                          TABLE
DEPT                           TABLE
DEPT2                          TABLE
DEPT_COPY                      TABLE
EMP                            TABLE
SALGRADE                       TABLE
SYS_TEMP_FBT                   TABLE

已选择7行。

SQL> drop table dept_copy;--删除dept_copy这个表

表已删除。

SQL> select object_name,original_name from user_recyclebin;--从dba_recyclebin中可以查看当前删除的对象和名字

OBJECT_NAME                    ORIGINAL_NAME
------------------------------ --------------------------------
BIN$3bwOA643Ruat/PJHAdHotg==$0 DEPT_COPY

SQL> flashback table dept_copy to before drop;--闪回表格

闪回完成。

SQL> select * from dept_copy;--查看闪回的表格

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

10-本地演示下闪回丢弃实际案例的操作步骤。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11-闪回版本查询技术 本地演示下实际操作步骤

12:16:30 SQL> create table sct3(
12:24:07   2  id number(4),
12:24:07   3  name varchar2(20)
12:24:07   4  );--新建一个表格sct3

表已创建。

12:24:09 SQL> insert into sct3 values(1,'lili');

已创建 1 行。

12:24:20 SQL> commit;

提交完成。

12:24:20 SQL> insert into sct3 values(2,'lilic');

已创建 1 行。

12:24:20 SQL> commit;--向表格插入两行数据

提交完成。

12:24:20 SQL> update sct3 set name='yuyuanshang' where id=2;--更新数据

已更新 1 行。

12:24:20 SQL> commit;

提交完成。

12:24:20 SQL> insert into sct3 values(3,'lilid');--插入一行数据

已创建 1 行。

12:24:20 SQL> commit;

提交完成。

--VERSIONS_STARTTIME是数据被修改的起始时间
--VERSIONS_ENDTIME是数据被修改后新数据的有效时间,也就是VERSIONS_STARTTIME和VERSIONS_ENDTIME时间段内,这条数据再没被修改过,如果VERSIONS_ENDTIME为空,就说明这天记录从VERSIONS_STARTTIME时间起再没被修改过。
--VERSIONS_OPERATION是修改状态,I代表INSERT,U代表UPDATE,D代表DELETE。此时如果想回滚INSERT的数据,只需要DELETE反向操作即可,如果想回滚UPDATE操作,将数据反向UPDATE回去即可

SQL> select id, name,versions_operation,versions_starttime,versions_endtime
  2    from sct3
  3    versions  between  timestamp  minvalue  and maxvalue
  4    order by id,versions_endtime;

 ID NAME                 VERSIONS_O VERSIONS_STARTTIME        VERSIONS_ENDTIME
--- -------------------- ---------- ------------------------- -------------------------
  1 lili                 I          18-5-20 11.22.54 下午
  2 lilic                I          18-5-20 11.22.54 下午  18-5-20 11.22.54 下午
  2 yuyuanshang          U          18-5-20 11.22.54 下午
  3 lilid                I          18-5-20 11.22.54 下午

12-闪回事务查询技术 本地演示下实际操作步骤

SQL> create table sct4(id number(4), name varchar2(20));

表已创建。

SQL> insert into sct4 values(2,'lilic');

已创建 1 行。

SQL> commit;

提交完成。

SQL> delete sct4   where id=1;

已删除 1 行。

SQL> commit;

提交完成。
SQL> select id, name,versions_xid,versions_operation,versions_starttime,versions_endtime  from sct4  versions  between  timestamp  minvalue  and maxvalue  order by id,versions_endtime;

 ID NAME                 VERSIONS_XID         VERSIONS_O VERSIONS_STARTTIME        VERSIONS_ENDTIME
--- -------------------- -------------------- ---------- ------------------------- -------------------------
  1 lili                 02000800B2060000     I          18-5-20 11.31.48 下午  18-5-20 11.31.48 下午
  1 lili                 02001A00B2060000     D          18-5-20 11.31.48 下午
  2 lilic                0400210020060000     I          18-5-20 11.31.48 下午

SQL> select xid,undo_change#,operation,table_name,undo_sql from flashback_transaction_query where xid ='02000800B2060000';

XID                  UNDO_CHANGE# OPERATION            TABLE_NAME           UNDO_SQL
-------------------- ------------ -------------------- -------------------- --------------------
02000800B2060000                1 UNKNOWN              SCT4
02000800B2060000                2 BEGIN

--最后再执行undo_sql就可以恢复操作之前的数据库了

闪回事务查询是一种诊断工具,帮助识别数据库发生的事务级变化,可以用于事务审计的数据分析。通过闪回事务分析;可以识别在一个特定的时间段内所发生的所有变化,也可以对数据库表进行事务级恢复。
闪回事务查询的基础是依赖于撤销数据,它也是利用初始化参数UNDO_RETENTION来确定已经提交的撤销数据在数据库中的保存时间。flashback transaction query 可实现撤销处理,因为可以从flashback_transaction_query视图中获得事务的历史操作及撤销语句,也就是说,我们可以审计一个事务到底做了什么,也可以撤销一个已经提交的事务。

13-闪回数据归档技术有什么用?

闪回数据归档技术:通过该技术可以查询指定对象的任何时间点(只要满足保护策略)的数据,而且不需要使用UNDO,在有审计需要的环境下,或者是安全性特别重要的高可用数据库中,是一个非常好的特性。缺点是如果该表变化很频繁,则对空间的要求可能很高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值