Gestion des services système dans Oracle® Solaris 11.2

Quitter la vue de l'impression

Mis à jour : Juillet 2014
 
 

Création d'un service de démarrage ou d'arrêt d'une instance de base de données Oracle

Cet exemple présente les services suivants qui vous aider à gérer l'Oracle Database, procédez comme suit :

  • Un service de base de données qui démarre ou arrête une instance Oracle Database

  • Service qui démarre le un listener listener, qui est un processus de qui gère les demandes de connexion client le trafic entrant à l'instance de base de données

Cet exemple utilise un stockage sauvegardé sur fichier. Lieu d'effectuer une mise à jour de stockage à l'aide d'un fichier de sauvegarde est d'utiliser l'ASM Automatic Storage Management (gestion des services) d '. ASM est un gestionnaire de volumes et un système de fichiers pour les fichiers Oracle Database.

Les variables d'environnement ci-dessous doit être défini pour chaque installation de l'Oracle Database, procédez comme suit :

ORACLE_HOME

L'emplacement où est installée la base de données. Dans l'exemple présenté dans cette section, il se peut que l'emplacement d'installation de la base de données soit /opt/oracle/product/home.

ORACLE_SID

Les systèmes ID pour identifier de manière unique une base de données particulière sur un système.

Dans cet exemple, ces variables d'environnement sont définies dans les fichiers manifestes de service, puis utilisés dans la méthode des scripts.

Base de données de démarrage et d'arrêt de service

