Guide de migration de Oracle vers Snowflake

Framework de migration Snowflake

Une migration typique d’Oracle vers Snowflake peut être décomposée en neuf phases clés. Ce guide fournit un cadre complet pour comprendre les défis techniques et stratégiques associés, garantissant ainsi une transition en douceur d’une architecture de base de données traditionnelle vers la plateforme de données Cloud de Snowflake.

** Phases de migration **

Phase 1 : Planification et conception

Cette phase initiale est essentielle pour établir les bases d’une migration réussie. La migration depuis Oracle implique des modifications architecturales importantes, et un plan détaillé est indispensable pour se coordonner avec les parties prenantes, définir la portée et éviter les dépassements de budget et de délais.

Vos étapes pratiques :

  • ** Réalisez une évaluation complète de votre environnement Oracle :**

    • Inventaire et analyse : répertoriez tous les objets de la base de données, y compris les schémas, les tables, les vues, les vues matérialisées, les index, les paquets, les procédures, les fonctions et les déclencheurs. Utilisez les vues du dictionnaire de données d’Oracle (DBA_OBJECTS, DBA_SOURCE, DBA_TABLES, etc.) pour collecter ces métadonnées.

    • Analyse des charges de travail : utilisez les rapports du référentiel de charge de travail automatique (AWR) et les vues dynamiques des performances (V$SQL, V$SQLAREA) d’Oracle pour identifier les modèles de requête, la simultanéité des utilisateurs, les goulots d’étranglement des performances et l’utilisation des ressources. Ces données sont cruciales pour la conception de votre stratégie d’entrepôt virtuel Snowflake.

    • Identification des dépendances : mappez toutes les sources de données en amont (ETL/tâches ELT, flux de données) et les consommateurs en aval (outils de BI, applications, services de rapports). Accordez une attention particulière aux applications qui s’appuient fortement sur les packages PL/SQL.

  • Définition de la portée et de la stratégie de la migration :

    • Hiérarchisation des charges de travail : catégorisez les charges de travail par impact métier et complexité technique. Commencez par une charge de travail à fort impact et à faible complexité (par exemple, un Datamart spécifique) pour démontrer la valeur et créer une dynamique.

    • ** Choix d’une approche de migration : ** choisissez entre une approche « Lift and Shift » pour une migration plus rapide ou une approche de réarchitecture pour rationaliser et optimiser les modèles de données, les ETL/pipelines ELT et la logique procédurale.

  • Développement du plan du projet :

    • Mise en place d’une équipe : créez une équipe de migration avec des rôles clairs (responsable de projet, ingénieur des données, DBA Oracle, architecture Snowflake, administrateur sécurité, analyste commercial).

    • Création d’un calendrier : définissez des plannings et des étapes réalistes pour chacune des neuf phases.

    • Définition des métriques de réussite : établissez clairement les KPIs pour mesurer le succès, comme la réduction des coûts, l’amélioration des performances des requêtes, l’augmentation de la simultanéité et la satisfaction des utilisateurs.

Phase 2 : Environnement et sécurité

Avec un plan solide, l’étape suivante consiste à préparer l’environnement Snowflake et à traduire le modèle de sécurité d’Oracle. Cela implique la configuration de comptes, la mise en réseau et une nouvelle structure de contrôle d’accès basé sur les rôles (RBAC).

