Go to main content
Oracle® Solaris 11.3 でのシステムサービスの開発

印刷ビューの終了

更新: 2016 年 11 月
 
 

Oracle データベースインスタンスを起動または停止するサービスの作成

このセクションでは、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 要素では、この例で示す usergroup、および privileges の値に加え、supp_groups および limit_privileges の値を指定できます。詳細は DTD を参照してください。

  • 起動/停止メソッドスクリプトは /lib/svc/method/oracle です。メソッドがタイムアウトするまでの秒数は、デフォルトから増えています。

  • ユーザーには、このサービスインスタンスを有効または無効にするための solaris.smf.manage.oracle 承認が割り当てられている必要があります。この例では、ユーザー oraclesolaris.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