Installer Oracle XE 18c sur Centos 8

travail sur ordinateur

Cette procédure d’installation se déroule avec l’utilisateur root. Elle a été déroulée sur une VM centos 8 minimaliste telle que distribuée par linuxvimages.com.

Elle permet d’installer Oracle XE sur une VM Centos 8, l’intérêt est essentiellement pédagogique. En effet Oracle XE est très limitée (12 Go de données utilisateur au maximum, 2Gb de mémoire, 2 Threads … et 3 PDB, mais on s’en cogne ça ne sert à rien sur des volumétries si faibles).

Malgré ces limitations les interpréteurs SQL et PL/SQL sont complets ce qui en fait un excellent outil de formation.

Installation des packages

dnf install -y epel-release
dnf install -y rlwrap wget libnsl

wget http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libcap1-1.10-7.el7.x86_64.rpm
dnf install -y compat-libcap1-1.10-7.el7.x86_64.rpm compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

curl -o oracle-database-preinstall-18c-1.0-1.el6.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL6/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el6.x86_64.rpm
dnf -y localinstall oracle-database-preinstall-18c-1.0-1.el6.x86_64.rpm

curl -o oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm
dnf -y localinstall oracle-database-preinstall-18c-1.0-1.el7.x86_64.rpm

wget https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm
dnf install -y oracle-database-xe-18c-1.0-1.x86_64.rpm

Personnalisation

Je souhaite que la base de données XE soit stockée sous l’arborescence /data.

mkdir /data
chown oracle:oinstall /data

Configuration de la création de XE

Le fichiern /etc/oratab doit être créé avant de lancer le création de a base.

touch /etc/oratab
chown oracle:oinstall /etc/oratab

cat <<_HERE > /etc/sysconfig/oracle-xe-18c.conf
#This is a configuration file to setup the Oracle Database.
#It is used when running '/etc/init.d/oracle-xe-18c configure'.

# LISTENER PORT used Database listener, Leave empty for automatic port assignment
LISTENER_PORT=1521

# EM_EXPRESS_PORT Oracle EM Express URL port
EM_EXPRESS_PORT=5500

# Character set of the database
CHARSET=AL32UTF8

# Database file directory
# If not specified, database files are stored under Oracle base/oradata
DBFILE_DEST=/data

# SKIP Validations, memory, space
SKIP_VALIDATIONS=false
_HERE

Création de la base de données

/etc/init.d/oracle-xe-18c configure

Normalistaion pour utilisation de oraenv

cd /opt/oracle/product/18c/dbhomeXE/bin
cp oraenv dbhome orabase /usr/bin

bash profile de l’utilisateur oracle

cat <<_HERE > ~oracle/.bash_profile

alias sqlplus='rlwrap sqlplus'
alias sys='sqlplus / as sysdba'

export ORACLE_SID=XE
export ORAENV_ASK=NO
. oraenv
_HERE

chown oracle:oinstall ~oracle/.bash_profile

Configuration du service oracle pour redémarrage après reboot

systemctl start oracle-xe-18c
systemctl enable oracle-xe-18c

Lister les paramètres cachés et ce qu’ils font

cachée

Les paramètres cachés sont ceux qu’on n’est pas censé toucher. Ceux qui sont là en cas d’extrème urgence pour contourner un bug le temps qu’Oracle ponde un « patch ». Ils sont là pour contourner les bugs, c’est du moins le message du support Oracle.

Ils servent aussi d’interrrupteur et de paramétrage des fonctionalités ( le nombre de secondes entre deux snapshots d’ASH, c’est un paramètre caché, l’utilisation de certaines fonctions de l’optimiseur ce sont aussi des paramètres cachés.) Afin de les trouver et de déterminer leur fonction, il est possible d’interroger la base de dpnnées ou plus exctement ses structures mémoire qui ont ces informations en stock.

set lines 155 pages 50000

SELECT
x.inst_id inst_id,
x.indx num,
x.ksppinm name,
decode(x.ksppity, 1, 'BOOLEAN',
2, 'STRING',
3, 'INTEGER',
4, 'PARAMETER FILE',
5, 'RESERVED',
6, 'BIG INTEGER', 'UNKNOWN') type,
y.ksppstvl value,
decode(y.ksppstdf, 'TRUE', 'DEFAULT VALUE',
'FALSE', 'INIT.ORA') isdefault,
decode(bitand(x.ksppiflg / 256, 1), 1, 'IS_SESS_MOD(TRUE)', 'FALSE') isses_modifiable,
decode(bitand(x.ksppiflg / 65536, 3), 1, 'MODSYS(NONDEFERED)',
2, 'MODSYS(DEFERED)',
3, 'MODSYS(*NONDEFERED*)', 'FALSE') issys_modifiable,
decode(bitand(y.ksppstvf, 7), 1, 'MODIFIED_BY(SESSION)',
4, 'MODIFIED_BY(SYSTEM)', 'FALSE') ismodified,
decode(bitand(y.ksppstvf, 2), 2, 'ORA_STARTUP_MOD(TRUE)', 'FALSE') isadjusted,
x.ksppdesc description,
y.ksppstcmnt update_comment,
x.ksppihash hash
FROM x$ksppi x, x$ksppcv y
WHERE x.inst_id = y.inst_id
and x.indx = y.indx
and x.ksppinm like '%&name%';

