ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL语句内部处理机制

SQL语句内部处理机制

原创 Linux操作系统 作者:houdan522 时间:2008-04-24 09:44:26 0 删除 编辑

引自www.itpub.net论坛

Oracle中,一个Delete操作的流程

删除(DELETE)

1.Oracle
读Block到Buffer Cache(如果该Block在Buffer中不存在)
2.
在redo log buffer中记录delete操作的细节
3.
在相应回滚段段头的事务表中创建一个undo条目
4.
把将要删除的记录创建前镜像,存放到Undo Block中
5.
在Buffer Cache中的相应数据块上删除记录,并且标记相应的数据块为Dirty

提交(COMMIT)
1.Oracle
产生一个SCN
2.
在回滚段事务表中标记该事务状态为commited
3.LGWR Flush Log Buffer
到日志文件
3.
如果此时数据块仍然在Buffer Cache中,那么SCN将被记录到Block Header上,这被称为快速提交(fast commit)
4.
如果dirty block已经被写回到磁盘,那么下一个访问这个block的进程将会自回滚段中获取该事务的状态,确认该事务被提交。然后这个进程获得提交SCN并写回到Block Header上。这被称为延迟块清除(delayed block cleanout)。

 

UPDATE语句的完成过程

1
,用户提交一个update语句
2
,server process检查内存缓存
      i
如果没有有效内存空间,启动DBWR,将缓存中未写入磁盘的脏数据块写入
      ii
如果有有效空间,从磁盘读入数据
3
,在缓存内更新数据
    i
申请一个回滚段入口,将旧数据写入回滚段
    ii
加锁更新数据
    iii
并同时将修改记录在Redo log buffer 中
4
,用户提交一个Commit
   i SCN
增加
   ii
将Redo log buffer 写入Redo log file
   iii
告诉用户 Commit完成

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8720638/viewspace-250311/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-04-16

  • 博文量
    16
  • 访问量
    19012