Solaris SMF について 2 つの質問があります。(SMF初心者です。)
https://docs.oracle.com/cd/E37838_01/html/E61677/odbstartstop.htmlに従って、SMF で Oracle RDBMS サービスをセットアップしました。
データベース部分は完全に期待どおりに機能するため、メソッド スクリプトには「db」の代わりに「listener」のオプションが引数としてあり、アクセス に使用する代わりにa を実行し、開始または開始するので、別のサービス インスタンスとしてリスナーを追加しました。データベース インスタンスを停止します。lsnrctl start ${LISTENER}
sqlplus
サービスのsvcadm enableおよびsvcadm 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. ]
そのため、最初の質問が変更され、次のようになりました。なぜ停止メソッドを実行するのでしょうか? このサービスのdbバージョンは、データベース サービスがダウンしたときにstartメソッドを実行します。
Q1 への回答: サービス フレームワークは stop メソッドを実行した後、start メソッドを実行します。これが確立された後、メソッド スクリプトを再確認すると、欠陥が明らかになりました。tnslsnr プロセスに接続できなかった場合、停止メソッドでエラーが発生しました。(ロジックは失敗します。tnslsnr プロセスが強制終了された場合、そのプロセスへの接続をテストすることはできません!)
正直なところ、私は情報量の多さに苦労しています。現在、上記の URL の PDF 版を読んでいます。ここで Moellenkamp のブログhttp://blog.moellenkamp.org/archives/18-Auditing-a-single-SMF-service-revisted.htmlをざっと見ましたが、その監査サービスはまだ実装していません。とにかく助けます。なぜこれがうまくいかないのかについて誰かが考えているなら、私は本当に感謝しています。
2番目の質問はこれです:
この例では、マニフェストが保存されて/lib/svc/manifest/site/oracle/db
おり、2 つのサブディレクトリ (.../site の後) が少し上にあるように見えたため、これを最初に変更しました。 /lib/svc/manifest/site/oracle12db
)。変更されたディレクトリ構造に合わせて、マニフェスト xml ファイルを調整しました。私は困惑し、いじくり回した後、例に一致するようにxmlファイルとディレクトリ構造を変更しただけで、すべて機能しました。なぜでしょうか?service_nameまたはservice_bundleのレイヤーに数式はありますか?
例のようにディレクトリ構造を拡張する必要があるというものはまだ読んでいません。特に、元の例に一致するように変更を取り消すことは、拡張されたディレクトリ構造に一致するように service_name および service_bundle 行を変更することでした。