如何使用Oracle回滚段Oracle缺省用的是专用服务器模式,也就是说一个用户连接进程对应一个服务器的进程.
记得某大医院刚启用的时候,我们曾经试过MTS.因为听说MTS在不增加内存和CPU的情况下连接更多的客户端,结果并不是我们预期的那样.
因为我们对MTS不了解,并不是它有问题,而是它不是用来在这种情况下做这件事的.
如何在ORACLE 存储过程中设置回滚断点学习存储过程中使用断点回滚事务时,发现目前网络上存在一个问题,那就是使用断点回滚后 , 都忘记了一个很重要的事情,提交事务 。虽然使用了断点回滚,但是断点回滚不像rollBack或commit一样结束当前事务,而使用断点回滚只会回滚到声明断点的地方,之前的产生的事务仍需要提交的,如果不提交,事务一直在数据库中缓存.
Demo:
procedure doSomeThing(p_number out number) as
begin
insert into t_test_user_mingming(id,loginname,password,realname,type)
values(se_test_user_mingming_id.nextval,'xiaoming','1234','小明',1);
p_number := 1;
savepoint ps;--- 设置断点 ps
insert into t_test_info_mingming(id,pal,type,create_time,note)
values(se_test_info_id.nextval,'我想买台thinkPad 可以俺莫有钱',1,sysdate,'ceshi');
p_number := 2;
savepoint sp;----设置断点 sp
insert into t_test_agent(agent_id) values(1);---我这里此行会抛出异常 ORA-01400可以替换为下句 手动抛出一个异常
-----RAISE_APPLICATION_ERROR (-20004,'抛出的异常玩玩');
commit;
exception--捕获异常
when others then
rollback to ps;---- 如果产生异常,回滚到断点 ps
p_number :=0;
commit;--- 提交事务
end doSomeThing;
这里本人做了实验,如果在异常中不加 commit 语句,使用PL/SQL测试时,异常在缓存 , t_test_user_mingming 表中没有数据记录 。
存储过程里的事务操作:
create or replace procedure pr_mypro2(p_a in varchar2,p_b in varchar2,p_count out number)
temp varchar2(1000);/*定义临时变量*/
is
begin
select code into p_count from table1 where a=p_a; /*查询并返回值*/
temp := p_count;/*将返回值赋给临时变量*/
savepoint point1;/*保存点*/
insert into table2(a,b)values(temp,p_b); /*将临时变量值添加到新表的字段*/
savepoint point2;
insert into
exception
whenothersthen
rollback to savepoint point1;/*异常处理,保存点下面的操作都不会被执行*/
return;
end;
保存点(SAVEPOINT)是事务处理过程中的一个标志,与回滚命令(ROLLBACK)结合使用,主要的用途是允许用户将某一段处理回滚而不必回滚整个事务 。
如果定义了多个savepoint,当指定回滚到某个savepoint时,那么回滚操作将回滚这个savepoint后面的所有操作(即使后面可能标记了N个savepoint) 。
例如,在一段处理中定义了五个savepoint,从第三个savepoint回滚,后面的第四、第五个标记的操作都将被回滚,如果不使用ROLLBACK TO savepoint_name而使用ROLLBACK , 将会滚整个事务处理 。
oracle 删除数据提交怎么回滚execute执行后
可以回滚
commit提交后
【oracle如何设置回滚 oracle怎么回滚】不可以回滚
其实oracle提交数据是分两步操作的 , 第一步execute执行,第二步commit提交 。对应的pl\sql也是要先点execute执行,执行后再点commit提交 。
但是
commit提交后
可以用闪回查询恢复原来的数据
因为oracle会将近期的数据保存到快照中
如:
select
*
from
table_1
as
of
timestamp
to_timestamp('20080606
20:00:00','yyyymmdd
hh24:mi:ss');
这里'20080606
20:00:00'就是你想恢复数据到哪个时间状态
table_1是数据库的表名
这样查询到的数据就是执行更新操作之前的数据
oracle提交后如何回滚在没有做过commit或者其他会导致隐式提交的语句之前(如DDl语言), 可以执行rollback.
提交过只能用闪回或者从备份中恢复了
关于oracle如何设置回滚和oracle怎么回滚的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- 直播伴侣直播间无法投放,直播伴侣不能直播了
- 什么cpu性能最好,什么cpu性能最好手机
- 鸿蒙系统app图标怎么变色,鸿蒙系统app图标怎么变小
- 怎么把pdf变成jpg格式文件,如何把pdf变成jpg格式
- mysql高并发怎么处理 高并发场景下如何使mysql高效运行
- 电脑拓展内存好处是什么,oppo手机内存拓展是什么意思
- 解谜游戏茵,解谜游戏g
- go语言vsjava知乎 go语言和javascript
- pg删除表数据1000行,pg数据库删除表数据