【Java EE 学习第30天】【闪回】【导入导出】【管理用户安全】【分布式数据库】【数据字典】【方案】

一、闪回

  1.可能的误操作

    (1)错误的删除了记录

    (2)错误的删除了表

    (3)查询历史记录

    (4)撤销已经提交了的事务。

  2.对应着以上四种类型的误操作,有四种闪回类型

    (1)闪回表:将表回退到过去的一个时间上

    (2)闪回删除:还原Oracle回收站

    (3)闪回版本查询:所有历史记录

    (4)闪回事务查询:通过一个select 语句得到一个undo_sql,通过该undo_sql闪回

  3.事实上oracle数据库还有另外两种闪回类型

    (5)闪回数据库

    (6)闪回归档日志

  4.系统改变号:由时间戳通过某种算法得到的一个整数,该整数唯一的确认了某个时间,通常通过该整数进行闪回操作。使用的函数:timestamp_to_scn

select to_char(systimestamp,‘yyyy-mm-dd hh24:mi:ss*ff‘) 时间,timestamp_to_scn(systimestamp) SCN from dual;

    

  5.闪回是有空间限制的,比如系统缓冲区大小为2GB,如果超出了这个大小,如果在15分钟之内还是可以进行闪回的,查看该参数命令(管理员才有权限查看)

show parameters undo

    

    其中900的单位是S,所以为15分钟,该值能够修改(管理员):

alter system set undo_retention=1200 scope=both

    

二、闪回表

  1.普通用户闪回表需要拥有的权限

   拥有flashback any table的权限:管理员授予权限

grant flashback any table to scott;

  2.表需要开启的功能:行移动

alter table flashback_table enable row movement;

  3.闪回表步骤:

    (1)准备测试:创建表flashback_table,准备数据,注意最后提交。

create table flashback_table (
     tid number,
     tname varchar(10)
);
insert into flashback_table values(&tid,‘&tname‘);--插入三条数据commit;

      

    (2)查询当前的时间和SCN号

select to_char(systimestamp,‘yyyy-mm-dd hh24:mi:ss*ff‘) 时间,timestamp_to_scn(systimestamp) SCN from dual;

      

    (3)删除第二条记录

delete from flashback_table where tid=2;
commit;

      

    (4)闪回表到(2)中的SCN处

