Dataviz, les choses évoluent

Les Redo Logs, encore et toujours

En 2018 j’avais publié un article qui expliquait comment visualiser sous forme de “heatmap” le nombre de fichiers redo log générés par heure sur une quinzaine de jours. J’avais alors utilisé HighChart et Plotly pour afficher les données.

Depuis 2018 de l’eau a coulé sous les ponts et D3 JS a enfin sorti une surcouche, sobrement appelée plot, qui permet de gérer directement les graphiques.

(suite…)

Génrer un mot de passe automatiquement sous unix

Pour générer un mot de passe très complexe on peut utiliser la fonction suivante

tr -dc 'A-Za-z0-9!"#$%&'\''()*+,\-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 30; echo

Pour quelque chose de plus adapter à un mot de passe de bases de données on ira vers moins de caractères spéciaux

tr -dc 'A-Za-z0-9!"#%&*+,\-^_' </dev/urandom | head -c 30; echo

On peut variabiliser

function genpass {
tr -dc 'A-Za-z0-9!"#%&*+,\-^_' </dev/urandom | head -c ${1:-30}; echo
}
html

Migrer des LOB-segments d’Oracle vers PostGreSQL

Depuis des années, ora2pg permet la migration de données d’Oracle vers PostGreSQL. Une des ombres au tableau de cet outil est le traitement des LOBs (Large OBjects) et plus particulièrement de BLOBs (Binary Large OBjects), qui même optimisé reste particulièrement lent.

J’ai récemment testé l’aventure sur une table contenant 8 millions de lignes pour 27 Go de BLOB-segments. Avec ora2pg l’extraction a pris, en utilisant le parallélisme que perl me permet sur un serveur de 4 vCPU et 32 Go de mémoire, près de 5 jours.
(suite…)

La clause MODEL d’Oracle – Pour prévoir

code SQL

CHAPITRE 2: Modélisation prédictive

Dans le précédent article, on a pu voir que la clause MODEL d’Oracle permettait de faire des calculs un peu comme on les ferait avec un tableur en utilisant le résultat de certaines cellules pour en calculer d’autres.

La modélisation permet aussi de créer des lignes comlpètes de toute pièce en s’appuiant sur les précédentes. Ces types de modélisations sont généralement utilisés pour se projeter dans l’avenir et donc intéressant pour les modèles décisionnels

Je vais construire ici un modèle fictif, pour montrer la méthode, qui va donc se baser sur un historique et extrapoler un avenir.

Le modèle à utiliser sera celui d’un ingénieur commercial qui voudrait prédire l’évolution de ses tarifs. Rien que du très classique en fin de compte. Les règles de calcul vont être lesquelles ?

  • Les tarifs sont révisés annuellement
  • Les tarifs sont révisés à date de renouvellement de contrat
  • La révision des tarifs aura pour objectif d’être égale à l’évolution annuelle de l’indice syntec 2 mois avant la date anniversaire du contrat.
  • Il y a deux indices syntec, on se base sur celui qui correspond à la date d’origine du contrat. L’ancienne valeur a été diffusée jusqu’à la date du 1er juillet 2022 et qu’à partir de là il se calcul en multipliant le nouvel indice par une constante égale à 0,97975.

Je vais donc

  • Extrapoler l’indice syntec jusqu’en juin 2025
  • Extrapoler l’ancienne indice par rapport au nouveau à partir d’aout 2022
  • Calculer les variations annuelles entre juillet 2023 et juin 2025

je prendrai comme hypothèse, qu’au pire des cas, l’indice n’évoluera pas plus qu’il n’a évolué l’une de ces deux dernières années.

(suite…)

La clause MODEL d’Oracle – Plus besoin de tableur

code SQL

CHAPITRE I: Les bases de la clause MODEL

La clause MODEL d’Oracle est utilisée pour générer des valeurs sous condition. Elle peut générer des valeur à partir de rien ou à partir de cellules existantes dans la table ou déjà calculées avec cette même clause. Cela en fait un outil de calcul puissant qui bien utilisé rend obsolète votre tableur préféré.

Premier exemple de génération.

Je veux générer de toutes pièces un tableau (une table) qui va me servir à calculer phi (ou nombre d’or).

  • Je sais que la valeur théorique de phi est de (1+√5)/2.
  • Je sais aussi que la suite de Fibonacci permet d’approcher ce nombre en divisant un de ses termes par le précédent (phi ≅ fibo(n)/fibo(n-1))
  • Je suis curieux, je veux aussi calculer l’écart entre le rapport fibo(n)/fibo(n-1) et la valeur théorique

(suite…)

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.
(suite…)

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.
(suite…)

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