Vos étapes pratiques :

  • Configuration de votre compte Snowflake :

    • ** Choix de la version et du fournisseur Cloud :** sélectionnez la version de Snowflake (par exemple, Standard, Enterprise, Business Critical) qui répond à vos exigences en matière de sécurité et de fonctionnalités. Sélectionnez un fournisseur Cloud (AWS, Azure ou GCP) et une région adaptés à votre stratégie Cloud et qui permettent de réduire la latence pour vos utilisateurs et les autres services Cloud.

    • Conception d’une stratégie d’entrepôt : sur la base de l’analyse de charge de travail de la phase 1, créez un ensemble initial d’entrepôts virtuels. Isolez les différentes charges de travail (par exemple, WH_LOADING, WH_TRANSFORM, WH_BI_ANALYTICS) pour éviter les conflits de ressources. Commencez par des tailles de t-shirt (par exemple, X-Small, Small) et prévoyez de les redimensionner en fonction de tests de performance.

  • Mise en œuvre du modèle de sécurité :

    • Mappage des utilisateurs/rôles Oracle sur des rôles Snowflake : traduisez l’utilisateur, le rôle et le modèle de privilèges d’Oracle dans la hiérarchie hiérarchique RBAC de Snowflake. Il s’agit d’un changement significatif, car les privilèges granulaires d’Oracle au niveau du système et au niveau de l’objet ne sont pas mappés directement. Créez une hiérarchie de rôles fonctionnels (SYSADMIN, SECURITYADMIN) et de rôles d’accès (BI_READ_ONLY, ETL_READ_WRITE).

    • Configuration des politiques réseau et de l’authentification : définissez des politiques réseau pour restreindre l’accès aux adresses IP de confiance (par exemple, votre réseau d’entreprise ou VPN). Configurez des méthodes d’authentification, telles que l’authentification fédérée (SSO) auprès d’un fournisseur d’identité comme Okta ou Azure AD.

Phase 3 : Conversion du code de base de données

Cette phase implique la conversion des codes DDL, DML et de la base de code PL/SQL étendue d’Oracle à des fins de compatibilité avec Snowflake. Il s’agit souvent de la phase la plus complexe et la plus longue de la migration.

Vos étapes pratiques :

  • Conversion du DDL (Langage de définition des données) :

    • Tables et vues : extrayez les instructions CREATE TABLE et CREATE VIEW d’Oracle. Convertissez les types de données spécifiques à Oracle en leurs équivalents Snowflake (voir annexe 2).

    • Suppression des clauses spécifiques à Oracle : éliminez les clauses de stockage physique spécifiques à Oracle comme TABLESPACE, PCTFREE, INITRANS, STORAGE, et les schémas de partitionnement/indexation complexes. Snowflake gère automatiquement le stockage et la mise en page des données.

    • Réimplémentation des contraintes : Snowflake applique uniquement les contraintes NOT NULL. Les contraintes PRIMARY KEY et UNIQUE peuvent être définies mais ne sont pas appliquées ; elles servent principalement de métadonnées pour les outils de BI et les optimiseurs. Les contraintes FOREIGN KEY ne sont pas prises en charge. Toute la logique d’intégrité des données doit être déplacée vers vos ETL/processus ELT.

  • Conversion du DML (Langage de manipulation de données) et du code procédural :

    • Réécriture du PL/SQL : le PL/SQL d’Oracle (packages, procédures, fonctions, déclencheurs) doit être entièrement réécrit. Les cibles communes incluent l’exécution de scripts Snowflake (SQL), les JavaScript UDFs/UDTFs/Procs, ou l’externalisation de la logique dans un outil de transformation comme dbt ou un service d’orchestration comme Airflow.

    • ** Traductions des fonctions SQL :** mappez les fonctions spécifiques à Oracle sur leurs homologues Snowflake (par ex., SYSDATE devient CURRENT_TIMESTAMP(), NVL devient IFNULL, VARCHAR2 devient VARCHAR). Voir l’annexe 3 pour les mappages courants.

    • Remplacement des séquences : recréez des séquences Oracle en utilisant l’objet SEQUENCE de Snowflake.

    • Gestion des instructions MERGE : vérifiez et testez avec soin les instructions MERGE, car la syntaxe et le comportement peuvent légèrement différer entre Oracle et Snowflake.

Phase 4 : Migration des données

Cette phase se concentre sur le déplacement physique des données historiques de votre base de données Oracle vers des tables Snowflake. L’approche la plus courante consiste à extraire des données vers des fichiers et à les charger via une zone de préparation de stockage Cloud.