flashback table flashback_table to scn 1569572;

    (5)验证闪回

      

    (6)屏幕录制

  1 SQL> create table flashback_table (
  2   2  tid number,tname varchar(10));
  3
  4 表已创建。
  5
  6 SQL> edit
  7 已写入 file afiedt.buf
  8
  9   1  create table flashback_table (
 10   2* tid number,tname varchar(10))
 11 SQL>
 12 SQL>
 13 SQL> insert into flashback_table values(&tid,‘&tname‘);
 14 输入 tid 的值:  1
 15 输入 tname 的值:  小明
 16 原值    1: insert into flashback_table values(&tid,‘&tname‘)
 17 新值    1: insert into flashback_table values(1,‘小明‘)
 18
 19 已创建 1 行。
 20
 21 SQL> 、
 22 SP2-0042: 未知命令 "、" - 其余行忽略。
 23 SQL> /
 24 输入 tid 的值:  2
 25 输入 tname 的值:  小张
 26 原值    1: insert into flashback_table values(&tid,‘&tname‘)
 27 新值    1: insert into flashback_table values(2,‘小张‘)
 28
 29 已创建 1 行。
 30
 31 SQL> /
 32 输入 tid 的值:  3
 33 输入 tname 的值:  小强
 34 原值    1: insert into flashback_table values(&tid,‘&tname‘)
 35 新值    1: insert into flashback_table values(3,‘小强‘)
 36
 37 已创建 1 行。
 38
 39 SQL> edit
 40 已写入 file afiedt.buf
 41
 42   1* insert into flashback_table values(&tid,‘&tname‘)
 43 SQL>
 44 SQL>
 45 SQL> select * from flashback_table;
 46
 47        TID TNAME
 48 ---------- --------------------
 49          1 小明
 50          2 小张
 51          3 小强
 52
 53 SQL> commit
 54   2  ;
 55
 56 提交完成。
 57
 58 SQL> select to_char(systimestamp,‘yyyy-mm-dd hh24:mi:ss*ff‘) 时间,timestamp_to_scn(systimestamp) SCN;
 59 select to_char(systimestamp,‘yyyy-mm-dd hh24:mi:ss*ff‘) 时间,timestamp_to_scn(systimestamp) SCN
 60                                                                                               *
 61 第 1 行出现错误:
 62 ORA-00923: 未找到要求的 FROM 关键字
 63
 64
 65 SQL> select to_char(systimestamp,‘yyyy-mm-dd hh24:mi:ss*ff‘) 时间,timestamp_to_scn(systimestamp) SCN from dual;
 66
 67 时间                                                              SCN
 68 ---------------------------------------------------------- ----------
 69 2015-08-25 11:01:03*597000                                    1569572
 70
 71 SQL> delete from flashback_table where tid=2;
 72
 73 已删除 1 行。
 74 SQL> commit
 75   2 ;
 76
 77  提交完成。
 78
 79
 80 SQL> select * from flashback_table;
 81
 82        TID TNAME
 83 ---------- --------------------
 84          1 小明
 85          3 小强
 86
 87 SQL> flashback table flashback_table to scn 1569572;
 88 flashback table flashback_table to scn 1569572
 89                 *
 90 第 1 行出现错误:
 91 ORA-08189: 因为未启用行移动功能, 不能闪回表
 92
 93
 94 SQL> alter table flashback_table enabel row movement;
 95 alter table flashback_table enabel row movement
 96                             *
 97 第 1 行出现错误:
 98 ORA-01735: 无效的 ALTER TABLE 选项
 99
100
101 SQL> alter table flashback_table enable row movement;
102
103 表已更改。
104
105 SQL>
106 SQL>
107 SQL>
108 SQL>
109 SQL>
110 SQL> flashback table flashback_table to scn 1569572;
111
112 闪回完成。
113
114 SQL> select * from flashback_table;
115
116        TID TNAME
117 ---------- --------------------
118          1 小明
119          2 小张
120          3 小强
121
122 SQL>

屏幕录制

  4.疑问:怎样获取历史记录(以上演示方法在现实生产环境中不可能被使用)

二、闪回删除

  1.普通用户有回收站,但是管理员并没有回收站,所以不要使用管理员账户对表进行增删查该操作。管理员只用于管理。

  2.普通用户删除表之后(不使用purge命令),表会进入回收站,闪回删除的目的就是将回收站中的表恢复到删除之前的状态。

  3.进入到回收站中的表名可以相同,但是回收站会为每个表进行唯一的标识,即recyclebin name

    

  4.普通用户通过select * from tab可以看到回收站中的表。

    

    可以查看每个表中的内容,但是表名要加上双引号。

  5.如果回收站中的两个表在删除前表名相同,则如果闪回成功,先闪回先进入回收站中的表。

  6.模板代码

            flashback table [schema.]table_name[,...n] to {[scn] | [timestamp] [[enable | disable] triggers]};

  如果想要闪回触发器,则使用enable triggers,默认不闪回触发器。

  7.闪回删除的步骤

    (1)如果没有表名冲突,则使用下面的命令就可以了。

 flashback table test to before drop;

    (2)如果有表名冲突,先闪回先进入回收站中的表。

    (3)如果当前用户下已经有了一张和回收站中同名的表,则如果不采取重命名的手段,就不能闪回。

      

    (4)闪回重命名

flashback table test to before drop rename to test1;

      

三、闪回版本查询

  1.

时间: 2024-12-17 11:58:43

【Java EE 学习第30天】【闪回】【导入导出】【管理用户安全】【分布式数据库】【数据字典】【方案】的相关文章

Java EE 学习(8):IDEA + maven + spring 搭建 web(4)- 用户管理

转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) ava EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库 记录: 通过对用户表的管理,更加深入地讲解SpringMVC的操作. 6 用户管理 既然我们

