Pour ceux qui ont déjà installé la version 12c du Grid Infrastructure, vous avez vu apparaitre une nouvelle base de données installée en même temps que le noyau, MGMTDB.
Cette nouvelle instance de base de données est utilisée pour stocker les données collectées pour le CHM (Cluster Health Monitor). Ce qui en soit n’est pas nouveau, en 11g ces données étaient stockées dans une base de données berkleydb .
Optionnel en 12.1.0.1, la base MGMTDB devient obligatoire en 12.1.0.2.
En 11g, les fichiers étaient stockés dans des fichiers de type .bdb dans le répertoire $GRID_HOME/CRF/db/Host_name. Suite à un bug en 11.2.0.2 ces fichiers pouvaient prendre beaucoup d’espace (> 100G).
En 12c, les fichiers de base de données sont stockés sur les disques sur lesquels sont stockés les fichiers OCR et VOTING, ce qui entraine une augmentation de la taille de ces derniers.De ce fait, Il est préconisé de les étendre jusqu’à 6G.
La première question que l’on peut se poser est :
Est il possible d’installer la base MGMTDB ailleurs que sur les disques OCR et VOTING ?
La réponse est Non.
Par contre il est possible de changer la localisation des fichiers en supprimant et recréant la base.
Attention, de ce fait on perd l’historique stocké dans la base.
La seconde est :
Doit on sauvegarder la base MGMTDB ?
A priori non. en cas de perte de la base, il suffit d’arrêt le service de collecte et de recréer la base avec le même mécanisme que celui utilisé pour le déplacement des dbf. Dans ce cas on perd bien entendu l’historique des traces.
Je vous propose de décliner cet article en 2 temps
Comment déplacer la base de données MGMTDB, puis quelques commandes utiles liées au CHM.
1. Comment déplacer la base de données MGMTDB
Voici la procédure à suivre, sous Unix/Linux en version 12.1.0.2 de Grid Infrastructure, pour déplacer la base MGMTDB.
- Sauvegarde des informations déjà collectées ( optionnel )
Si vous voulez conserver une trace des informations stockées dans la base, Il n’y a pas d’obligation, suivez la procédure suivante :
Positionnez l’environnement Grid Infrastructure à l’aide de la commande oraenv, puis dans le cas ou l’on veut garder les données générées entre le 18/01/2015 et le 19/01 15h10 , lancez :
rm mgmtdb.dump mknod mgmtdb.dump p cat mgmtdb.dump | gzip mgmtdb.dump.gz & oclumon dumpnodeview -allnodes -s "2015-01-18 00:00:00" -e "2015-01-19 15:10:00" >mgmtdb.dump
Si aucune date de début et de fin ne sont spécifiées, Il faudra faire un [CTRL]+[C] pour arrêter la génération du fichier.
Cet ensemble de commandes génère un fichier gz contenant des informations du type suivant sur l’ensemble des nœuds du cluster.
---------------------------------------- Node: monnoeud1 Clock: '15-01-19 12.28.15 Europe/Paris' SerialNo:221787 ---------------------------------------- SYSTEM: #pcpus: 2 #vcpus: 12 cpuht: N chipname: Intel(R) cpu: 1.48 cpuq: 0 physmemfree: 44481116 physmemtotal: 74232768 mcache: 26326964 swapfree: 16809976 swaptotal: 16809976 hugepagetotal: 0 hugepagefree: 0 hugepagesize: 2048 ior: 0 iow: 49 ios: 9 swpin: 0 swpout: 0 pgin: 0 pgout: 24 netr: 169.916 netw: 105.966 procs: 554 procsoncpu: 1 rtprocs: 45 rtprocsoncpu: N/A #fds: 14304 #sysfdlimit: 6815744 #disks: 28 #nics: 4 nicErrors: 0 TOP CONSUMERS: topcpu: 'gipcd.bin(5689) 1.60' topprivmem: 'java(2232) 405248' topshm: 'ora_mman_bddtst(30414) 20155688' topfd: 'polkit-gnome-au(16474) 1020' topthread: 'console-kit-dae(16316) 64' ---------------------------------------- Node: monnoeud2 Clock: '15-01-19 12.29.18 Europe/Paris' SerialNo:221976 ---------------------------------------- SYSTEM: #pcpus: 2 #vcpus: 12 cpuht: N chipname: Intel(R) cpu: 1.05 cpuq: 0 physmemfree: 29658212 physmemtotal: 49412052 mcache: 16704396 swapfree: 16809980 swaptotal: 16809980 hugepagetotal: 0 hugepagefree: 0 hugepagesize: 2048 ior: 0 iow: 86 ios: 16 swpin: 0 swpout: 0 pgin: 0 pgout: 43 netr: 137.464 netw: 58.943 procs: 470 procsoncpu: 1 rtprocs: 45 rtprocsoncpu: N/A #fds: 9120 #sysfdlimit: 6815744 #disks: 44 #nics: 4 nicErrors: 0 TOP CONSUMERS: topcpu: 'gipcd.bin(4127) 1.79' topprivmem: 'java(2642) 267668' topshm: 'ora_dbw0_bddtst(11807) 11689612' topfd: 'crsd.bin(4399) 227' topthread: 'java(6562) 44'
Cette opération peut prendre un temps certain .
- Etape suivante, on arrête et on désactive la ressource crf
Sur chaque nœud, une fois connecté root et après avoir positionné l’environnement Grid Infrastructure,lancez les commandes suivantes :
$GRID_HOME/bin/crsctl stop res ora.crf -init $GRID_HOME/bin/crsctl modify res ora.crf -attr ENABLED=0 -init
Attention, ne pas arrêter les ressources ora.mgmtlsnr et ora.mgmtdb. Dans le cas contraire, on aurait des messages du type
<<Oracle Grid Management database is running on node "". Run dbca on node "" to delete the database>>
lors de la suppression de la base .
- Suppression de la base existante
Utilisez la commande dbca sous le user grid pour supprimer la base existante.
Positionnez l’environnement Grid Infrafructure a l’aide de oraenv, puis :
vérifiez que la base est bien démarrée et son status .
srvctl status mgmtdb Database is disabled Instance -MGMTDB is running on node Monserveur01
Puis supprimez la base MGMTDB :
dbca -silent -deleteDatabase -sourceDB -MGMTDB Connecting to database 4% complete 9% complete 14% complete 19% complete 23% complete 28% complete 47% complete Updating network configuration files 48% complete 52% complete Deleting instance and datafiles 76% complete 100% complete Look at the log file "/u01/app/oracle/grid/cfgtoollogs/dbca/_mgmtdb.log" for further details.
- Recréation de la base MGMTDB
Dans notre cas, on est en version 12.1.0.2 du Grid Infrastructure avec un stockage en NFS pour compliquer un peut les choses.
On contrôlera donc la présence d’un fs partagé entre l’ensemble des noeuds du cluster.
On se connectera avec le user Grid infrastructure
On positionnera l’environnement Grid a l’aide de la commande oranev
Puis on lancera la commande suivante pour recréer la base:
dbca -silent -createDatabase -sid -MGMTDB -createAsContainerDatabase true \ -templateName MGMTSeed_Database.dbc -gdbName _mgmtdb \ -storageType FS -datafileDestination /nfs2/griddata \ -datafileJarLocation $ORACLE_HOME/assistants/dbca/templates \ -characterset AL32UTF8 -autoGeneratePasswords –skipUserTemplateCheck Registering database with Oracle Grid Infrastructure 5% complete Copying database files 7% complete 9% complete 16% complete 23% complete 41% complete Creating and starting Oracle instance 43% complete 48% complete 53% complete 57% complete 58% complete 59% complete 62% complete 64% complete Completing Database Creation 68% complete 69% complete 80% complete 90% complete 100% complete Look at the log file "/u01/app/oracle/grid/cfgtoollogs/dbca/_mgmtdb/_mgmtdb0.log" for further details.
La commande à utiliser pour un stockage des dbf sous ASM est un peut différente.
Après vous être assuré de l’existence du volume ASM sur l’ensemble des nœuds du cluster et du niveau de compatibilité ASM et RDBMS du volume (CREATE DISKGROUP … ATTRIBUTE ‘compatible.rdbms’ = ‘12.1’, ‘compatible.asm’ = ‘12.1’; ) , lancez la commande suivante :
dbca -silent -createDatabase -sid -MGMTDB -createAsContainerDatabase true \ -templateName MGMTSeed_Database.dbc -gdbName _mgmtdb \ -storageType ASM -diskGroupName +MON_DG \ -datafileJarLocation $ORACLE_HOME/assistants/dbca/templates \ -characterset AL32UTF8 –autoGeneratePasswords \ -skipUserTemplateCheck
On va maintenant créer la Pluggable Database qui va servir au stockage des données collectées dans le container MGMTDB.
Pour cela , sous le user grid, après avoir positionné l’environnement –MGMTDB, lancez la commande dbca avec les paramètres suivants :
dbca -silent -createPluggableDatabase -sourceDB -MGMTDB -pdbName NOMCLUSTER \ -createPDBFrom RMANBACKUP \ -PDBBackUpfile $ORACLE_HOME/assistants/dbca/templates/mgmtseed_pdb.dfb \ -PDBMetadataFile $ORACLE_HOME/assistants/dbca/templates/mgmtseed_pdb.xml \ -createAsClone true -internalSkipGIHomeCheck Creating Pluggable Database 4% complete 12% complete 21% complete 38% complete 55% complete 85% complete Completing Pluggable Database Creation 100% complete Look at the log file "/u01/app/oracle/grid/cfgtoollogs/dbca/_mgmtdb/Monserveur01/_mgmtdb0.log" for further details.
Attention : assurez vous avant de bien avoir substitué les éventuels caractères « – » par des underscores « _ » dans le nom du cluster
Pour terminer l’opération, on va s’assurer que la base est bien démarrée.
Pour cela, sous le user grid et après avoir positionné l’environnement MGMTDB a l’aide de la commande oraenv, lancer la commande suivante :
srvctl status MGMTDB Database is enabled Instance -MGMTDB is running on node Monserveur01
Sur le serveur Monserveur01, sous le user grid et après avoir positionné l’environnement adéquat, lancez la commande :
mgmtca
Attention : assurez vous de bien lancer la commande mgmtca sur le serveur dont le nom est retourné par la commande srvctl status MGMTDB. Dans le cas contraire aucun message d’erreur ne sera retourné mais la connexion à la base ne se fera pas, et le processus sera à recommencer.
- redémarrez et réactivé la ressource crf
Enfin on réactive et on redémarre la ressource crf
sur chaque nœud du cluster , sous le user root , après avoir positionné l’environnement grid a l’aide de la commande oraenv, lancez les commandes suivantes :
crsctl modify res ora.crf -attr ENABLED=1 -init crsctl start res ora.crf -init CRS-2672: Attempting to start 'ora.crf' on 'noeud01' CRS-2676: Start of 'ora.crf' on 'noeud01' succeeded
Voila, notre base MGMTDB a été déplacée et l’acquisition des données d’audit est relancée sur l’ensemble des nœuds du cluster.
2. Quelques commandes utiles
Concernant le CHM, voici quelques commandes utiles.Celles-ci existaient déjà en 11G.
- Pour connaître le nom du nœud maitre,
en regle général le nœud ou tourne la base MGMTDB
oclumon manage -get MASTER Master = Nomserveur03
- Pour voir la liste des serveurs ou tourne le service Cluster Logger et la liste des nœuds surveillés
oclumon manage -get alllogger -details Logger = Nomserveur03 Nodes = Nomserveur01, Nomserveur03
- Pour connaître la taille du repository CHM
oclumon manage -get repsize CHM Repository Size = 136320 seconds
Etonnamment l’unité de mesure est la seconde.
La valeur doit être entre 3600 (1 heure) et 259200 ( 3 jours).
- Pour modifier la duré de rétention des données et la taille du repository CHM
Exemple pour reduire la période de rétention à 12h
oclumon manage -repos changeretentiontime 43200 The Cluster Health Monitor repository can support the desired retention for 2 hosts
Dans le cas ou l’on souhaite passer la période de rétention à 2 jours.
oclumon manage -repos changeretentiontime 172800 The Cluster Health Monitor repository is too small for the desired retention. Please first resize the repository to 2598 MB
Dans le cas présent le repository est trop petit. Il convient de l’agrandir avant d’augmenter la période de rétention.
L’unité est le MB.
oclumon manage -repos changerepossize 3000 The Cluster Health Monitor repository was successfully resized.The new retention is 199620 seconds.
- Pour retrouver le serveur qui est en charge de collecter les données pour le serveur courant :
oclumon manage -get mylogger Logger = Nomserveur03
- Edition des traces
Pour ce qui est de la description du retour de la commande oclumon dumpnodeview nous en avons vu un exemple plus haut . en voici donc un descriptif rapide :
oclumon dumpnodeview -allnodes -s "2015-01-18 00:00:00" -e "2015-01-19 15:10:00" -i 15
-allnodes ou -n liste,des,nœuds
-s date heure de debut
-e date heure de fin
-i intervalle en secondes entre 2 mesures , doit être un multiple de 5 .
Si -s et -e ne sont pas demander, on a un affichage en direct des données collectées. Pour interrompre l’affichage [CTRL] + [C].
Pour ce qui est du descriptif des données retournées, je vous renvoie à la doc en ligne
http://docs.oracle.com/database/121/CWADD/troubleshoot.htm#CWADD92247
- Dernière commande intéressante diagcollection.pl –collect
Celle-ci permet en cas de problème sur un cluster, de faire l’acquisition de l’ensemble des données nécessaires à un diagnostique par les équipes d’oracle.
Lancée sous root , après avoir positionné l’environnement grid, elle permet de générer des fichier Tar compressés dans le répertoire courant.
diagcollection.pl --collect Production Copyright 2004, 2010, Oracle. All rights reserved Cluster Ready Services (CRS) diagnostic collection tool ORACLE_BASE is /u01/app/oracle/grid The following CRS diagnostic archives will be created in the local directory. crsData_Monserveur _20150121_1539.tar.gz -> logs,traces and cores from CRS home. Note: core files will be packaged only with the --core option. baseData_Monserveur _20150121_1539.tar.gz -> logs,traces and cores from Oracle Base. Note: core files will be packaged only with the --core option. ocrData_Monserveur _20150121_1539.tar.gz -> ocrdump, ocrcheck etc coreData_Monserveur _20150121_1539.tar.gz -> contents of CRS core files in text format osData_Monserveur _20150121_1539.tar.gz -> logs from Operating System lsInventory_Monserveur _20150121_1539 ->Opatch lsinventory details Collecting crs data Collecting Oracle base data Collecting OCR data Collecting information from core files No corefiles found Collecting lsinventory details The following diagnostic archives will be created in the local directory. acfsData_Monserveur _20150121_1539.tar.gz -> logs from acfs log. Collecting acfs data Collecting OS logs Collecting sysconfig data
Oracle préconise de lancer cette commande sur l’ensemble des nœuds du cluster.
Liste des fichiers générés est la suivante
crsData_Monserveur_20150121_1539.tar.gz baseData_Monserveur _20150121_1539.tar.gz ocrData_Monserveur _20150121_1539.tar.gz lsInventory_Monserveur _20150121_1539 acfsData_Monserveur _20150121_1539.tar.gz osData_Monserveur _20150121_1539.tar.gz sysconfig_Monserveur _20150121_1539.txt
Lorsque acsf n’est pas utilisé, le message suivant apparaît :
acfsutil log: CLSU-00100: operating system function: open64 failed with error data: 2 acfsutil log: CLSU-00101: operating system error message: No such file or directory acfsutil log: CLSU-00103: error location: OOF_1 acfsutil log: CLSU-00104: additional error information: open64 (/dev/ofsctl) acfsutil log: ACFS-00502: Failed to communicate with the ACFS driver. Verify the ACFS driver has been loaded.
Voila, je pense avoir fait le tour de la question. En espérant vous avoir été utile.