首页 > 解决方案 > 用于 Oracle DB 的 Solaris SMF 可以,但对于侦听器则不行。SMF 方法如何在 svcadm 下工作,但在失败时不重新启动服务?

问题描述

我有 2 个关于 Solaris SMF 的问题。(我是 SMF 新手。)

我按照https://docs.oracle.com/cd/E37838_01/html/E61677/odbstartstop.html在 SMF 中设置了 Oracle RDBMS 服务

数据库部分完全按预期工作,因此我添加了一个侦听器作为另一个服务实例,因为方法脚本有一个“侦听器”选项作为参数而不是“db”,并且将运行 alsnrctl start ${LISTENER} 而不是使用sqlplus来访问然后启动或停止数据库实例。

服务的svcadm enablesvcadm disable按预期启动和停止侦听器。问题是框​​架会感知是否lsnrctl正在运行,但如果它已停止,则不会重新启动它。见下文:

svc:/site/oracle/db/oracle12lsnr:LISTENER4 (?)
 State: maintenance since May 21, 2020 03:25:39 PM BST
Reason: Method failed.
   See: http://support.oracle.com/msg/SMF-8000-8Q
   See: /var/svc/log/site-oracle-db-oracle12lsnr:LISTENER4.log
Impact: This service is not running.

-原因:方法失败。- 与通过svcadm enable(或disable)调用该方法表明该方法工作正常这一事实不一致。

进一步调查 - 我从 root 杀死了lsnrctl进程并从svcs -Lv得到了这个

[ May 22 14:13:30 Executing stop method ("/lib/svc/method/svc-oracle12-database lsnr stop LISTENER4"). ]
LSNRCTL for Solaris: Version 12.1.0.2.0 - Production on 22-MAY-2020 14:13:30
Copyright (c) 1991, 2016, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=orahost.some.domain)(PORT=1521)))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Solaris Error: 146: Connection refused
[ May 22 14:13:30 Method "stop" exited with status 95. ]

所以第一个问题已经改变,现在是:为什么它会运行 stop 方法?该服务的db版本在数据库服务宕机时运行start方法。

Q1 的答案:服务框架运行 stop 方法,然后运行 ​​start 方法。一旦建立起来,重新审视方法脚本就会发现一个缺陷。如果无法联系到 tnslsnr 进程,则在 stop 方法中退出错误。(逻辑失败。如果 tnslsnr 进程被杀死,您将无法测试与它的连接!)

老实说,我正在努力处理大量信息。我目前正在阅读上面 URL 的 pdf 版本。我在这里快速浏览了 Moellenkamp 的博客http://blog.moellenkamp.org/archives/18-Auditing-a-single-SMF-service-revisted.html但我还没有实现该审计服务 - 假设它会无论如何帮助。如果有人对为什么这不起作用有任何想法,我将不胜感激。

第二个问题是这样的:

在示例中,清单存储在/lib/svc/manifest/site/oracle/db其中,第一次我将其更改为,/lib/svc/manifest/site/oracle12db因为 2 个子目录(在 .../site 之后)似乎有点过头了,这导致服务无法以任何方式工作(始终处于维护状态)。我已经调整了清单 xml 文件以匹配更改后的目录结构。我很困惑,在摆弄之后,我只是更改了 xml 文件和目录结构以匹配示例,并且一切正常。为什么会这样?service_nameservice_bundle中的图层是否有一些公式?

我还没有读到任何说必须按照示例扩展目录结构的内容。据我所知,我没有打错 xml 文件 - 特别是撤销更改以匹配原始示例只是更改 service_name 和 service_bundle 行以匹配扩展目录结构。

标签: oraclelistenermanifestsolarissmf

解决方案


要诊断服务失败的原因,请始终从服务日志开始,其路径位于 svcs 输出中。或者直接使用“svcs -Lv”来显示。


推荐阅读