LOXODATA

PostgreSQL pour les DBAs Oracle

2017-02-14   1064 mots, 5 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