What did oracle do when transaction happens? (from Oracle reference book,翻译+个人理解)
1.
Transaction
发生在第一个可执行的
SQL (DML or DDL).
2.
Transaction
开始后
, Oracle
会
:
分配可用的
undo tablespace
或
rollback segment
来记录回滚的入口
(
新的
transaction
发生
).
3.
Transaction
何时结束
?
a)
Commit or rollback
语句
(
注意
:
单字的
rollback only).
b)
DDL
语句结束
(
如
create, alter, drop etc).
c)
用户断开连接
. Oracle
会自动提交(
设置
auto commit
参数
)
d)
用户进程异常中止
. (
强制
)
4.
Commit transaction,
a)
在修改的数据
commit
之前
, oracle
会
i.
在
SGA
的存储
rollback segment
数据缓冲区中
(
block buffer cache)
生成了
rollback segment
块
.rollback
信息包含了
transaction
的
SQL
所改变的旧数据
(
快照
).
ii.
在
SGA
的
redo log buffer
中生成了
redo log entries. Redo log
的记录包含了数据块和回滚块的变化
.
iii.
这些变化会被存储到
SGA
的数据缓冲区
(data buffer),
在提交之前可能会写入磁盘
(
由
DBWn
进程和
Buffer cache
设置以及
LRU
算法决定何时去写
).
b)
在数据
commit
后
, Oracle
会
i.
相关联的
rollback segment
会记录提交事件
, oracle
分配
SCN
并记录
.
ii.
LGWR
进程会将
redo log
的
entries (SGA redo log buffer)
写入
online redo log file,
同时将
SCN
写入
.
iii.
Oracle
释放行级或者表级锁.
iv.
Oracle
标记该
transaction
结束
.