このセクションでは、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