度量快速开发平台-专业、快速的软件定制快开平台
标题:
oracle 事务与commit和rollback
[打印本页]
作者:
fteair
时间:
2020-2-3 18:06
作者:
张兴康
时间:
2020-2-6 14:01
fteair 发表于 2017-3-3 18:06
啊呀,脑袋上好大个包
作者:
张兴康
时间:
2020-7-21 13:51
标题:
oracle 事务与commit和rollback
事务:从第一条可执行的
SQL
语句遇到如下这些情况表示一个事务的结束与完成。
1
、遇到
commit
。
2
、遇到
rollback
。
3
、执行
create
、
drop
、
rename
、
alter
等
DML
语句。
4
、正常的退出
SQL*PLUS
程序(称为隐式提交)好像需要
AUTOCOMMIT
设置值。
5
、
SQL
语句执行出错,
oracle
将自动回滚所有操作(称为隐式回滚)。
第二个事务的开始:一个事务完成后的第一条可执行语句即表示另一个事务的开始。
commit
语句:
事务完成前
oracle
将发生如下事件
1
、
Oracle
在
SGA
撤销段缓冲区中生成撤销记录(撤销段在撤销表空间中,撤销记录记录着旧值)。
2
、
Oracle
在
SGA
重做日志缓冲区中生成重做日志项。
3
、
Oracle
修改数据库缓冲区中的数据。
事务完成时
oracle
将发生如下事件
1
、事务的重做日志项被标记系统唯一变更号
SCN
。
2
、日志写进程将重做日志缓冲区中的事务日志和
SCN
写入到重做日志。
3
、释放
Oracle
持有的锁,事务标记为完成。
rollback
语句:
未提交的事务,可以使用
rollback
撤销或回滚
SQL
对事务做出的所有更改。回滚之后的事务被标记为完成。
可以实现书签式的回滚(术语为:保留点
savepoint
)。例,在我操作事务时生成了
A\B\C
三个书签,那么继续操作的时候
SQL
出错了,那么
oracle
将自动回滚到书签
C
(称为语句级回滚),此时不像正常回滚(也就是不使用
savepoint
方式的回滚)那样事务被标记为完成,而是标记未完成则可继续执行。
oracle
的死锁发生在两个事务的
SQL
抢占同一个资源时,那么
oracle
回滚其中的一个事务语句来解决死锁。
作者:
张兴康
时间:
2020-7-21 13:51
作者:
陈晓龙
时间:
2020-7-21 14:09
作者:
陈晓龙
时间:
2020-7-21 14:09
作者:
陈晓龙
时间:
2020-7-21 14:09
作者:
张兴康
时间:
2020-7-22 13:38
陈晓龙 发表于 2017-2-21 14:09
又回复三个
欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/)
Powered by Discuz! X3.2