【Java EE 学习第16天】【dbcp数据库连接池】【c3p0数据库连接池】

零.回顾之前使用的动态代理的方式实现的数据库连接池: 代码: 1 package day16.utils; 2 3 import java.io.IOException; 4 import java.lang.reflect.InvocationHandler; 5 import java.lang.reflect.Method; 6 import java.lang.reflect.Proxy; 7 import java.sql.Connection; 8 import java.sql.D

Java EE学习——Quartz的Cron表达式

经历过低谷后,还是要好好学习,越失落会越来越落后. 今天写一下Cron表达式的用法,虽然是之前自己写的,也过了挺长一段时间,这次就拿出来作为回顾吧. Cron表达式是Quartz的精髓(个人觉得),比如我们想设定淘宝“秒杀”的那一秒时间,完全可以用下面的方法设置执行时间. Calendar cal = Calendar.getInstance(); //设置将要发生的时间... cal.set(Calendar.DATE, xxx); //.......常规的生成scheduler和job //

Java EE学习--Quartz基本用法

新浪博客完全不适合写技术类文章.本来是想找一个技术性的博客发发自己最近学的东西,发现博客园起源于咱江苏,一个非常质朴的网站,行,咱要养成好习惯,以后没事多总结总结经验吧.很多时候都在网上搜索别人的总结,我自己也总结些东西,或许多多少少能帮得上别人. 首先提到的是Quartz,一个开源的定期执行计划任务的框架.其实我内心好奇这个框架很久了,像那些能定时修改数据库数据,定时分配任务的功能一直觉得很神奇.心动不如行动,今天我就小小的学习了一下用法,力求言简意赅,大家都懂的我就不说了. 第一步:下载Qu

Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库

参考: https://my.oschina.net/gaussik/blog/513444 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Java EE 学习(6):IDEA + maven + spring 搭建 web(2) 5 数据库配置 下面,就要通过一个简单的例子,来介绍 SpringMVC 如何集成 Spring Data JPA(由 Hibernate JPA 提供),来进行强大的数据库访问,并通过本章节

JAVA EE 学习笔记[V1 jsp编程]

在三月初学校开设了javaee的课程,也就此展开了对javaee基础的学习.然后老师也对这次的课程有一定要求.前面的基础就为最终的作业做准备啦~ 在上学期我们学习了java相关知识,也对java se 的安装使用有了一定的认知,而java ee则是构建于java se 平台之上的一套多层的,可扩展的的网络应用. 学习java ee我们首先进行环境的搭建.无非就是使用 tomcat进行服务器的搭建和jdk环境变量配置.而IDE这方面我们选择myeclipse 2016 CI(这个编译器自带tomc

Java EE 学习(5):IDEA + maven + spring 搭建 web(1)

参考:http://www.cnblogs.com/lonelyxmas/p/5397422.html http://www.ctolib.com/docs-IntelliJ-IDEA-c--159047.html 孔老师的<SpringMVC视频教程> 记录: 本节主要完成 使用 maven 管理 spring + 项目 包,搭建 maven+spring 的 web 项目平台. 前提: 已安装并配置好 - Intellij IDEA 16.3.5 Ultimate - JDK 1.8.0_

Java EE 学习(9):IDEA + maven + spring 搭建 web(5)- 博客文章管理

转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) . 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Java EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库 Java EE 学习(8):IDEA + maven + spring 搭建 web(

Java EE学习之旅1——HeadFirstJavaEE

因为找到的实习是用Java开发的公司,所以来学习一下Java EE的知识. 首先找来了书<轻量级Java EE企业应用实战>. 啊不得不说学了Java之后直接看这个还是完全不行呢,好多名词看都没有看过啊哈哈. 首先来看看都些啥看不懂的词... 1.JSP.Servlet和JavaBean JSP和Servlet都是用在表现层的东西,而实质上JSP编译成Servlet才运行. 但Servlet开发成本太大,所以用JSP. JavaBean用来通信交换表现层和底层数据. 2.MVC和Struts