Oracle中的各个进程要完成某个特定的任务或一组任务,每个进程都会分配内部内存(PGA内存)来完成它的任务。
Oracle实例主要有3类进程:
服务器进程就是代表客户会话完成工作的进程。应用向数据库发送的SQL语句最后就要由这些进程接收并执行。
连接(connection)就是客户进程与Oracle实例之间的一条物理路径。
会话(session)是数据库中的一个逻辑实体,客户进程可以在会话上执行SQL等。
在专用服务器模式下,客户连接和服务器进程(线程)之间会有一个一对一的映射。

-
- sys@cdb$root:orclcdb> ALTER SESSION SET CONTAINER=ORCLPDB1;
-
- Session altered.
-
- sys@cdb$root:orclcdb>
- sys@cdb$root:orclcdb>
- sys@cdb$root:orclcdb>
- sys@cdb$root:orclcdb> grant select on v_$process to SCOTT;
-
- Grant succeeded.
-
- sys@cdb$root:orclcdb> grant select on v_$session to SCOTT;
-
- Grant succeeded.
-
- sys@cdb$root:orclcdb>
-
-
- select a.pid dedicated_server, b.process clientpid
- 2 from v$process a, v$session b
- where a.addr = b.paddr
- 4 and b.sid = (select sid from v$mystat where rownum = 1);
-
- DEDICATED_SERVER CLIENTPID
- ---------------- ------------------------
- 53 123960
-
- 1 row selected.
-
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb> !/bin/ps -fp 53 123960
- UID PID PPID C STIME TTY STAT TIME CMD
- oracle 123960 123959 0 15:28 pts/5 Ssl+ 0:00 sqlplus as sysdba
-
- scott@orclpdb1:orclcdb>
数据库常驻连接池(DRCP)是连接数据库并建立会话的一种新方法。
连接只是客户进程和数据库实例之间的一条特殊线路,最常见的就是网络连接。
这条连接可能连接到一个专用服务器进程,也可能连接到调度程序。
连接(connection):连接是从客户到Oracle实例的一条物理路径。连接可以在网络上建立,或者通过IPC机制建立。通常会在客户进程与一个专用服务器或一个调度程序之间建立连接。
会话(session):会话是实例中存在的一个逻辑实体。(会话状态session state),也就是表示特定会话的一组内存中的数据结构。提到“数据库连接”时,大多数人首先想到的就是“会话”,你要在服务器中的会话上执行SQL、提交事务和运行存储过程。
- [root@MaxwellDBA ~]# su - oracle
- Last login: Fri Sep 30 15:33:22 CST 2022 on pts/6
- [oracle@MaxwellDBA ~]$ sqlplus sys/sys as sysdba
-
- SQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 30 16:07:46 2022
- Version 19.3.0.0.0
-
- Copyright (c) 1982, 2019, Oracle. All rights reserved.
-
-
- Connected to:
- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
- Version 19.3.0.0.0
-
- sys@cdb$root:orclcdb> ALTER SESSION SET CONTAINER=ORCLPDB1;
-
- Session altered.
-
- sys@cdb$root:orclcdb>
- sys@cdb$root:orclcdb>
- sys@cdb$root:orclcdb> select username,sid,serial#,server,paddr,status
- 2 from v$session
- 3 where username= USER
- 4 /
-
- USERNAME
- ----------------------------------------------------------------------------------------------------
- SID SERIAL# SERVER PADDR STATUS
- ---------- ---------- --------- ---------------- --------
- SYS
- 4 51998 DEDICATED 000000007E531340 ACTIVE
-
- SYS
- 48 3106 DEDICATED 000000007E551440 ACTIVE
-
- SYS
- 267 2932 DEDICATED 000000007E575560 INACTIVE
-
- SYS
- 271 53486 DEDICATED 000000007E56AA60 INACTIVE
-
-
- 4 rows selected.
-
- sys@cdb$root:orclcdb>
- sys@cdb$root:orclcdb>
- sys@cdb$root:orclcdb> set autotrace on statistics
- sys@cdb$root:orclcdb>
- sys@cdb$root:orclcdb> select username,sid,serial#,server,paddr,status
- 2 from v$session
- 3 where username= USER
- 4 /
-
- USERNAME
- ----------------------------------------------------------------------------------------------------
- SID SERIAL# SERVER PADDR STATUS
- ---------- ---------- --------- ---------------- --------
- SYS
- 4 51998 DEDICATED 000000007E531340 ACTIVE
-
- SYS
- 48 3106 DEDICATED 000000007E551440 ACTIVE
-
- SYS
- 267 2932 DEDICATED 000000007E575560 INACTIVE
-
- SYS
- 271 53486 DEDICATED 000000007E56AA60 INACTIVE
-
-
- 4 rows selected.
-
-
- Statistics
- ----------------------------------------------------------
- 0 recursive calls
- 0 db block gets
- 0 consistent gets
- 0 physical reads
- 0 redo size
- 1104 bytes sent via SQL*Net to client
- 445 bytes received via SQL*Net from client
- 2 SQL*Net roundtrips to/from client
- 0 sorts (memory)
- 0 sorts (disk)
- 4 rows processed
-
- sys@cdb$root:orclcdb>
1、什么时候使用专用服务器
在专用服务器模式中,客户连接与服务器进程之间存在一种一对一的映射。
专用服务器是Oracle的推荐配置,它能很好地扩展。只要服务器有足够的硬件(CPU和RAM)来应对系统所需的专用服务器进程个数,专用服务器甚至可以用于数千条并发连接。
2、什么时候使用共享服务器
共享服务器的设置和配置尽管并不困难,但是比设置专用服务器要多一些。
3、共享服务器的潜在好处
共享服务器主要为我们做3件事:

