このセクションでは、Oracle データベースインスタンス制御サービスマニフェストと、そのマニフェストで使用される起動/停止メソッドスクリプトについて説明します。
次に、Oracle データベースインスタンス制御サービスマニフェスト /lib/svc/manifest/site/oracle.xml について留意すべきいくつかの特徴を示します。
svc:/site/application/database/oracle:default の名前の 1 つのサービスインスタンスが定義されます。このインスタンスはデフォルトで有効になっています。マニフェストのいちばん上にある create_default_instance 要素を参照してください。
このサービスでは、すべてのローカルファイルシステムがマウントされている必要があります。ファイルベースデータベースを使用している場合、データベースサービスはローカルファイルシステムに依存している必要があります。ASM を使用している場合、データベースサービスは、ASM を管理するサービスに依存している必要があります。
このサービスは、リモートクライアント接続の確立を許可するためにリスナーサービスに依存します。リスナーサービスマニフェストにある network マイルストーンへの require_all 依存関係を参照してください。
method_context 要素内の method_environment 要素は、ORACLE_HOME および ORACLE_SID 環境変数を定義し、この環境変数は起動または停止するデータベースインスタンスを識別します。これらの値はその後、使用するメソッドスクリプトで使用できます。
このサービスの複数のインスタンスを作成した場合、その特定のデータベースに対して一意の ORACLE_HOME および ORACLE_SID 値を定義するには、各インスタンスに独自の method_context 要素が必要になる可能性があります。
method_context 要素の属性は、この例に示すプロジェクトおよび作業ディレクトリに加え、リソースプールを定義できます。method_context 要素では method_profile または method_credential のどちらかの要素も定義できます。method_credential 要素では、この例で示す user、group、および privileges の値に加え、supp_groups および limit_privileges の値を指定できます。詳細は DTD を参照してください。
起動/停止メソッドスクリプトは /lib/svc/method/oracle です。メソッドがタイムアウトするまでの秒数は、デフォルトから増えています。
ユーザーには、このサービスインスタンスを有効または無効にするための solaris.smf.manage.oracle 承認が割り当てられている必要があります。この例では、ユーザー oracle に solaris.smf.manage.oracle 認可が割り当てられています。
<?xml version="1.0"?> <!-- Define a service to control the startup and shutdown of a database instance. --> <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1"> <service_bundle type="manifest" name="oracle"> <service name="site/application/database/oracle" type="service" version="1"> <create_default_instance enabled="true" /> <!-- Using a file-backed database, so depend on the filesystem. --> <dependency type="service" name="fs-local" grouping="require_all" restart_on="none"> <service_fmri value="svc:/system/filesystem/local" /> </dependency> <!-- Wait for the listener to be started. --> <dependency type="service" name="oracle" grouping="optional_all" restart_on="none"> <service_fmri value="svc:/site/application/database/listener" /> </dependency> <!-- Define the methods. --> <method_context project=":default" working_directory=":default"> <method_credential user="oracle" group="dba" privileges=":default" /> <method_environment> <envvar name="ORACLE_HOME" value="/opt/oracle/product/home" /> <envvar name="ORACLE_SID" value="oracle" /> </method_environment> </method_context> <exec_method type="method" name="start" exec="/lib/svc/method/oracle start" timeout_seconds="120"/> <exec_method type="method" name="stop" exec="/lib/svc/method/oracle stop" timeout_seconds="120" /> <!-- What authorization is needed to allow the framework general/enabled property to be changed when performing the action (enable, disable, etc) on the service. --> <property_group name="general" type="framework"> <propval type="astring" name="action_authorization" value="solaris.smf.manage.oracle" /> </property_group> <stability value="Evolving" /> </service> </service_bundle>
名前および説明メタデータをマニフェストに追加して、ユーザーがこのサービスに関する情報を svcs コマンドおよび svccfg describe コマンドから得られるようにします。DTD 内の template 要素を参照してください。
svccfg validate コマンドを使用して、サービスマニフェストが有効であることを確認します。
次に、Oracle データベースインスタンス制御サービス用の起動/停止メソッドスクリプト /lib/svc/method/oracle を示します。このメソッドは、データベースの dbstart コマンドおよび dbshut コマンドを呼び出します。
#!/bin/ksh -p . /lib/svc/share/smf_include.sh export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib export PATH=$PATH:$ORACLE_HOME/bin function startup { dbstart $ORACLE_HOME } function shutdown { dbshut $ORACLE_HOME } case $1 in start) startup ;; stop) shutdown ;; *) echo "Usage: $0 { start | stop }" >&2 smf_method_exit $SMF_EXIT_ERR_FATAL ;; esac smf_method_exit $SMF_EXIT_OK