Vos étapes pratiques :

  • Extraction de données d’Oracle vers des fichiers :

    • Utilisez des méthodes telles que Oracle Data Pump, le spooling SQL*, ou UTL_FILE pour extraire les données d’une table vers un format de fichier structuré (par exemple, Parquet, CSV compressé).

    • Pour les très grandes bases de données, envisagez d’utiliser des outils d’intégration des données tiers (par exemple, Fivetran, Matillion, Talend, Informatica) qui peuvent extraire efficacement des données depuis Oracle.

  • Téléchargement de données vers une zone de préparation de stockage Cloud :

    • Transférez les fichiers extraits vers un emplacement de stockage Cloud (Amazon S3, Azure Blob Storage ou Google Cloud Storage) qui servira de zone de préparation externe pour Snowflake.

  • Chargement des données depuis une zone de préparation dans Snowflake :

    • Création de zones de préparation externes : dans Snowflake, créez un objet de zone de préparation externe qui pointe vers l’emplacement de stockage Cloud contenant vos fichiers de données.

    • Utilisation de la commande COPY INTO : utilisez la commande COPY INTO <table> Snowflake pour charger les données de la zone de préparation dans les tables cibles de Snowflake. Cette commande est extrêmement performante et évolutive.

    • Utilisation d’un entrepôt virtuel plus grand : utilisez un entrepôt virtuel dédié et plus grand pour la charge de données initiale afin d’accélérer le processus, puis réduisez-le ou suspendez-le pour gérer les coûts.

Phase 5 : ingestion des données

Une fois les données historiques migrées, vous devez reconstruire vos pipelines d’ingestion de données en cours pour alimenter en données directement dans Snowflake.

Vos étapes pratiques :

  • Migration des tâches ETL/ELT par lots :

    • Mettez à jour les ETL existants (dans des outils tels que Oracle Data Integrator, Informatica ou Talend) pour cibler Snowflake comme destination. Cela implique la modification des détails de la connexion et la réécriture des remplacements SQL spécifiques pour utiliser le dialecte de Snowflake.

  • Implémentation de l’ingestion continue :

    • Pour un chargement continu des données, configurez Snowpipe de manière à ce qu’il ingère automatiquement les fichiers à mesure qu’ils arrivent dans votre zone de préparation de stockage Cloud. Il s’agit d’un remplacement idéal pour les tâches de micro-lots.

  • Utilisation de l’écosystème Snowflake :

    • Explorez les connecteurs natifs de Snowflake pour des plateformes telles que Kafka et Spark, ou utilisez les outils partenaires pour simplifier la diffusion directe de données et la capture de données de changement (CDC) depuis Oracle.

Phase 6 : Rapports et analyses

Cette phase implique la redirection de toutes les applications en aval, en particulier les outils de BI et de rapports, pour interroger les données de Snowflake.

Vos étapes pratiques :

  • Mise à jour des pilotes de connexion : installez et configurez les pilotes ODBC/JDBC de Snowflake sur les serveurs hébergeant vos outils de BI (par exemple, Tableau Server, Power BI Gateway, Oracle Analytics Server).

  • Redirection des rapports et tableaux de bord :

    • Dans vos outils de BI, modifiez la connexion de la source de données d’Oracle à Snowflake.

    • Testez tous les rapports et tableaux de bord critiques pour vous assurer qu’ils fonctionnent correctement.

  • Examen et optimisation des requêtes :

    • De nombreux tableaux de bord contiennent du SQL personnalisé avec des indications ou des fonctions spécifiques à Oracle. Vérifiez et refactorisez ces requêtes pour utiliser le SQL standard et exploiter les fonctionnalités de performance de Snowflake. Utilisez l’outil Profil de requête dans Snowflake pour analyser et optimiser les rapports qui s’exécutent lentement.

Phase 7 : validation et test des données

Des tests rigoureux sont essentiels pour construire la confiance des entreprises dans la nouvelle plateforme et garantir l’intégrité et les performances des données à la hauteur de leurs attentes.

