以下这个插入行的简单例子简单的描述Oracle处理事务的过程:
(1) 一个用户连接到Oracle服务器
(2)在检查了该请求的合法性之后,服务器位用户启动了一个新的专用服务器进程
(3)用户执行了一个语句把新行插入到表中
(4) Oracle检查用户的权限以保证该用户有执行插入操作的权限。如果用户的权限信息不在高速缓存中,必须从磁盘读取到高速缓存中。
(5) 如果用户有执行插入的权限,Oracle则检查用户要执行的SQL语句以前是否执行过且还是在共享池中。若是,Oracle执行此版本的SQL,否则,Oracle语法分析并执行该用户的SQL语句。然后Oracle在用户会话的PGA中创建一个私有的SQL区域。
(6)Oracle首先检查必需的数据是否已经在数据高速缓存中。若不在,则服务器进程从磁盘的数据文件中读取必需的表数据。
(7)Oracle立即在必要的地方施加行级锁,防止其他进程同时修改相同的数据。
(8)服务器将变化向量写入重做日志缓存区。
(9)服务器在数据缓冲区高速缓存中更改该表数据(插入新行)。
(10)用户提交事务,使插入成为持久的。Oracle在提交完成之后释放行级锁。
(11)日志写入进程立即将重做日志缓冲区中变化的数据吸入联机重做日志文件。
(12)服务器进程发送一条消息给客户进程,说明已经成功完成INSERT操作(如果没有成功完成该请求,它将发送消息说明操作失败。)
(13)有插入操作给表带来的变化信息并不立即写入磁盘。数据库写入程序是批量进行写入的可能要在批量写入之后。要插入的信息才能被持久化到写入磁盘数据库文件。
(1) 一个用户连接到Oracle服务器
(2)在检查了该请求的合法性之后,服务器位用户启动了一个新的专用服务器进程
(3)用户执行了一个语句把新行插入到表中
(4) Oracle检查用户的权限以保证该用户有执行插入操作的权限。如果用户的权限信息不在高速缓存中,必须从磁盘读取到高速缓存中。
(5) 如果用户有执行插入的权限,Oracle则检查用户要执行的SQL语句以前是否执行过且还是在共享池中。若是,Oracle执行此版本的SQL,否则,Oracle语法分析并执行该用户的SQL语句。然后Oracle在用户会话的PGA中创建一个私有的SQL区域。
(6)Oracle首先检查必需的数据是否已经在数据高速缓存中。若不在,则服务器进程从磁盘的数据文件中读取必需的表数据。
(7)Oracle立即在必要的地方施加行级锁,防止其他进程同时修改相同的数据。
(8)服务器将变化向量写入重做日志缓存区。
(9)服务器在数据缓冲区高速缓存中更改该表数据(插入新行)。
(10)用户提交事务,使插入成为持久的。Oracle在提交完成之后释放行级锁。
(11)日志写入进程立即将重做日志缓冲区中变化的数据吸入联机重做日志文件。
(12)服务器进程发送一条消息给客户进程,说明已经成功完成INSERT操作(如果没有成功完成该请求,它将发送消息说明操作失败。)
(13)有插入操作给表带来的变化信息并不立即写入磁盘。数据库写入程序是批量进行写入的可能要在批量写入之后。要插入的信息才能被持久化到写入磁盘数据库文件。