ou

set lines 155 pages 50000

col name for a40
col type for a15
col value for a30 wrap

SELECT
x.ksppinm name,
decode(x.ksppity, 1, 'BOOLEAN',
2, 'STRING',
3, 'INTEGER',
4, 'PARAMETER FILE',
5, 'RESERVED',
6, 'BIG INTEGER', 'UNKNOWN') type,
y.ksppstvl value,
decode(bitand(y.ksppstvf, 7), 1, 'MODIFIED_BY(SESSION)',
4, 'MODIFIED_BY(SYSTEM)', 'FALSE') ismodified,
decode(bitand(y.ksppstvf, 2), 2, 'ORA_STARTUP_MOD(TRUE)', 'FALSE') isadjusted,
x.ksppdesc description
FROM x$ksppi x, x$ksppcv y
WHERE x.inst_id = y.inst_id
and x.indx = y.indx
and x.ksppinm like '%&name%';

Ce qui pour la vraible name settée à « quarantine » en Oracle 19c donne :

NAME TYPE VALUE ISMODIFIED ISADJUSTED
DESCRIPTION
_quarantine_enabled BOOLEAN TRUE FALSE FALSE
quarantine: enable
_quarantine_max_objs INTEGER 10000 FALSE FALSE
quarantine: max number of objects
_quarantine_max_mem INTEGER 1 FALSE FALSE
quarantine: max amount of memory
_quarantine_per_hour INTEGER 60 FALSE FALSE
quarantine: limit per hour
_optimizer_quarantine_sql BOOLEAN TRUE FALSE FALSE
enable use of sql quarantine

Version du Cluster Ready Service

Support

Demandé par le support Oracle pour connaitre la version du Cluster Ready Service noeud par noeud, le passage des instructions crsctl query crs en masse peut être fastidieux. Voici donc une petite fonction bash pour obtenir les informations sous linux. Il faut bien sûr qu’elle soit lancée par l’utilisateur propriétaire de la grid-infrastructure et que la variable GI_HOME corresponde à son répertoire d’installation

function racCrsVersions {
for s in $(olsnodes)
do
echo ""
echo "===> $s"
echo ""
echo " - activeversion -f ==> $( ssh $s ${GI_HOME}/bin/crsctl query crs activeversion -f )"
echo " - softwareversion  ==> $( ssh $s ${GI_HOME}/bin/crsctl query crs softwareversion  )"
echo " - softwarepatch    ==> $( ssh $s ${GI_HOME}/bin/crsctl query crs softwarepatch    )"
echo " - releaseversion   ==> $( ssh $s ${GI_HOME}/bin/crsctl query crs releaseversion   )"
echo " - releasepatch     ==> $( ssh $s ${GI_HOME}/bin/crsctl query crs releasepatch     )"
done
}

Le résultat de la requête peut être le suivant :

===> racnode01

 - activeversion -f ==> Oracle Clusterware active version on the cluster is [19.0.0.0.0]. The cluster upgrade state is [UPGRADE FINAL]. The cluster active patch level is [724960844].
 - softwareversion  ==> Oracle Clusterware version on node [racnode01] is [19.0.0.0.0]
 - softwarepatch    ==> Oracle Clusterware patch level on node racnode01 is [724960844].
 - releaseversion   ==> Oracle High Availability Services release version on the local node is [19.0.0.0.0]
 - releasepatch     ==> Oracle Clusterware release patch level is [724960844] and the complete list of patches [29401763 29517242 29517247 29585399 ] have been applied on the local node. The release patch string is [19.3.0.0.0].

===> racnode02

 - activeversion -f ==> Oracle Clusterware active version on the cluster is [19.0.0.0.0]. The cluster upgrade state is [UPGRADE FINAL]. The cluster active patch level is [724960844].
 - softwareversion  ==> Oracle Clusterware version on node [racnode02] is [19.0.0.0.0]
 - softwarepatch    ==> Oracle Clusterware patch level on node racnode02 is [724960844].
 - releaseversion   ==> Oracle High Availability Services release version on the local node is [19.0.0.0.0]
 - releasepatch     ==> Oracle Clusterware release patch level is [724960844] and the complete list of patches [29401763 29517242 29517247 29585399 ] have been applied on the local node. The release patch string is [19.3.0.0.0].

