码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-08-25 13:18:39      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:

一、闪回

  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                                                                                               *
 611 行出现错误:
 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                 *
 901 行出现错误:
 91 ORA-08189: 因为未启用行移动功能, 不能闪回表
 92 
 93 
 94 SQL> alter table flashback_table enabel row movement;
 95 alter table flashback_table enabel row movement
 96                             *
 971 行出现错误:
 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.

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

标签:

原文地址:http://www.cnblogs.com/kuangdaoyizhimei/p/4756674.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!