Vos étapes pratiques :

  • Exécution de la validation des données :

    • Nombre de lignes : comparez les nombres de lignes entre les tables sources dans Oracle et les tables cibles dans Snowflake.

    • Validation au niveau des cellules : pour les tables critiques, effectuez une validation plus approfondie en comparant les valeurs agrégées (SUM, AVG, MIN, MAX) ou en utilisant des sommes de contrôle sur les colonnes clés.

  • Exécution de test de requêtes et de performances :

    • Requêtes de référence : exécutez un ensemble représentatif de requêtes sur Oracle et Snowflake et comparez les résultats et les performances.

    • Performance de l’outil de BI : testez les temps de chargement et l’interactivité des principaux tableaux de bord connectés à Snowflake.

  • Test d’acceptation par l’utilisateur (UAT) :

    • Impliquez les utilisateurs professionnels pour valider leurs rapports et pour qu’ils effectuent leurs tâches quotidiennes en utilisant le nouvel environnement Snowflake. Recueillez les commentaires et résolvez les problèmes.

Phase 8 : Déploiement

Le déploiement est la dernière partie de la migration d’Oracle vers Snowflake. Ce processus doit être géré avec soin afin d’éviter toute perturbation des opérations commerciales.

Vos étapes pratiques :

  • Développement d’un plan de migration :

    • Définissez l’ordre des événements pour la migration. Ceux-ci incluent l’arrêt des tâches ETL pointant vers Oracle, l’exécution d’une synchronisation finale des données, la redirection de toutes les connexions et la validation de l’intégrité du système.

  • Exécution de la synchronisation finale des données :

    • Effectuez un dernier chargement de données incrémentiel pour capturer toutes les modifications de données qui se sont produites au cours de la phase de test.

  • Mise en production :

    • Basculez l’ensemble des pipelines de données de production et des connexions utilisateur d’Oracle vers Snowflake.

    • Conservez l’environnement Oracle en lecture seule pendant une courte période comme solution de secours avant son interruption.

  • Désactivation d’Oracle :

    • Une fois que l’environnement Snowflake est stable et validé en production, vous pouvez désactiver vos serveurs de base de données Oracle pour éviter d’encourir des frais de licence et de maintenance.

Phase 9 : Optimisation et exécution

Cette phase finale est un processus permanent de gestion des performances, des coûts et de la gouvernance dans votre nouvel environnement Snowflake. L’objectif est d’affiner en continu votre configuration pour en maximiser la valeur.

Vos étapes pratiques :

  • Implémentation de l’optimisation des performances et des coûts :

    • Entrepôts de taille adaptée : surveillez en permanence les performances de la charge de travail et ajustez les tailles des entrepôts virtuels à la hausse ou à la baisse pour répondre aux SLAs au coût le plus bas possible.

    • Définition de politiques de suspension automatique agressives : définissez le délai de suspension automatique de tous les entrepôts à 60 secondes pour éviter de payer pour le temps de calcul inactif.

    • Utilisation de clés de clustering : pour les très grandes tables (plusieurs téraoctets), analysez les modèles de requête et définissez des clés de clustering pour améliorer les performances des requêtes fortement filtrées.

  • Établissement de FinOps et de gouvernance à long terme :

    • Surveillance des coûts : utilisation du schéma ACCOUNT_USAGE et des moniteurs de ressources de Snowflake pour suivre la consommation de crédit et éviter les dépassements de budget.

    • Amélioration de la sécurité : auditez régulièrement les rôles et les autorisations pour vous assurer que le principe du moindre privilège est maintenu. Mettez en œuvre des fonctionnalités de sécurité avancées comme le masquage dynamique des données et les politiques d’accès aux lignes pour les données sensibles.

Annexe

Annexe 1 : Architecture Snowflake ou Oracle

Fonctionnalité

Oracle

Snowflake

Architecture

Monolithique ou à disque partagé (RAC). Calcul et stockage étroitement liés.

Calcul, stockage et services Cloud découplés (multi-clusters, données partagées).

Stockage

Géré par la base de données sur les disques locaux, SAN, ou NAS (filesystems/ASM).

Stockage centralisé d’objets (S3, Blob, GCS) avec micro-partitionnement automatique.

Calcul

Ressources de serveur fixes (CPU, Mémoire, E/S).

Entrepôts flexibles et à la demande (clusters de calcul).

Accès simultané

Limité par les limitations du matériel du serveur et des sessions/processus.