===> racnode03

 - activeversion -f ==> Oracle Clusterware active version on the cluster is [19.0.0.0.0]. The cluster upgrade state is [UPGRADE FINAL]. The cluster active patch level is [724960844].
 - softwareversion  ==> Oracle Clusterware version on node [racnode03] is [19.0.0.0.0]
 - softwarepatch    ==> Oracle Clusterware patch level on node racnode03 is [724960844].
 - releaseversion   ==> Oracle High Availability Services release version on the local node is [19.0.0.0.0]
 - releasepatch     ==> Oracle Clusterware release patch level is [724960844] and the complete list of patches [29401763 29517242 29517247 29585399 ] have been applied on the local node. The release patch string is [19.3.0.0.0].

Redimensionner les redo logs

code php

Je ne sais pas s’il existe vraiement un niveau 0 de l’exploitation des SGBD oracle, mais le redimensionnement, à la hausse, des fichiers de tablespaces est du niveau le plus trivial qui soit. Cependant, à peine plus compliqué, il est parfois nécessaire de redimensionner les redo logs, ou plus précisément les « archived red log files ». C’est pourtant parfois nécessaire quand par exemple on constate un nombre de switch trop élevé. Il est recommandé d’en avoir 3 à 4 par heures et on les comptes soit en mode texte avec SQL*Plus soit de manière plus graphique avec l’outil qui vous semblera bon.

(suite…)

Git et Visual Studio Code, pour un suivi efficace du code

code phpL’idée de maintenir un code de qualité pour à peu près tout est reste souvent un veux pieux. On verra ici comment utiliser Git et Visual Studio Code qui permettent de travailler proprement et rapidement. Cependant, leur mise en place bien qu’aisée n’est pas évidente. Ce petit guide est mon aide mémoire personnel pour les installer.

Télécharger et configurer GIT

Télécharger Git pour Windows ou votre OS préféré. En fin de configuration, lancer le shell bash, puis passer les commandes suivantes afin de paramétrer les informations relatives à votre dépot :

(suite…)

Tuning SGA avec les vues dynamiques

Tuning

Depuis quelques version d’Oracle, la gestion de la mémoire a été simplifiée, comprenez que le nombre de paramètres minimal liés à sa gestion a été considérablement réduit. En clair, il suffirait de positionner le volume global de mémoire à allouer à l’instance par le truchement du paramètre memory_target et par le biais de réallocations dynamiques oracle serait capable de se débrouiller. On constate bien vite que c’est faux notamment pour le tuning sga.

Comme d’habitue lors de ce genre de cas, si on laisse l’initiative à Oracle, au bout d’un moment la mémoire finit par fragmenter et malgré une taille globale suffisante on rencontre de vilaines erreurs ORA-4031. Et plus généralement ce mode d’allocation (via memory_target donc) n’est pas compatible avec l’utilisation de huge pages. Il est donc recommandé de tuner les différentes sous-sections de mémoire, la pga au travers de pga_aggregate_target et la sga au travers de sga_target. Ces deux paramètres seuls ne suffisent cependant encore pas et il faut positionner des valeurs pour les divers pools et caches de la SGA qui seront considérées comme des minimums.

(suite…)

Considérations de mémoire sous Linux

Tuning

La question qui se pose régulièrement lors du réglage des instances Oracle est comment est gérée la mémoire sous Linux et plus généralement, de combien de mémoire puis-je disposer pour mon instance ( mes instances ? ). En effet, la littérature est assez peu fournie sur la métrologie de la mémoire sous linux et on se retrouve souvent avec des données incompréhensibles. C’est notamment le cas de la commande free, qui peut très bien afficher un espace libre de 0, en permanence, sans que cela ne porte à conséquences ni que cela ne reflète la réalité.

(suite…)

Taille des BDD dans ASM, asmcmd ou SQL ?

choose

Lorsqu’on utilise un OS classique avec un filesystem bien fait trouver la surface des bases de données est assez aisé. Cependant déterminer la Taille des BDD dans ASM est un peu moins évident.

Par exemple :
Mon ami le N2 m’a appelé en panique : Oulalalalaaaaaa, y’a pu d’place sur +DATA, quoi qu’on fait ?
C’est à peu près à ce moment là, si ce n’était déjà fait, que l’on regrette d’utiliser ASM.

(suite…)

Métrologie

Nombre de redo log files générés, dataviz

Encore ce nombre de redo log files générés … pfff on voit ça tout le temps

Ce que l’on souhaite faire c’est afficher simplement le nombre de redo log files générés en mode graphiquesous forme de heat-map. Pour ce faire on utilise highcharts qui a le bon goût d’être gratuit pour un usage récréatif et non commercial. Et parce qu’on aime s’amuser on testera aussi avec plotly qui est gratuit tout court.

Pour ce faire, On choisit de séparer le code HTML, du javascript et des données de manière ce que chaque partie de code puisse être réutilisés au maximum.

(suite…)

Scripts SQL

Branchements et boucles en pur SQL

SQL est pratique mais il est compliqué de produire un script SQL qui s’adapte à toutes les versions de la base oracle ou qui réagit en fonction de certains résultats de requêtes. Cet article pour donner des astuces de scripting afin de gérer des branchements et boucles en pur SQL et de pouvoir créer des scripts adaptifs.
(suite…)