web-dev-qa-db-fra.com

Oracle Database 12c sur Oracle Linux 7 - démarrage automatique, activation de la connexion en tant que sysdba

J'ai installé 12c sur Oracle Linux 7 pour mon travail de développement, selon le document Oracle Database Installation Guide 12c Release 1 for Linux (E41491-10). Mon expérience précédente avec l'administration d'Oracle Database est la version 8 sur Novell Netware et 10gR2 sur Windows x64 sur mon lieu de travail précédent. Je n'ai pas trop travaillé avec Linux, à part quelques services simples sur Ubuntu.

Cette fois, j'ai choisi de ne pas créer de base de données lors de l'installation, j'ai donc dû exécuter l'Assistant Configuration de base de données Oracle pour le faire, car j'avais besoin de certaines options que la base de données par défaut n'avait pas. J'ai tout fait par le livre, mais j'ai rencontré problème un: les vars env Oracle_HOME ou Oracle_BASE n'ont pas été définis après la création. J'ai dû éditer .bash_profile pour les définir.

La base de données a été créée à l'emplacement par défaut, qui est /home/Oracle/app/Oracle/oradata/<SID>. Il a été démarré et configuré avec l'écouteur. À la fin de la création de la base de données, j'ai remarqué problème deux: je ne peux pas me connecter à l'instance Oracle en utilisant sqlplus/AS SYSDBA. On me présente ORA-12162: TNS:net service name is incorrectly specified. Comme l'indique le document Oracle Database Error Messages 12c Release 1 (E49325-06), j'ai vérifié si TNSNAMES.ORA ne contient aucune erreur dans le descripteur de connexion, mais ce n'est pas le cas. Le contenu complet de ce fichier est (KITET est le nom de mon instance):

KITET = 
  (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(Host = ORALINUX7VM)(PORT = 1521))
    (CONNECT_DATA = 
      (SERVER = SHARED)
      (SERVICE_NAME = Kitet)
    )
  )

Je me suis connecté uniquement en spécifiant sqlplus <user>/<password>@<service_name>.

Après avoir redémarré ma machine virtuelle, j'ai remarqué problème trois: l'écouteur et Oracle ne démarrent pas automatiquement. Je peux démarrer l'écouteur en utilisant lsnrctl start, Mais je ne peux pas démarrer la base de données (impossible de me connecter en utilisant / AS SYSDBA). J'ai pensé que je pouvais me connecter en spécifiant la chaîne de connexion avec nom_service, mais j'ai été accueilli avec ORA-12505: TNS:listener does not currently know of SID given in connect descriptor.

Après avoir regardé ici et là sur Internet, j'ai découvert qu'en exportant Oracle_SID, je pouvais atténuer le problème "impossible de démarrage", alors je l'ai fait en modifiant (encore) ~/.bash_profile.

Ce que j'ai encore besoin de faire

J'ai besoin de l'écouteur et du démarrage de la base de données automatiquement au démarrage, sur Oracle Linux 7. Bien sûr, je suis en possession d'un document Oracle Linux Administrator's Guide for Release 7 (E54669) mais il n'y a aucune information sur la façon de créer des scripts de démarrage pour Oracle Database et Listener. Il n'y a que des informations sur le démarrage et l'arrêt des services EXISTANTS. Bien sûr, je ne peux pas me connecter à ma boîte VM et à mes services de démarrage chaque fois que je l'allume.

Veuillez aider.

3
Kitet

Sur la base de mes propres recherches, des résultats de Google et de la réponse d'ansible, j'ai pu trouver une solution complète pour Oracle Linux 7. Chaque fois que vous lisez Kitet - c'est mon SID d'instance Oracle.

Pour démarrer ou arrêter la base de données, les scripts dbstart et dbshut sont respectivement utilisés. Ils sont situés dans $Oracle_HOME/bin. Les deux ont besoin d'un paramètre, qui est $Oracle_HOME. S'il n'y a pas de $Oracle_HOME variable d'environnement, il faut d'abord la définir (et quelques autres) en exécutant

. /usr/local/bin/oraenv

(notez la période précédente, et ce n'est pas $Oracle_HOME/bin/oraenv). Le script Oraenv demandera un SID, qui est nécessaire pour définir le $ Oracle_BASE correct. Avec cela, en utilisant simplement

dbstart $Oracle_HOME

ou

dbshut $Oracle_HOME

démarre et arrête l'écouteur et la base de données.

Pour démarrer l'écouteur à l'aide de lsnrctl ou démarrer SQL * Plus à l'aide de sqlplus / as sysdba, fonctionnement . oraenv au préalable est également requis, à moins que l'utilisateur ne souhaite définir manuellement certaines variables d'environnement. Si notre box Linux n'a qu'une seule instance, il y a une possibilité d'automatiser l'exécution de . oraenv en modifiant le profil bash de l'utilisateur. Entrer

nano ~/.bash_profile

et tapez les lignes suivantes (il y a probablement déjà umask 022 entrée dans ce fichier, selon Oracle Database Installation Guide 12c Release 1 for Linux E41491-10):

export Oracle_SID=Kitet
export ORAENV_ASK=NO
. /usr/local/bin/oraenv
export NLS_LANG=POLISH_POLAND.AL32UTF8
unicode_start

Les lignes un et trois sont explicites. La ligne deux fera que oraenv ne demandera pas le SID de la base de données et utilisera la variable exportée. La ligne quatre est facultative et définira votre préférence de langue pour les connexions client (par exemple, SQL * Plus ou lsnrctl s'exprimera dans votre langue maternelle, si disponible). La ligne cinq est nécessaire pour que la console affiche les caractères accentués et est également facultative.

Automatisation du démarrage et de l'arrêt de l'écouteur et de la base de données

1) Une fois l'instance créée, modifiez le /etc/oratab fichier définissant l'indicateur de redémarrage pour chaque instance sur "Y". Ma ligne est la suivante:

Kitet:/home/Oracle/app/Oracle/product/12.1.0/dbhome_1:Y

2) Ensuite, créez un fichier appelé /etc/init.d/dbora en tant qu'utilisateur root, contenant les éléments suivants:

