oracle  进程/线程模式 - 图1
显示了使用专用服务器连接的系统全局区域(SGA)和后台进程。对于每个用户连接,客户端进程运行该应用程序。此客户端进程与运行数据库代码的专用服务器进程不同。每个客户端进程都与其自己的服务器进程相关联,该进程具有自己的程序全局区域(PGA)

多进程和多线程Oracle数据库系统

多进程Oracle数据库(也称为多用户Oracle数据库)使用多个进程来运行Oracle数据库代码的不同部分以及用户的其他Oracle进程 - 每个连接用户的一个进程或多个用户共享的一个或多个进程。
大多数数据库都是多用户,因为数据库的主要优点是同时管理多个用户所需的数据。数据库实例中的每个进程都执行特定的作业。通过将数据库和应用程序的工作分成多个进程,多个用户和应用程序可以同时连接到实例,同时系统提供良好的性能。
在早于Oracle Database 12c的版本中,Oracle进程未在UNIX和Linux系统上作为线程运行。从Oracle Database 12c开始,多线程Oracle数据库模型使Oracle进程能够在单独的地址空间中作为操作系统线程执行。当Oracle数据库12c的安装,数据库在处理模式下运行。必须将THREADED_EXECUTION初始化参数设置为TRUE以线程模式运行数据库。在线程模式下,UNIX和Linux上的一些后台进程作为进程运行(每个进程包含一个线程),而剩余的Oracle进程作为进程内的线程运行。
在以线程模式运行的数据库中,PMON和DBW可能作为操作系统进程运行,而LGWR和CMON可能在单个进程中作为线程运行。两个前台进程和并行执行(PX)服务器进程可能在第二个操作系统进程中作为线程运行。第三个操作系统进程可能包含多个前台线程。因此,“Oracle进程”并不总是意味着“操作系统进程”。

  1. alter system set threaded_execution=true scope=spfile;
  2. 注意:
  3. THREADED_EXECUTION初始化参数设置为TRUE,不支持的操作系统认证。
  4. 另外在操作系统启动时oracle会自启动

V$PROCESS对于连接到数据库实例的每个Oracle进程,该视图都包含一行。例如,您可以在SQL * Plus中运行以下查询以获取每个进程的操作系统进程ID和操作系统线程ID:

  1. SELECT SPID, STID, PROGRAM FROM V$PROCESS ORDER BY SPID;