安装Oracle数据库后,系统里不会出现一个名为“Oracle”的独立程序,而是冒出一群后台服务进程协同工作。核心答案是:Oracle安装完成后,主要产生三类服务器组件数据库实例进程(Windows下表现为OracleService开头的服务)、监听器服务(TNSListener),以及若干辅助管理进程。
oracle安装完成后有哪几个服务
很多初次接触Oracle的DBA会犯一个错误:把数据库软件装完,就以为大功告成,Oracle的体系结构决定了它需要多个服务同时运行,才能完成“客户端连接→SQL执行→数据落盘”这条完整链路。
Windows下的服务列表:三类角色分工
以Windows Server上部署Oracle 19c为例,打开服务管理器(services.msc),你会看到一堆带Oracle前缀的服务,把这些服务按职责拆解,其实就三类。
第一类:实例核心服务(必须启动)
- OracleServiceORCL:这是数据库实例的主服务,后缀ORCL是安装时指定的实例名,它对应Linux下的
pmon和smon等后台进程,负责管理内存结构(SGA、PGA)和数据文件读写。 - 如果实例名不同,服务名也会变,比如实例名设为ORCL2,那服务就是OracleServiceORCL2,这个服务停止,等于数据库彻底关机。
第二类:网络监听服务(必须启动)
- OracleOraDB19Home1TNSListener:也就是监听器服务,中间那段
OraDB19Home1是Oracle家目录名,不同版本和安装路径会有差异,它负责接收客户端的远程连接请求,然后转发给数据库实例。
第三类:辅助服务(按需启动)
- OracleVssWriterORCL:配合Windows卷影复制功能,做备份时用。
- OracleJobSchedulerORCL:调度定时任务,比如自动执行维护作业。
- OracleMTSRecoveryService:Microsoft事务服务器集成恢复服务,只有在部署.NET应用和MTS时才有意义。
- OracleOraDB19Home1ClrAgent:支持.NET CLR自定义过程,纯Oracle环境用不上。
Linux后台进程:看不到“服务”字样的运行实体
如果跑在Linux和Unix环境,用ps -ef | grep ora_查看进程,会看到一大堆ora_开头的进程,它们是数据库实例的后台进程,这里没有Windows那种“Service”后缀,但功能一一对应。
必须存在的核心进程如下。
ora_pmon_ORCL:进程监视器,负责恢复崩溃的进程和清理共享内存。ora_smon_ORCL:系统监视器,负责实例恢复和临时段清理。ora_dbwr_ORCL:数据库写进程,把脏数据写回磁盘。ora_lgwr_ORCL:日志写进程,把重做日志写入联机日志文件。ora_ckpt_ORCL:检查点进程,同步数据文件和控制文件的检查点信息。ora_reco_ORCL:分布式事务恢复进程。
此外还有一组管理类进程,比如ora_mmon、ora_mmnl(自动负载信息库相关),ora_psp0(进程生成器),这些是扩展功能所需,判断实例是否健康,最简单的方法就是看pmon和smon在不在。
监听器是独立的一条线
监听器并不是数据库实例的进程,它是一个独立运行的程序,在Windows下是一个服务;在Linux下用lsnrctl status命令查看状态,进程名通常叫tnslsnr,它监听1521端口(默认),握手协议、数据转发全由它负责,装完数据库,必须确认监听器已经启动,否则客户端连报ORA-12541错误。
oracle数据库启动哪些服务要开启
这个问题在数据库安装论坛里常年稳居热搜,回答前先厘清一个概念:Oracle服务启动策略,没有“越多越好”这种说法,而是“够用就好”,服务开得太多,浪费系统资源,也让开机时间变长。
最小启动集:两个服务足矣
绝大多数场景下,一台单机版Oracle数据库,只需要两个服务就能正常对外提供数据库服务。
- OracleServiceORCL(核心实例)
- OracleOraDB19Home1TNSListener(监听器)
把这两个服务启动,客户端通过sqlplus scott/tiger@//服务器IP:1521/ORCL就能连上,其他辅助服务全部设为手动启动,等真正需要对应功能时再拉起,这是行业共识认为最合理的方式。
什么时候需要额外启动辅助服务
- 要跑Oracle自带备份恢复工具,且需要Windows卷影复制支持,就启动
OracleVssWriterORCL。 - 要使用Enterprise Manager的数据库控制台功能,需要启动对应版本的管理控制台服务(11g中叫
OracleDBConsole,19c已逐渐被云控替代)。 - 要调.NET程序调用Oracle存储过程,才需要启动
ClrAgent和MTSRecoveryService。
服务启动顺序有讲究
先启动监听器,再启动实例服务,这是实践坑总结出来的顺序,因为监听器启动时要扫描注册信息,如果实例先启动,监听器后启动,有些老版本需要手动注册实例到监听器,现在Oracle 19c默认支持动态注册,但先监听后实例仍然是最稳妥的做法。
oracle windows服务怎么设置手动启动
把服务设为手动启动,不只是改个下拉框那么简单,涉及数据库自动启动策略的问题,系统重启后,如果Oracle服务都是手动启动,数据库不会自动就绪,需要管理员手动拉起。主动设置手动,是为了配合集群管理软件或运维脚本统一控制启停顺序。
图形界面操作路径
- 按
Win + R,输入services.msc回车。 - 找到
OracleServiceORCL,右键选属性。 - 启动类型下拉框选“手动”,点击应用和确定。
- 对
OracleOraDB19Home1TNSListener重复同样操作。
命令行批处理方案
运维人员更偏好用命令统一管理,管理员身份打开CMD,依次执行:
sc config OracleServiceORCL start= demand
sc config OracleOraDB19Home1TNSListener start= demand
demand表示手动,auto表示自动,disabled表示禁用。
随后系统重启后,数据库不再自动启动,此时用net start OracleServiceORCL手动拉起实例,再执行net start OracleOraDB19Home1TNSListener启动监听器。注意顺序不能反过来,否则监听器注册不到实例信息。
Linux下的等价操作
Linux没有Windows服务这种概念,Oracle的启停靠Oracle用户执行命令,设置开机自动启动,常规做法是把dbstart脚本加入rc.local,但生产环境更推荐用systemctl管理自定义unit服务,手动启动数据库的命令是:
sqlplus / as sysdba
SQL> startup
监听器启动:
lsnrctl start
这条规律值得记住:Windows下凡涉及服务启动,关注services.msc中两个核心服务的状态;Linux下凡涉及数据库启动,关注系统进程列表中的pmon和监听器的tnslsnr进程。
服务异常排查:启动失败的常见原因
Oracle服务启动失败,通常是三个层面的问题,按概率排序如下。
端口被占:1521被抢
监听器启动失败,首要检查1521端口是否被其他程序占用,Windows下执行:
netstat -ano | findstr 1521
看到PID后,去任务管理器查进程名,经常跟Oracle抢端口的程序包括Weblogic、Tomcat和某些配置了其他服务的Java进程,解决方法是改掉占用方端口,或者修改Oracle监听配置。
实例服务启动到一半就退
这种情况多发生在OracleService服务启动后,不到几秒钟就自动停止,打开事件查看器,看到错误码通常是ORA-27102或ORA-00020,前者是共享内存设置过大系统分配不出内存,后者是进程数超上限,行业共识里,这类问题多半出在数据库初始化参数SGA_TARGET或PROCESSES配置不当,修改初始化参数然后重启。
监听器起来但数据库连不上
lsnrctl status能看到服务,但客户端连接报ORA-12514,这类问题多数情况下是实例没有完成动态注册,原因来自实例服务启动时,LOCAL_LISTENER参数指向的地址不对,检查tnsnames.ora里的监听地址和实例中local_listener参数是否一致,常见路径是:
SQL> show parameter local_listener;
Q&A:oracle服务相关高频疑问
Q1:安装Oracle后电脑变卡,哪些服务可以直接禁用?
只要数据库不对外提供连接,只留OracleService和OracleMTSRecoveryService等其余服务全部停止,将来想用再动手启动,不需要重装。需要留意的是禁用OracleVssWriter会影响备份软件的卷影复制功能,有备份需求则不要禁用。
Q2:重装数据库后发现旧服务和新服务同时存在怎么办?
重装时选择了不同的Oracle家目录或实例名,就会留下旧服务,推荐用工具oradim.exe -delete -sid 旧实例名删除废弃实例服务,执行前请确认旧实例中的数据确实没有价值,此操作不可恢复。
Q3:监听器服务重启会影响正在跑的数据库会话吗?
不会,监听器只负责建立新连接,已建立的连接不经过它传输数据,重启监听器只让正在尝试连接的新客户端短暂报错,对已有事务的影响为零,这一点和数据库实例服务重启完全不同,实例服务重启会直接中断所有会话。
Oracle服务的本质是“分工明确的进程集合”,核心实例管数据,监听器管网络,其他功能各自独立,只要把握住这两个核心服务,数据库的启停和排障思路就会非常清晰。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/oracle%e8%a3%85%e5%ae%8c%e6%9c%89%e5%93%aa%e4%ba%9b%e6%9c%8d%e5%8a%a1%e5%99%a8%ef%bc%8coracle%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%80%8e%e4%b9%88%e9%80%89%ef%bc%9f/