Simultanéité élevée via des entrepôts multi-clusters qui démarrent automatiquement.

Mise à l’échelle

Verticale (serveur plus puissant) ou horizontale (nœuds RAC). Nécessite souvent un temps d’arrêt et des efforts importants.

Augmentation/diminution/arrêt instantanée du calcul (secondes) ; Le stockage s’adapte automatiquement.

Maintenance

Nécessite des DBAs pour effectuer des tâches telles que la reconstruction d’index, la collecte de statistiques et la gestion de l’espace de table.

Entièrement géré ; les tâches de maintenance sont automatisées et exécutées en arrière-plan.

Annexe 2 : Mappages de types de données

Oracle

Snowflake

Remarques

NUMBER(p,s)

NUMBER(p,s)

Mappage direct.

NUMBER

NUMBER(38)

NUMBER Oracle non spécifié mappé sur l’entier de précision maximale de Snowflake.

FLOAT, BINARY_FLOAT, BINARY_DOUBLE

FLOAT

VARCHAR2(n)

VARCHAR(n)

VARCHAR2 et VARCHAR fonctionnent de la même manière.

CHAR(n)

CHAR(n)

NVARCHAR2(n), NCHAR(n)

VARCHAR(n), CHAR(n)

Le jeu de caractères par défaut de Snowflake est UTF-8, rendant obsolètes les types de caractères nationaux spéciaux.

CLOB, NCLOB

VARCHAR / STRING

VARCHAR de Snowflake peut contenir jusqu’à 16MB.

BLOB

BINARY

BINARY de Snowflake peut contenir jusqu’à 8MB. Pour les objets plus grands, envisagez de les stocker dans des zones de préparation externes.

RAW(n)

BINARY(n)

DATE

TIMESTAMP_NTZ

DATE Oracle enregistre à la fois la date et l’heure. TIMESTAMP_NTZ est l’équivalent le plus proche.

TIMESTAMP(p)

TIMESTAMP_NTZ(p)

TIMESTAMP(p) WITH TIME ZONE

TIMESTAMP_TZ(p)

TIMESTAMP(p) WITH LOCAL TIME ZONE

TIMESTAMP_LTZ(p)

INTERVAL YEAR TO MONTH / DAY TO SECOND

VARCHAR ou réécriture de la logique

Snowflake n’a pas de type de données INTERVAL. Utilisez des fonctions date/heure pour les calculs.

XMLTYPE

VARIANT

Chargez les données XML dans une colonne VARIANT pour les requêtes semi-structurées.

Annexe 3 : SQL et les différences de fonctions

Oracle

Snowflake

Remarques

SYSDATE

CURRENT_TIMESTAMP()

CURRENT_DATE() et CURRENT_TIME() sont également disponibles.

Table DUAL

Aucun(e)

Non requis. SELECT 1 ; est une syntaxe valide dans Snowflake.

NVL(expr1, expr2)

IFNULL(expr1, expr2) ou NVL(expr1, expr2)

Les deux sont prises en charge dans Snowflake. COALESCE est la norme ANSI.

DECODE(expr, search, result…)

DECODE(expr, search, result…) ou CASE

Les instructions CASE sont plus communes et plus souples.

ROWNUM

Fonction de fenêtre ROW_NUMBER()

ROWNUM est appliqué avant ORDER BY. ROW_NUMBER() est plus explicite et commun.

LISTAGG(expr, delim)

LISTAGG(expr, delim)

La syntaxe est similaire.

Jointure extérieure (+)

LEFT/RIGHT/FULL OUTER JOIN

Snowflake requiert la syntaxe de jointure de la norme ANSI.

Opérateur MINUS

MINUS / EXCEPT

Les deux sont pris en charge par Snowflake.

Langage procédural

PL/SQL (Packages, procédures, déclencheurs)

Exécution de scripts Snowflake, JavaScript, Java, Python

Séquences

CREATE SEQUENCE

CREATE SEQUENCE

Transactions

COMMIT, ROLLBACK

COMMIT, ROLLBACK

Indications

/*+ … */

Aucun(e)