Cette section montre le manifeste de service de contrôle d'instance d'Oracle Database, /lib/svc/manifest/site/oracle.xml. Vous trouverez ci-dessous quelques fonctions manifeste à noter pour ce service, procédez comme suit :

  • Une instance de service est définie, appelée svc:/site/application/database/oracle:default. Cette instance est activée par défaut.

    Cet exemple montre deux façons de définir l'instance par défaut. Dans cet exemple, l'instance par défaut est définie dans l'élément create_default_instance en haut du manifeste. L'élément instance en bas du manifeste présente l'autre manière de faire.

  • Ce service exige que tous les systèmes de fichiers à monter local et toutes les interfaces réseau à initialiser.

    Si vous utilisez une base de données, le fichier de sauvegarde devrait dépendre de la base de données de service de fichiers local. Si vous utilisez ASM, le service de base de données doit dépendre d'ASM qui permet de gérer le service. Devrait dépendre de la base de données de service par le client distant de la mise en réseau à autoriser les connexions.

  • L'élément method_environment dans l'élément method_context définit les variables d'environnement ORACLE_HOME et ORACLE_SID, qui identifient l'instance de base de données à démarrer ou arrêter. Ces valeurs sont alors disponibles pour le script de méthode à utiliser.

    Si vous créez plusieurs instances de ce service (reportez-vous à l'élément instance en bas du manifeste), chaque instance pourrait avoir besoin d'un élément method_context propre pour définir les valeurs d'ORACLE_HOME et ORACLE_SID pour cette base de données en particulier.

  • Les attributs de l'élément method_context peuvent définir une réserve de ressources en plus du répertoire de projet et du répertoire actif présentés dans cet exemple. Vous pouvez aussi définir un élément method_profile ou method_credential dans l'élément method_context element. L'élément method_credential peut spécifier les valeurs supp_groups et limit_privileges en plus des valeurs user, group et privileges présentées dans cet exemple. Pour plus d'informations à ce sujet, reportez-vous à la DTD.

  • Le script de démarrage/arrêt de méthode est /lib/svc/method/oracle. Le nombre de secondes écoulées avant l'augmente de méthode qu'il y a temporisation de la valeur par défaut.

  • L'utilisateur doit bénéficier de la permission solaris.smf.manage.oracle pour activer ou désactiver cette instance de service. Dans cet exemple, l'utilisateur oracle a la permission 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" />

    <!--
         Wait for all local file systems to be mounted.
         Wait for all network interfaces to be initialized.
    -->

    <dependency type="service"
        name="fs-local"
        grouping="require_all"
        restart_on="none">
        <service_fmri value="svc:/system/filesystem/local" />
    </dependency>

    <dependency type="service"
        name="network"
        grouping="require_all"
        restart_on="none">
        <service_fmri value="svc:/milestone/network:default" />
    </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>

    <!-- Define an instance of the database. -->

    <!--<instance name="default" enabled="true" />-->

    <stability value="Evolving" />
</service>
</service_bundle>

Ajoutez des métadonnées de nom et de description au manifeste pour que les utilisateurs puissent obtenir des informations sur le service par les commandes svcs et svccfg describe. Reportez-vous à l'élément template de la DTD.

Utilisez la commande svccfg validate pour vous assurer que le manifeste de service est valide.

Ceci est le script de méthode de démarrage/arret, /lib/svc/method/oracle, pour le service de contrôle d'instance d'Oracle Database. Cette méthode appelle les commandes de base de données dbstart et 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
       exit $SMF_EXIT_ERR_FATAL
       ;;
esac

exit $SMF_EXIT_OK

Service de module d'écoute de base de données

Listener est un processus permettant la le trafic entrant de client de gérer les demandes de connexion vers l'instance de base de données. Le listener dépend le service de l'instance de service de base de données qu'il gère dont les connexions client.

Cette sectoin présente le manifeste de service du listener d'instance d'Oracle Database, /lib/svc/manifest/site/listener.xml. Vous trouverez ci-dessous quelques fonctions manifeste à noter pour ce service, procédez comme suit :

  • Une instance de service est définie, appelée svc:/site/application/database/listener:default. Cette instance est activée par défaut.

  • Pour ce service, il faut que le service de contrôle d'instance d'Oracle Database, svc:/site/application/database/oracle, soit démarré. Si la base de données redémarrage de l'instance de listener pour quelque raison que ce soit, le sera également redémarrée.

  • L'élément method_environment dans l'élément method_context définit les variables d'environnement ORACLE_HOME et ORACLE_SID, qui identifient l'instance de base de données à démarrer ou arrêter. Ces valeurs sont alors disponibles pour le script de méthode à utiliser.

    Si vous créez plusieurs instances de ce service (reportez-vous à l'élément instance en bas du manifeste), chaque instance pourrait avoir besoin d'un élément method_context propre pour définir les valeurs d'ORACLE_HOME et ORACLE_SID pour cette base de données en particulier.

  • Les attributs de l'élément method_context peuvent définir une réserve de ressources en plus du répertoire de projet et du répertoire actif présentés dans cet exemple. Vous pouvez aussi définir un élément method_profile ou method_credential dans l'élément method_context element. L'élément method_credential peut spécifier les valeurs supp_groups et limit_privileges en plus des valeurs user, group et privileges présentées dans cet exemple. Pour plus d'informations à ce sujet, reportez-vous à la DTD.

  • Le script de méthode de démarrage/arrêt est /lib/svc/method/listener. Le nombre de secondes écoulées avant l'augmente de méthode qu'il y a temporisation de la valeur par défaut.

  • L'utilisateur doit bénéficier de la permission solaris.smf.manage.oracle pour activer ou désactiver cette instance de service.

  • Le service est transient. Voir Modèles de service.

<?xml version="1.0"?>

<!--
 Define a service to control the startup and shutdown of a database listener.
-->

<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">

<service_bundle type="manifest" name="listener">
<service name="site/application/database/listener" type="service" version="1">
    <create_default_instance enabled="true" />
    <!--<single_instance />-->

    <!-- Wait for the database to be started. -->

    <dependency type="service"
        name="oracle"
        grouping="require_all"
        restart_on="refresh">
        <service_fmri value="svc:/site/application/database/oracle" />
    </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/listener start"
        timeout_seconds="150"/>

    <exec_method type="method"
        name="stop"
        exec="/lib/svc/method/listener stop"
        timeout_seconds="30" />

    <!--
         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>

    <!-- Make the instance transient (since it backgrounds itself). -->

    <property_group name="startd" type="framework">
        <propval name="duration" type="astring" value="transient" />
    </property_group>

    <!-- Define an instance of the listener. -->

    <!--<instance name="default" enabled="true" />-->

    <stability value="Evolving" />
</service>
</service_bundle>

Ajoutez des métadonnées de nom et de description au manifeste pour que les utilisateurs puissent obtenir des informations sur le service par les commandes svcs et svccfg describe. Reportez-vous à l'élément template de la DTD.

Voici le script de méthode de démarrage/arrêt, /lib/svc/method/listener, pour le service listener d'instance d'Oracle Database. Cette méthode démarre ou arrête un processus listener, lsnrctl. Au démarrage de lsnrctl, il contrôle l'état du service de base de données.

#!/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
{
        lsnrctl start

        # Wait for the listener to report ready.

        i=0
        while ! lsnrctl status | grep -i ready ; do
                ((i = i+1))
                if (( $i == 120 )) ; then
                        # It's been *at least* 2 minutes, time to give up.
                        echo "The listener failed to report ready." >&2
                        exit $SMF_EXIT_ERR_FATAL
                fi

                sleep 1
        done

        # Ping the database once to prove it is now available.

        if ! tnsping $ORACLE_SID ; then
                exit $SMF_EXIT_ERR_FATAL
        fi
}

function shutdown
{
        lsnrctl stop
}

case $1 in
    start) startup ;;
    stop)  shutdown ;;

    *) echo "Usage: $0 { start | stop }" >&2
       exit $SMF_EXIT_ERR_FATAL
       ;;
esac

exit $SMF_EXIT_OK