oracle已提交的数据怎么回滚

oracle已提交的数据怎么回滚,第1张

1、首先oracle已提交的数据是可以使用闪回功能来找回数据的。

2、其次要先确定提交的数据的大体时间。

3、最后点击闪回按键,选择重新执行,就可以选择提交的数据信息进行闪回了。

--创建存储过程

alter proc proc_aa_aa1

(@id int,@name varchar(255) ,@sex char(2))

as

  --创建事务

  begin  Transaction tran_charge

  --定义变量记录错误

  declare @reeSum int

  set @reeSum=0

  --尝试执行sql语句

  begin try

  insert into aa(id,name,sex) VALUES ('1','as','男')

  set @reeSum=@reeSum+@@ERROR

--@@error当前一个语句遇到错误,则返回错误号,否则返回0。需要注意的是@ERROR在每一条语句执行后会被立刻重置

  insert into aa1(id,name,sex) VALUES ('1','as','男女')

print @@ERROR

  set @reeSum=@reeSum+@@ERROR

  end try

  begin catch

  --打印错误信息

  print '错误编号:'+convert(varchar,error_number())+'错误消息'+error_message()

print  @reeSum

  set @reeSum=@reeSum+@@ERROR

  end catch

  print '111'

  print @reeSum

  if(@reeSum>0)--有错误

    rollback Transaction tran_charge --回滚事务

    else

    commit Transaction tran_charge--提交事务

  --通过调用存储过程,给相应的参数,

  exec proc_aa_aa1'2','1','3'

@@ROWCOUNT    //返回

@@ERROR    //返回错误码

insert into aa(id,name,sex) VALUES ('1','as','男')

insert into aa1(id,name,sex) VALUES ('1','as','男女')

delete from aa

delete from aa1

select * from aa

select * from aa1

1.

在同一事务条件下,回滚和不提交,表现是一样的

但是还有些差别

事务处理,是将 *** 作事件交给数据库(模拟)运行,直到commit *** 作,才使得修改实际产生效果,你可以看做是未提交事务都是处于一个临时库中进行

回滚是对于同一个事务,如果产生了错误,那么取消这个临时库中的 *** 作,不对实际数据产生影响

最主要的区别在于,如果不回滚,这些临时 *** 作会持续到这个个connection结束为止,也就是虽然你看不到,但是临时库的 *** 作依然存在,而回滚是即时生效,其实都是回滚了,只是时间点的不一样

2.

我说你在开玩笑吧。没有提交事务并不代表你对数据库的改变不存在,如果是脏读的隔离层级你修改数据到提交完成前的变更其他访问者也是可以看到的。只有你提交后这部分修改才确认不会变更而已,哪怕设定了其他隔离级别也可以看到了。

如果你不回滚,那么线程就停在哪里搁着?制造出数据库死链放着不管直到数据库认为这个连接超时自动断开并自动回滚?

ISOLATION_READ_UNCOMMITTED:允许读取其他并发事务还未提交的更新,会导致事务之间的3个缺陷发生,这是速度最快的一个隔离级别,但同 时它的隔离级别也是最低


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6637965.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存