这是使用共享服务器最主要的原因之一:它能减少所需的内存量。共享服务器确实能减少内存需求。共享服务器配置中对SGA的需求通常很大。这个内存一般要预分配,从而只能由数据库实例使用。
4、DRCP
DRCP非常适用于API本身没有足够连接池的客户进程。
Oracle实例包括两部分: SGA和一组后台进程。
后台进程执行保证数据库运行所需的实际维护任务。
可以使用一个V$视图查看所有可能的Oracle后台进程。确定你的系统中正在使用哪些后台进程。
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb> select paddr,name,description
- 2 from v$bgprocess
- 3 order by paddr desc
- 4 /
-
- PADDR NAME DESCRIPTION
- ---------------- ----- ----------------------------------------------------------------
- 000000007E578020 M002 MMON slave class 1
- 000000007E574000 M005 MMON slave class 1
- 000000007E571540 W007 space management slave pool
- 000000007E56FFE0 W006 space management slave pool
- 000000007E56EA80 W005 space management slave pool
- 000000007E569500 W004 space management slave pool
- 000000007E566A40 W003 space management slave pool
- 000000007E5654E0 Q003 QMON MS
- 000000007E563F80 P003 Parallel query slave
- 000000007E562A20 P002 Parallel query slave
- 000000007E5614C0 CJQ0 Job Queue Coordinator
- 000000007E55EA00 Q001 QMON MS
- 000000007E55D4A0 QM02 QMON MS
- 000000007E55BF40 AQPC AQ Process Coord
- 000000007E55A9E0 W002 space management slave pool
- 000000007E559480 TT02 Redo Transport
- 000000007E557F20 TT01 Redo Transport
- 000000007E5569C0 TT00 Redo Transport
- 000000007E555460 P001 Parallel query slave
- 000000007E553F00 P000 Parallel query slave
- 000000007E5529A0 M003 MMON slave class 1
- 000000007E54FEE0 M004 MMON slave class 1
- 000000007E54E980 TMON Transport Monitor
- 000000007E54D420 S000 Shared servers
- 000000007E54BEC0 D000 Dispatchers
- 000000007E54A960 MMON Manageability Monitor Process
- 000000007E549400 MMNL Manageability Monitor Process 2
- 000000007E549400 FENC IOServer fence monitor
- 000000007E547EA0 PXMN PX Monitor
- 000000007E546940 W001 space management slave pool
- 000000007E5453E0 LREG Listener Registration
- 000000007E543E80 W000 space management slave pool
- 000000007E542920 RECO distributed recovery
- 000000007E5413C0 SMCO Space Manager Process
- 000000007E53FE60 LG01 Log Writer Slave
- 000000007E53E900 SMON System Monitor Process
- 000000007E53D3A0 LG00 Log Writer Slave
- 000000007E53BE40 CKPT checkpoint
- 000000007E53A8E0 LGWR Redo etc.
- 000000007E539380 DBW0 db writer process 0
- 000000007E537E20 DIA0 diagnosibility process 0
- 000000007E5368C0 PMAN process manager
- 000000007E535360 SVCB services background monitor
- 000000007E533E00 VKRM Virtual sKeduler for Resource Manager
- 000000007E5328A0 SCMN
- 000000007E531340 OFSD Oracle File Server BG
- 000000007E52FDE0 DIAG diagnosibility process
- 000000007E52E880 SCMN
- 000000007E52D320 GEN1 generic1
- 000000007E52BDC0 DBRM DataBase Resource Manager
- 000000007E52A860 MMAN Memory Manager
- 000000007E529300 GEN0 generic0
- 000000007E527DA0 VKTM Virtual Keeper of TiMe process
- 000000007E526840 PSP0 process spawner 0
- 000000007E5252E0 CLMN process cleanup
- 000000007E523D80 PMON process cleanup
- 00 ABMR Auto BMR Background Process
- 00 ACFS ACFS CSS
- 00 ACMS Atomic Controlfile to Memory Server
- 00 AMB1 ASM Background 1
- 00 AMB2 ASM Background 2
- 00 AMB3 ASM Background 3
- 00 ARB0 ASM Rebalance 0
- 00 ARB1 ASM Rebalance 1
- 00 ARB2 ASM Rebalance 2
- 00 ARB3 ASM Rebalance 3
- 00 ARB4 ASM Rebalance 4
- 00 ARB5 ASM Rebalance 5
- 00 ARB6 ASM Rebalance 6
- 00 ARB7 ASM Rebalance 7
- 00 ARB8 ASM Rebalance 8
- 00 ARB9 ASM Rebalance 9
- 00 ARBA ASM Rebalance 10
- 00 ARC0 Archival Process 0
- 00 ARC1 Archival Process 1
- 00 ARC2 Archival Process 2
- 00 ARC3 Archival Process 3
- 00 ARC4 Archival Process 4
- 00 ARC5 Archival Process 5
- 00 ARC6 Archival Process 6
- 00 ARC7 Archival Process 7
- 00 ARC8 Archival Process 8
- 00 ARC9 Archival Process 9
- 00 ARCa Archival Process 10
- 00 ARCb Archival Process 11
- 00 ARCc Archival Process 12
- 00 ARCd Archival Process 13
- 00 ARCe Archival Process 14
- 00 ARCf Archival Process 15
- 00 ARCg Archival Process 16
- 00 ARCh Archival Process 17
- 00 ARCi Archival Process 18
- 00 ARCj Archival Process 19
- 00 ARCk Archival Process 20
- 00 ARCl Archival Process 21
- 00 ARCm Archival Process 22
- 00 ARCn Archival Process 23
- 00 ARCo Archival Process 24
- 00 ARCp Archival Process 25
- 00 ARCq Archival Process 26
- 00 ARCr Archival Process 27
- 00 ARCs Archival Process 28
- 00 ARCt Archival Process 29
- 00 ASMB ASM Background
- 00 BW36 db writer process 36
- 00 BW37 db writer process 37
- 00 BW38 db writer process 38
- 00 BW39 db writer process 39
- 00 BW40 db writer process 40
- 00 BW41 db writer process 41
- 00 BW42 db writer process 42
- 00 BW43 db writer process 43
- 00 BW44 db writer process 44
- 00 BW45 db writer process 45
- 00 BW46 db writer process 46
- 00 BW47 db writer process 47
- 00 BW48 db writer process 48
- 00 BW49 db writer process 49
- 00 BW50 db writer process 50
- 00 BW51 db writer process 51
- 00 BW52 db writer process 52
- 00 BW53 db writer process 53
- 00 BW54 db writer process 54
- 00 BW55 db writer process 55
- 00 BW56 db writer process 56
- 00 BW57 db writer process 57
- 00 BW58 db writer process 58
- 00 BW59 db writer process 59
- 00 BW60 db writer process 60
- 00 BW61 db writer process 61
- 00 BW62 db writer process 62
- 00 BW63 db writer process 63
- 00 BW64 db writer process 64
- 00 BW65 db writer process 65
- 00 BW66 db writer process 66
- 00 BW67 db writer process 67
- 00 BW68 db writer process 68
- 00 BW69 db writer process 69
- 00 BW70 db writer process 70
- 00 BW71 db writer process 71
- 00 BW72 db writer process 72
- 00 BW73 db writer process 73
- 00 BW74 db writer process 74
- 00 BW75 db writer process 75
- 00 BW76 db writer process 76
- 00 BW77 db writer process 77
- 00 BW78 db writer process 78
- 00 BW79 db writer process 79
- 00 BW80 db writer process 80
- 00 BW81 db writer process 81
- 00 BW82 db writer process 82
- 00 BW83 db writer process 83
- 00 BW84 db writer process 84
- 00 BW85 db writer process 85
- 00 BW86 db writer process 86
- 00 BW87 db writer process 87
- 00 BW88 db writer process 88
- 00 BW89 db writer process 89
- 00 BW90 db writer process 90
- 00 BW91 db writer process 91
- 00 BW92 db writer process 92
- 00 BW93 db writer process 93
- 00 BW94 db writer process 94
这个视图中PADDR不是00的行都是系统配置和运行的进程(线程)
有一个中心(focused)用途的Oracle后台进程。

