以下例子大体上描述了Oracle进行更新(update)时操作的主要步骤。在例子所描绘的Oracle配置中,用户和相关的服务进程处在不同的计算机 中,通过网络连接 。
-
在运行Oracle的计算机上启动一个实例 (这台计算机也被称为主机 (host)或数据库服务器 (database server))。
- 运行应用程序的计算机(也被称为本地计算机 (local computer)或客户端工作站 (client workstation))中启动了用户进程 (user process)。客户端 应用程序使用与所在网络环境相匹配的Oracle网络服务驱动 与服务器建立连接。
- 数据库 服务器 也运行与网络环境相匹配的Oracle网络服务驱动 。当服务器监听到应用程序的请求后,就建立专用服务器进程为对应的用户进程提供服务。
- 用户执行SQL语句、提交事务(transaction)。例如,用户改变数据表内某一行的数据。
- 服务进程收到用户提交的语句后,先在共享池 (shared pool)中查找是否存在与此语句相同的共享SQL区(shared SQL area)。如果存在,服务进程就检查用户是否有访问所请求数据的权限 ,满足权限要求的话,就使用已有的共享SQL区来处理SQL语句。如共享SQL区不存 在,服务进程要为用户提交的SQL语句创建新的共享SQL区,用来解析、处理此语句。
- 服务进程 从数据文件 (逻辑上看就是数据表)或SGA 中获得所需的数据。
- 服务进程修改SGA中的数据。由于事务已经提交,LGWR进程 立即在重做日志文件(redo log file)中记录此事务。而DBWn进程 则在适当的时机将修改过的数据块写入磁盘。
- 如事务成功,服务进程通过网络通知应用程序。如不成功,则向应用程序提交错误信息。也就是说,服务进程在事务处理完毕后,向用户返回处理的结果或是处理出错的信息。
- 在整个过程中,还有一些未提到的后台进程 在运行,它们对整个过程进行监控,在需要时参与进来。此外数据库服务器还要管理其它用户的事务,防止请求相同数据 的事务之间产生竞争(contention)。
摘自《oralce concept》第一章“1 Introduction to the Oracle Database ”