闪回冲突怎么办?

   从Oracle10开始就有闪回,这个功能多次起到力挽狂澜的作用。比如

有两个表,分别是sh1和sh2。

             

          SQL> create table sh1 (a int,b int);

表已创建。

          SQL> create table sh2 (a int,b int);

表已创建。

====================

         分别向两个表中写入数据:

SQL> insert into sh1 values (1,1);

已创建 1 行。

SQL> insert into sh1 values (2,2);

已创建 1 行。

SQL> insert into sh2 values (3,3);

已创建 1 行。

SQL> commit;

提交完成。


++++++++

此时sh1中有2行数据,sh2中有1行数据。


SQL> select * from sh1;

A B
---------- ----------
1 1
2 2

SQL> select * from sh2;

A B
---------- ----------
3 3

+++++++++++++++++++++++++==

传统的误删除表后,执行闪回sh2表的数据被找回来了。

SQL> drop table sh2;

表已删除。

SQL> select * from sh2;
select * from sh2
*
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> flashback table sh2 to before drop;

闪回完成。

SQL> select * from sh2;

A B
---------- ----------
3 3

+=============================

而如果被drop的表,重新建立了。那么在执行闪回时候就出错了。

SQL> drop table sh1;

表已删除。

SQL> create table sh1 (a int,b int);

表已创建。

SQL> insert into sh1 values (3,3);

已创建 1 行。

SQL> commit;

提交完成。

SQL> flashback table sh1 to before drop;
flashback table sh1 to before drop
*
第 1 行出现错误:
ORA-38312: 原始名称已被现有对象使用

遇到这个问题有如下解决方案。

方案1:把新建的sh1改个名字,改成sh3.再闪回sh1.

方案2:假设原始表是sh4,误删除以后。新建立了sh4,还写入了数据。那么闪回时候兼带改名字,一气呵成。

SQL> create table sh4 (a int,b int);

表已创建。

SQL> insert into sh4 values (1,1);

已创建 1 行。

SQL> commit;

提交完成。

SQL> drop table sh4;

表已删除。


SQL> create table sh4 (a int,b int);

表已创建。

SQL> insert into sh4 values (2,2);

已创建 1 行。

SQL> commit;

提交完成。

SQL> flashback table sh4 to before drop rename to sh5;

闪回完成。

SQL> select * from sh4;

A B
---------- ----------
2 2

SQL> select * from sh5;

A B
---------- ----------
1 1

方案2也是最近才在实际中用过。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值