#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $Oracle_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the 
# Oracle database in ORA_HOME.

# path to Oracle home (needed only to check if dbstart exists)
ORA_HOME=/home/Oracle/app/Oracle/product/12.1.0/dbhome_1
# this is the user who installed Oracle
ORA_OWNER=Oracle

if [ ! -f $ORA_HOME/bin/dbstart ]
then
    echo "Oracle startup: cannot start"
    exit
fi

case "$1" in
    'start')
        # Start the Oracle database and listener:
        # Remove "&" if you don't want startup as a background process.
        export Oracle_SID=Kitet
        export ORAENV_ASK=NO
        . /usr/local/bin/oraenv
        # at this point we have $Oracle_HOME env variable set
        su $ORA_OWNER -c "dbstart $Oracle_HOME" &
        touch /var/lock/subsys/dbora
        ;;
    'stop')
        # Stop the Oracle database and listener:
        export Oracle_SID=Kitet
        export ORAENV_ASK=NO
        . /usr/local/bin/oraenv
        su $ORA_OWNER -c "dbshut $Oracle_HOME"
        rm -f /var/lock/subsys/dbora
        ;;
esac

3) Utilisez la commande chmod pour définir les privilèges sur 750:

chmod 750 /etc/init.d/dbora

4) Associez le service dbora aux niveaux d'exécution appropriés et réglez-le sur le démarrage automatique à l'aide de la commande suivante:

chkconfig --add dbora

C'est tout. dbstart et dbshut doivent écrire dans leurs journaux respectifs à $Oracle_HOME/startup.log et $Oracle_HOME/shutdown.log. Il y a aussi $Oracle_HOME/listener.log. Là, nous pouvons vérifier si et comment l'instance et l'écouteur ont démarré et arrêté. Nous pourrions également utiliser ps -ax | grep ora ou ps -ax | grep lsnr pour voir si l'écouteur/Oracle est en cours d'exécution.

2
Kitet

Comment activer le démarrage automatique de la base de données Oracle pour les démonstrations et le développement


Voici les étapes que j'ai utilisées pour activer le démarrage automatique d'Oracle Database Enterprise Edition 10g, 11g ou 12c pendant le démarrage d'Oracle Linux 5 et 6. J'utilise également ces étapes avec Oracle Linux 7. Ces étapes sont utiles pour les types de démonstration et les configurations de développement dont j'ai généralement besoin.

Ces étapes ne sont pas nécessaires pour Oracle XE, car son installation vous demandera de démarrer automatiquement la base de données et configurera le système automatiquement.

Créer un nouveau script de service Créer un fichier /etc/init.d/dbora en utilisant dbora avec du contenu

 #!/bin/sh -x 
 # 
 # chkconfig: 2345 80 05 
 # description: démarrer et arrêter Oracle Database Enterprise Edition sur Oracle Linux 5 et 6 
 # 
 
 # Dans/etc/oratab, changez le champ de démarrage automatique de N en Y pour toutes les bases de données 
 # Que vous souhaitez démarrer automatiquement. 
 # 
 # Créez ce fichier en tant que /etc/init.d/dbora et exécutez: 
 # Chmod 750 /etc/init.d/dbora[.____.[# chkconfig --add dbora 
 # Chkconfig dbora sur 
 
 # Remarque: modifiez la valeur d'Oracle_HOME pour spécifier le répertoire d'origine Oracle Home 
 # pour votre installation. 
 # Oracle_HOME =/u01/app/Oracle/product/11.1.0/db_1 
 Oracle_HOME =/u01/app/Oracle/product/12.1.0/dbhome_1 
 
 # 
 # Remarque: modification la valeur d'Oracle au nom de connexion du propriétaire Oracle 
 Oracle = oracle 
 
 PATH = $ {PATH}: $ Oracle_HOME/bin 
 Host = `hostname `
 PLATFORM =` uname` 
 Export Oracle_HOME PATH 
 
 Case 1 $ en 
 'Start') 
 Echo -n $ "Démarrage d'Oracle:" 
 su $ Oracle -c "$ Oracle_HOME/bin/dbstart $ Oracle_HOME" & 
 ;; 
 'stop') 
 echo -n $ "Arrêt d'Oracle:" 
 su $ Oracle -c "$ Oracle_HOME/bin/dbshut $ Oracle_HOME" & 
 ;; 
 'restart') 
 echo -n $ "Arrêt d'Oracle:" 
 su $ Oracle -c "$ Oracle_HOME/bin/dbshut $ Oracle_HOME" & 
 sleep 5 
 echo -n $ " Démarrage d'Oracle: "
 Su $ Oracle -c" $ Oracle_HOME/bin/dbstart $ Oracle_HOME "& 
 ;; 
 *) 
 Echo" utilisation: $ 0 { start | stop | restart} "
 exit 
 ;; 
 esac 
 
 exit 

