LOXODATA

PostgreSQL pour les DBAs Oracle

2017-02-14   1229 mots, 6 minutes de lecture   Lætitia Avrot

En tant que DBA Oracle, il n’est pas très compliqué de monter en compétences sur PostgreSQL. Les deux moteurs sont assez proches l’un de l’autre par leur fonctionnement.
Cependant, le vocabulaire n’est pas toujours le même.

Cet article fait le point sur les différences entre Oracle et PostgreSQL.

Fonctionnalités

Sauvegarde/Restauration (RMAN)

Cette fonctionnalité est incluse dans la licence Oracle, mais si on souhaite stocker le catalogue RMAN dans une base, il faudra une licence pour cette base.
PostgreSQL propose un utilitaire permettant de gérer les sauvegardes : pg_basebackup. Il existe plusieurs contributions sur le sujet. Vous pouvez notamment regarder pgBarman (pour les nostalgiques d’RMAN) ou pgBackRest.

Dump logique des données (exp/expdp/imp/impdp)

Ces outils sont inclus dans les licences Oracle.
PostgreSQL met à disposition deux outils natifs pg_dump et pg_restore. Il est à noter que vous ne risquez pas de problème de cohérence de données lors du dump car PostgreSQL n’exporte que des données cohérentes entre elles. (Que celui qui n’a jamais rencontré de “ORA-01555 Snapshot too old” me jette la première pierre.)

Gestion du stockage (ASM)

ASM est inclus dans les licences Oracle, cependant, si on souhaite certaines fonctionnalités (snapshot, sécurité, réplication, audit), il faudra payer des fonctionnalités supplémentaires.
PostgreSQL ne gère pas le stockage. Il laisse l’OS faire son travail, car c’est le sien.

Réplication (DataGuard)

DataGuard nécessite une licence Enterprise par nœud.
PostgreSQL permet une réplication physique équivalente au DataGuard, soit par log-shipping (Warm standby), soit par streaming (équivalent d’Oracle Streams -> Hot Standby). La standby peut être ouverte en lecture seule ou pas.
La réplication logique existe aussi sous PostgreSQL. Il s’agit de la contribution pgLogical. Elle sera intégrée définitivement à PostgreSQL dans la version 10.

Haute disponibilité (Dataguard avec Observer)

Active DataGuard nécessite une option payante en plus d’une licence Enterprise par nœud.
PostgreSQL ne propose pas en natif de système comme l’« observer », mais ce type de solution est implémentée côté OS (voir Heartbeat, Pacemaker ou PowerHA). Ces systèmes sont très fiables et performants.

Réplication multi-maître

La réplication multi-maître Oracle nécessite une Licence Directory Server de niveau enterprise en plus des licences Oracle pour chaque base.
PostgreSQL n’inclue pas en natif de réplication multi-maîtres, mais la contribution BDR le permet.

Réplication logique multi-technologies (GoldenGate)

GoldenGate est un produit à part chez Oracle, il faudra donc acquérir la licence Golden Gate en plus des licences pour les bases.
Il est posssible de faire de la réplication logique entre différentes technologies comme avec pg_chameleon qui permet par exemple une réplication logique entre mySQL et PostgreSQL.
BDR propose une réplication logique multi-maître.

Sharding (Oracle 12c)

Le sharding sous Oracle nécessite des licences Enterprise.
Il est possible de faire du sharding avec PostgreSQL (Postgres XL ou projet Atomic). L’extension PostgreSQL Citus-data le permet également.

Plusieurs instances pour servir la même base de données (RAC)

Pour mettre en place un RAC, il faut compter une licence Enterprise par noœud ainsi que l’option payante RAC.
Il n’existe pas à proprement parler d’équivalent à RAC sous PostgreSQL. Cependant, il est possible de faire du load balancing avec la contribution pgPool. De plus, les derniers drivers JDBC intègrent le load balancing.

Bases géographiques (Oracle spatial)

Oracle Spatial est une option payante de la version Enterprise.
PostgreSQL dispose d’une extension, PostGIS, qui gère très bien les données géographiques. PostGIS est la référence en matière de cartouche SIG.

Fonctionnement interne du moteur

Instances et bases de données

