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

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…)

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…)

Métrologie

Kairos – Les choses utiles à son utilisation

Ce article pour me souvenir des choses utiles à l’installation de Kairos et à son exploitations

Kairos qu’est-ce que celà ?

Kairos est une application docker qui pertmet de « grapher » des machins et des bidules. Il est pré-configuré pour les performances sur oracle que ce soit avec ASH ou StatsPack ( d’où l’immense intérêt de la chose ).

Où trouver les informations relatives à Kairos ?

Scripts SQL

Modifications du paramétrage Oracle.

Comment faire ?

La requête suivante permets de trouver l’historique des modifications du paramétrage Oracle qui a pu être effectué au niveau de l’instance dans et stocké dans AWR. La rétention des informations est donc équivalente à celle de rétention des snapshots. Si vous utilisez un AWR Warehouse, potentiellement, vous conservez cet historique depuis son initialisation.

select eit
     , param
     , last_val
     , cur_val
     , is_def
  from ( select end_interval_time eit
              , parameter_name param
              , lag ( value, 1 ) over ( partition by dbid, instance_number, parameter_hash order by snap_id) last_val
              , value cur_val
              , isdefault is_def
           from dba_hist_parameter natural join dba_hist_snapshot
          where dbid = :dbid )
 where last_val != cur_val 
   and last_val is not null
/

En complément

La requête nécessite que la variable DBID soit positionnée afin pouvoir requêter aussi bien la base locale que le reository AWR Warehouse. En local on positionnera la bind variable de la manière suivante :

var dbid number

exec select dbid into :dbid from v$database 
/

Quelle utilité ?

Avoir l’historique des modifications du paramétrage Oracle permet, surtout lorsqu’on travaille à plusieurs sur une même base de données, d’apporter des éléments de réponse à la question : « Pourquoi mon appli marche-t-elle moins bien depuis 12 jour ? ». Donc savoir accéder à ces informations est une aide précieuse surtout lors d’interventions occasionnelles.

Sauvegarder sur ZDLRA via RMan en mode console

ZDLRA

ZDLRA, l’appliance oracle de « backup and recovery »

ZDLRA

fonctionne comme un lecteur de bande bien que thechniquement il s’agisse d’une base de données sur un Exadata. L’appliance consolide des sauvegardes incrémentales en son sein de manière à ce que la restauration full soit rapide, donc mis à part la première sauvegarde, toutes sont des sauvegardes différentielles (i.e. incremental in english). Pour effectuer unse sauvagarde on procèdera avec RMan comme pour tout autre sauvegarde différentielle sur bande. Il faut donc configurer les channels pour qu’ils utilisent bien la librairie ZDLRA et lui renseigner la manière de se connecter, à savoir via des informations de connexion pré-enregistrées dans un WALLET.

CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' FORMAT '%d_%U' PARMS "SBT_LIBRARY=[ORACLE_HOME]/lib/libra.so, ENV=(RA_WALLET='location=file:[ORACLE_HOME]/dbs/zdlra credential_alias=[ZDLAR-SCAN]:[ZDLRA-PORT]/[ZDLRA-SERVICE]:dedicated')";

Au delà de la configuration des channels, ZDLRA utilise un catalogue qu’elle héberge et dont l’alias est le même que celui utilisé pour configurer les channels :

[ZDLAR-SCAN]:[ZDLRA-PORT]/[ZDLRA-SERVICE]:dedicated

L’instruction classique de sauvegarde pourra par exemple être :

run
{
backup incremental level 1 cumulative device type sbt database;
}
exit;

Et c’est tout, avec ces simples instructions, il est possibles d’effectuer directement la sauvegarde des données de vos bases. C’est à dire, sans avoir à passer par OEM ou par une quelconque autre interface graphique. Donc de travailler directement en mode console. Bien sûr celà n’empêche pas la configuration dans OEM, mais je me penche sur le sujet.

Purger les problèmes dans ADRCI

Le souci

J’utilise la commande purge d’adrci mais mes problèmes restent présents

La commande

adrci> delete from PROBLEM

L’autre souci

L’autre souci c’est que ça purge tous les problèmes et que j’aimerais bien garder ceux qui sont « récents ».

C’est pas interdit de demander de l’aide …

adrci> help delete

  Usage: DELETE FROM <relation> [WHERE <predicate_string>]
       Arguments:
         <relation_name>: Name of the relation to delete from.

      [WHERE <predicate_string>]: The predicate string must be double-quoted.

      Examples:
       delete from incident where 'incident_id > 1'
adrci> show problems

ADR Home = /opt/oracle/diag/rdbms/dbun/DBNAME:
*************************************************************************
PROBLEM_ID           PROBLEM_KEY                                                 LAST_INCIDENT        LASTINC_TIME
-------------------- ----------------------------------------------------------- -------------------- ----------------------------------------
1                    ORA 600 [psdnopGetACL-4]                                    81105                2016-03-27 03:53:10.648000 +02:00
2                    ORA 600 [ktcccod-1]                                         3960130              2016-04-22 06:25:53.408000 +02:00
3                    ORA 600 [kdBlkCheckError]                                   8600040              2016-05-24 11:14:17.489000 +02:00

Allons-y essayons

adrci> delete from PROBLEM where lastinc_time < to_date('2016-03-27 04:00:00', 'YYY-MM-DD HH24:MI:SS' )
DIA-48260: Function to_date not found

Mince, c’est pas du vrais SQL Oracle avec les fonctions qui vont bien !

adrci> delete from PROBLEM where lastinc_time < sysdate-60
DIA-48230: Expression arguments must match types
DIA-48249: Type mismatch - lhs = 7, rhs = 6, result = 8, op = 0

Mince, ça ne sait pas transtyper !

adrci> delete from PROBLEM where lastinc_time < systimestamp - 60

1 Row Deleted

adrci> show problems

ADR Home = /opt/oracle/diag/rdbms/dbun/DBNAME:
*************************************************************************
PROBLEM_ID           PROBLEM_KEY                                                 LAST_INCIDENT        LASTINC_TIME
-------------------- ----------------------------------------------------------- -------------------- ----------------------------------------
2                    ORA 600 [ktcccod-1]                                         3960130              2016-04-22 06:25:53.408000 +02:00
3                    ORA 600 [kdBlkCheckError]                                   8600040              2016-05-24 11:14:17.489000 +02:00
2 rows fetched

C’était pourtant pas si compliqué