Définir des autorisations sur le script

# chmod 750 /etc/init.d/dbora

Dites à Linux de démarrer/arrêter automatiquement le service Sur Oracle Linux 5 et 6, exécutez:

# chkconfig --add dbora
# chkconfig dbora on

Sous Oracle Linux 7, exécutez:

# systemctl enable dbora

Modifier/etc/oratab Dans/etc/oratab, modifiez le champ de démarrage automatique de N à Y pour toutes les bases de données que vous souhaitez démarrer automatiquement.

Démarrage/arrêt de la base de données La base de données démarre et s'arrête au démarrage et à l'arrêt de la machine.

Ou il peut être contrôlé manuellement avec:

- Sur Oracle Linux 5 et 6, utilisez:

# service dbora start

et

# service dbora stop

-Sur Oracle Linux 7, utilisez:

# systemctl start dbora

et

# systemctl stop dbora

Démarrage d'Oracle Database 12c Multitenant PDBs Pour démarrer également toutes les bases de données enfichables au démarrage de la base de données de conteneur, exécutez-la dans SQL * Plus en tant que SYSDBA:

 créez ou remplacez le déclencheur sys.after_startup 
 après le démarrage sur la base de données 
 commencez 
 exécutez immédiatement 'alter pluggable database all open'; 
 fin after_startup; 
/

Voir: Comment activer le démarrage automatique de la base de données Oracle pour les démonstrations et le développement

1
DuongLx-Jack

Tout d'abord, utilisez-vous le $Oracle_HOME/bin/oraenv commande? C'est ce qui définit généralement les variables d'environnement Oracle_BASE, Oracle_HOME et Oracle_SID sur un système Linux à l'aide de la base de données Oracle. Lors de la connexion à une base de données Oracle à partir de la ligne de commande sous Linux, l'exécution de oraenv devrait généralement être votre première étape, car elle vous demandera le SID de la base de données à laquelle vous souhaitez vous connecter et définira Oracle_ [SID | HOME | BASE] variables basées sur l'entrée de ce SID dans le fichier oratab (l'emplacement par défaut est généralement /etc/oratab). Vous devrez source le script en utilisant le . oraenv syntaxe pour que les variables définies par le script restent actives dans le shell actuel. L'utilisateur "Oracle" doit déjà avoir $Oracle_HOME/bin situé à l'intérieur de son $PATH variable, vous pouvez donc simplement exécuter . oraenv à partir de la ligne de commande, indiquez le SID de la base de données, puis exécutez sqlplus / as sysdba pour vous connecter avec succès. Pour les autres utilisateurs en plus de l'utilisateur "Oracle" - après avoir exécuté le root.sh script comme indiqué par l'OUI lors de l'installation du logiciel, le script oraenv est copié dans /usr/local/bin/, afin que les autres utilisateurs puissent accéder à oraenv pour définir également les variables d'environnement Oracle.

Configuration correcte du fichier oratab et appel de . oraenv devrait résoudre vos problèmes de connexion et de démarrage de la base de données (quel que soit l'auditeur).

Deuxièmement, il existe également un script appelé $Oracle_HOME/bin/dbstart (et son compagnon, dbshut) qui démarre automatiquement l'écouteur TNS et toutes les bases de données du fichier oratab qui ont une valeur "Y" pour ce SID de base de données. Vous pouvez et devez utiliser ces deux scripts pour démarrer et arrêter automatiquement vos bases de données Oracle; il est particulièrement important d'arrêter proprement toutes les bases de données ouvertes avant d'éteindre/arrêter/redémarrer le VM ou serveur.

Pour démarrer l'écouteur TNS et les bases de données Oracle automatiquement au démarrage du système, vous pouvez écrire un script bash simple pour appeler dbstart pour vous. Cela implique généralement de placer le script dans le /etc/init.d/ dossier; plus de détails sur la façon d'écrire un script pour diverses distributions Linux qui s'exécute au démarrage a été répondu en détail ailleurs sur SE ( https://unix.stackexchange.com/questions/7793/bash-script-on-startup -linux ). TLDP a également un bon exemple avec des références directes à la base de données Oracle (en utilisant dbstart et dbshut) - http://www.tldp.org/HOWTO/Oracle-7- HOWTO-6.html . Cela fait référence à une ancienne version de la base de données Oracle utilisant RHEL 5.0, mais devrait toujours être pertinente pour votre système.

0
ansible