Sous Oracle, en standard, une instance ne peut servir qu’une seule base de données. Il est possible d’aller au-delà de cette limitation en prenant l’option payante Multitenant de la version Enterprise.
Sous PostgreSQL, une instance sert plusieurs bases de données. La norme SQL définit cette notion sous le nom groupe de cataloge (catalog cluster). Sous PostgreSQL, on utilise le terme de “groupe de bases de données” (database cluster). Bien sûr, ce terme n’a aucun rapport avec le RAC d’Oracle.

Processus d’écoute (Listener)

PostgreSQL ne travaille pas avec un process séparé pour l’écoute des connexions distantes. Le process “maître” postgres assure ce travail.

Tablespace

En Oracle, un tablespace est une sorte de partition logique qui comporte un ou des fichier(s) de données. Sous PostgreSQL, un tablespace est un répertoire sur le système de fichier. Il n’y a pas de taille limite pour un tablespace. (En dehors de celles imposées par le système d’exploitation, évidemment.)

Il est possible de partitionner une table et de répartir ses partitions sur différents tablespaces.
Il est possible, comme avec Oracle, de définir un tablespace différent pour un index.

Tablespace Undo

PostgreSQL n’a pas de tablespace undo, les undo se trouvent à l’intérieur des fichiers de données. Cet espace est bien sûr réutilisé comme le tablespace undo. Cependant, pour récupérer cet espace, un processus de maintenance, le vacuum, est lancé régulièrement.

Tablespace temporaire

Sous Oracle, certaines opérations sont effectuées dans le tablespace temporaire. PostgreSQL utilise un répertoire nommé pgsql_tmp au sein du tablespace par défaut de la base de données. Il est possible de définir plusieurs tablespaces temporaires.

Fichiers de données et tables TOAST

Les données d’une table sont stockées dans un fichier de données d’1Go dans son tablespace. Si la taille de la table devait dépasser le giga octet, plusieurs fichiers seront créés.
Il n’est pas possible de mettre les données d’une colonne dans un tablespace spécifique (comme on le fait souvent avec des données LOB sous Oracle). Cependant, losrqu’une ligne de données dépasse les 2 Ko (valeur par défaut modifiable), PostgreSQL appelle automatiquement un système nommé TOAST (The Oversized-Attribute Storage Technique) pour stocker ces données dans un fichier séparé.

Schémas, Rôles et Users

Sous Oracle, un user est lié à un schéma qui correspond à son espace personnel d’objets. Un schéma n’est pas un objet en lui-même chez Oracle, on ne peut donc pas donner des droits sur un schéma. Un rôle permet de créer des droits génériques à appliquer à un user.
Sous PostgreSQL, on peut utiliser le DDL CREATE USER, mais il ne va faire qu’appeler le DDL CREATE ROLE en ajoutant les droits de connexion.
Un schéma est totalement indépendant d’un user. C’est une sorte de conteneur d’objets. On peut donc donner des droits sur un schéma et par héritage sur tous les objets de ce schéma. Par contre, le user peut définir un chemin par défaut (qui peut contenir plusieurs schémas) pour rechercher ses objets.

Table dual

Il n’existe pas de table dual, conformément à la norme SQL qui autorise les requêtes SELECT sans précision de la clause FROM.
Exemple :

SELECT fonction();
SELECT 2+2;

Petite correspondance rapide des fichiers Oracle

Oracle
PostgreSQL
Commentaire
Parameter file/Fichier d’init/pfile ou spfile pg_hba.conf
pg_ident.conf
postgresql.conf
Les fichiers pg_hba.conf et pg_ident.conf permettent de gérer le mode d’identification et l’authentification.
Password file
postgres DB
Control files
postgres DB
Online redo
pg_xlog
(ou WAL)
A partir de la version 10, pour éviter les suppressions intempestives, le répertoire pg_xlog sera renommé en pg_wal. Wal signifie Write Ahead Log.
Archived logs
pg_xlog
(ou WAL)
Il n’y a pas de nom spécifique pour les WAL archivés, amsi PostgreSQL a lui aussi un mécanisme d’archivage des WAL.
Data files
$PGDATA
Alert log/log de l’instance et listener.log
Server log (dans le répertoire pg_log par défaut)
Il est possible de configurer l’instance pour voir les logs de connexion (qu’on verrait chez Oracle dans le fichier listener.log). La personnalisation des logs est bien plus avancée sous PostgreSQL que sous Oracle.