后台启动的后台进程:
- scott@orclpdb1:orclcdb> select paddr,name,description
- 2 from v$bgprocess
- 3 where paddr <> '00'
- 4 order by paddr desc
- 5 /
-
- PADDR NAME DESCRIPTION
- ---------------- ----- ----------------------------------------------------------------
- 000000007E578020 M002 MMON slave class 1
- 000000007E574000 M005 MMON slave class 1
- 000000007E571540 W007 space management slave pool
- 000000007E56FFE0 W006 space management slave pool
- 000000007E56EA80 W005 space management slave pool
- 000000007E569500 W004 space management slave pool
- 000000007E566A40 W003 space management slave pool
- 000000007E5654E0 Q003 QMON MS
- 000000007E563F80 P003 Parallel query slave
- 000000007E562A20 P002 Parallel query slave
- 000000007E5614C0 CJQ0 Job Queue Coordinator
- 000000007E55EA00 Q001 QMON MS
- 000000007E55D4A0 QM02 QMON MS
- 000000007E55BF40 AQPC AQ Process Coord
- 000000007E55A9E0 W002 space management slave pool
- 000000007E559480 TT02 Redo Transport
- 000000007E557F20 TT01 Redo Transport
- 000000007E5569C0 TT00 Redo Transport
- 000000007E555460 P001 Parallel query slave
- 000000007E553F00 P000 Parallel query slave
- 000000007E5529A0 M003 MMON slave class 1
- 000000007E54FEE0 M004 MMON slave class 1
- 000000007E54E980 TMON Transport Monitor
- 000000007E54D420 S000 Shared servers
- 000000007E54BEC0 D000 Dispatchers
- 000000007E54A960 MMON Manageability Monitor Process
- 000000007E549400 MMNL Manageability Monitor Process 2
- 000000007E549400 FENC IOServer fence monitor
- 000000007E547EA0 PXMN PX Monitor
- 000000007E546940 W001 space management slave pool
- 000000007E5453E0 LREG Listener Registration
- 000000007E543E80 W000 space management slave pool
- 000000007E542920 RECO distributed recovery
- 000000007E5413C0 SMCO Space Manager Process
- 000000007E53FE60 LG01 Log Writer Slave
- 000000007E53E900 SMON System Monitor Process
- 000000007E53D3A0 LG00 Log Writer Slave
- 000000007E53BE40 CKPT checkpoint
- 000000007E53A8E0 LGWR Redo etc.
- 000000007E539380 DBW0 db writer process 0
- 000000007E537E20 DIA0 diagnosibility process 0
- 000000007E5368C0 PMAN process manager
- 000000007E535360 SVCB services background monitor
- 000000007E533E00 VKRM Virtual sKeduler for Resource Manager
- 000000007E5328A0 SCMN
- 000000007E531340 OFSD Oracle File Server BG
- 000000007E52FDE0 DIAG diagnosibility process
- 000000007E52E880 SCMN
- 000000007E52D320 GEN1 generic1
- 000000007E52BDC0 DBRM DataBase Resource Manager
- 000000007E52A860 MMAN Memory Manager
- 000000007E529300 GEN0 generic0
- 000000007E527DA0 VKTM Virtual Keeper of TiMe process
- 000000007E526840 PSP0 process spawner 0
- 000000007E5252E0 CLMN process cleanup
- 000000007E523D80 PMON process cleanup
-
- 56 rows selected.
-
- scott@orclpdb1:orclcdb>
1.PMON:进程监视器
Process Monitor 负责在出现异常中止 的连接之后完成清理。
2.SMON:系统监视器
SMON进程,系统监视器(System Monitor)
SMON所做的工作包括:
3.RECO:分布式数据库恢复
4.CKPT:检查点进程
建立检查点主要是DBWin的任务。
CKPT只是更新数据文件的文件首部,以辅助真正建立检查点的进程(DBWn)
5.DBWn:数据库块写入器
6.LGWR日志写入器
LGWR进程负责将SGA中重做日志缓冲区的内容刷新输出到磁盘。如果满足以下某个条件,就会做这个工作:
7.ARCn:归档进程
当LGWR将在线重做日志文件填满时,就将其复制到另一个位置。
8.DIAG:诊断性进程
专用于RAC环境
利用新增的ADR(高级诊断库,Advanced Diagnostic Reoisitory),它会负责监视实例的整体状况,而且会捕获处理实例失败时所需要的信息。
9.FBDA:闪回数据归档进程。
10.DBRM:数据库资源管理器进程。
11.GENO:通用任务执行进程。
下面的进程是使用ASM的数据库实例所特有的:
ASMB进程在使用了ASM的数据库实例中运行。它负责与管理存储的ASM实例通信、向ASM实例提供更新的统计信息。
负责处理重新平衡需求即重新分布负载的请求
以下进程是RAC环境所特有的,如果不是RAC环境,则看不到这些进程。
以下是大多数单实例或RAC实例常见的后台进程