Utiliser le routage d'instructions efficace en activant ProxySQL sur Autonomous Database

ProxySQL permet un accès unifié à plusieurs bases de données autonomes en acheminant les instructions LMD et les requêtes, et élimine la nécessité de consolider physiquement toutes les données dans une seule base de données.

Sujets

A propos du routage efficace des instructions avec ProxySQL sur Autonomous Database

ProxySQL sur Autonomous Database vous permet d'utiliser plusieurs instances Autonomous Database et facilite l'accès aux données et leur analyse comme si elles étaient stockées au même endroit.

Vous pouvez utiliser ProxySQL lorsque vous avez besoin d'utiliser une configuration volumineuse impliquant plusieurs bases de données autonomes. ProxySQL vous offre un accès unifié à différentes bases de données et vous évite d'avoir à déplacer physiquement les données au même endroit.

Lorsque vous activez ProxySQL, vous désignez une instance Autonomous Database en tant qu'instance de routeur et des instances Autonomous Database en tant qu'instances cible. L'instance de routeur inclut une table de routage qui détermine la façon dont une instruction est distribuée (mise en correspondance) avec une ou plusieurs instances cible. Une instance cible inclut une table d'acceptation. La table d'acceptation est similaire à la table de routage et contient des entrées indiquant que l'instance accepte les réacheminements d'instruction à partir du routeur.

Selon la méthode de routage que vous sélectionnez, les instructions sont automatiquement mises en correspondance à partir de l'instance de routeur vers une ou plusieurs instances cible. Une application se connecte à l'instance de routeur et s'exécute sur l'instance de routeur et Autonomous Database redirige les instructions vers des instances cible.

Voici quelques-uns des avantages de l'activation de ProxySQL par rapport à l'utilisation d'une seule base de données Autonomous Database de très grande taille :

  • ProxySQL assure l'autonomie et l'indépendance des bases de données pour les opérations telles que la gestion du cycle de vie et les tâches d'administration. Par exemple, à l'aide de ProxySQL, les opérations de base de données, y compris la sauvegarde et la restauration, et des fonctionnalités telles qu'Autonomous Data Guard sont gérées indépendamment dans chaque instance Autonomous Database.

  • ProxySQL permet de gérer efficacement des bases de données très volumineuses en divisant les données entre plusieurs instances Autonomous Database.

Il existe plusieurs termes à connaître lorsque vous travaillez avec ProxySQL :

Instance de routeur : une instance de routeur est désignée lorsque vous activez ProxySQL. Une table de routage détermine la façon dont une instruction est distribuée (mise en correspondance) avec une ou plusieurs instances cible. Selon la méthode de routage indiquée, les instructions de l'instance de routeur sont automatiquement mises en correspondance avec des instances cible.

Instance cible : l'instance cible est désignée lorsque vous créez un mapping sur l'instance de routeur. Une table d'acceptation est ajoutée sur chaque instance cible.

Table de routage : une table de routage contient des entrées de mapping cible qui indiquent l'instance vers laquelle les instructions sont automatiquement acheminées.

Table d'acceptation : une table d'acceptation contient des entrées indiquant que l'instance accepte les réacheminements d'instruction à partir du routeur.

Conditions d'utilisation de ProxySQL

Voici les exigences de ProxySQL :

  • L'activation de ProxySQL est uniquement prise en charge pour les instances Autonomous Database qui se trouvent dans un pool élastique. L'instance de routeur et toutes les instances cible doivent être membres du même pool élastique.

  • L'instance de routeur et toutes les instances cible doivent se trouver dans la même région.

  • Les métadonnées des objets que vous acheminez doivent correspondre sur les instances de routeur et de cible. Le concepteur d'applications est responsable de la présence des métadonnées des objets présents dans une instance cible dans l'instance de routeur. Par exemple, si vous avez une table nommée EMPLOYEES dans l'instance cible, vous devez également avoir une table avec des métadonnées correspondantes nommées EMPLOYEES dans l'instance de routeur. La table de l'instance de routeur ne doit pas nécessairement être vide (métadonnées uniquement).

Recommandation pour l'activation de ProxySQL

Les instances que vous ajoutez en tant que routeur et cibles peuvent être de n'importe quel type de charge globale Autonomous Database. S'il existe des entrées dans la table de routage (mise en correspondance), les instructions sur les objets spécifiés dans ces entrées sont acheminées vers les instances cible correspondantes, quel que soit le type de charge globale de la cible. Oracle recommande que toutes les instances de base de données theAutonomous utilisent le type de charge globale Data Warehouse.

Routage automatique des instructions avec ProxySQL activé

Avec ProxySQL, vous pouvez distribuer des instructions entre les cibles à l'aide de l'une des méthodes de routage prises en charge.

Remarque

Quelle que soit la méthode de routage (mappage) que vous décidez d'utiliser, il incombe au concepteur de schéma d'application de s'assurer que les métadonnées des objets placés dans une instance cible sont également disponibles dans l'instance de routeur. Par exemple, si vous avez une table nommée EMPLOYEES dans l'instance cible, vous devez également avoir une table avec des métadonnées correspondantes nommées EMPLOYEES dans l'instance de routeur. La table de l'instance de routeur ne doit pas être vide.
  • Routage au niveau du schéma : tous les objets d'un schéma sont mis en correspondance avec une instance cible unique. Vous pouvez mettre en correspondance plusieurs schémas avec une seule instance cible. Toutefois, les instructions d'un schéma ne peuvent pas être mises en correspondance entre plusieurs instances cible, ce qui signifie que le même schéma ne peut pas être utilisé à la fois pour le routage de schéma et d'objet.

    Pour indiquer le routage de niveau schéma, appelez la procédure DBMS_PROXY_SQL.ADD_MAPPING avec le compteur object_name défini sur la valeur "*".


    Description de l'image proxysql-schema.png
    Description de l'image proxysql-schema.png

    Dans cet exemple, les métadonnées des objets du schéma A sont présentes à la fois dans la base de données Autonomous Database 1 cible et dans l'instance de routeur, et les métadonnées des objets du schéma B sont présentes à la fois dans la base de données Autonomous Database 2 cible et dans l'instance de routeur, etc.

  • Routage au niveau de l'objet : les objets d'un schéma sont mis en correspondance entre plusieurs instances cible.

    Pour indiquer le routage au niveau de l'objet, appelez la procédure DBMS_PROXY_SQL.ADD_MAPPING avec le paramètre object_name défini sur un nom de table.


    Description de l'image proxysql-object.png
    Description de l'image proxysql-object.png

    Dans cet exemple, les métadonnées de la table A sont présentes à la fois dans la cible 1 et dans l'instance de routeur, et les métadonnées de la table B sont présentes à la fois dans la cible 2 et dans l'instance de routeur, etc.

  • Routage hybride : les objets d'un schéma sont acheminés à l'aide d'une combinaison de routage de niveau schéma et de routage de niveau objet.


    Description de l'image proxysql-hybrid.png
    Description de l'image proxysql-hybrid.png

    Dans cet exemple, les métadonnées du schéma A sont présentes à la fois dans la base de données Autonomous Database 1 cible et dans l'instance de routeur, et les métadonnées de la table B (dans le schéma B) sont présentes dans la base de données Autonomous Database 2 cible et dans l'instance de routeur, etc.

Mappage de service avec routage automatique des relevés lorsque ProxySQL est activé

Lorsque la table de routage indique un mapping avec une base de données cible, le même service que vous êtes connecté à la base de données du routeur est utilisé pour l'accès aux données dans la base de données cible.

Par exemple, si une session est connectée au service HIGH sur l'instance de routeur, une instruction ou un fragment d'instruction acheminé vers une instance cible utilise également le service HIGH. De même, si une session est connectée au service MEDIUM sur l'instance de routeur, une instruction acheminée vers une instance cible utilise le service MEDIUM.

Si le service utilisé pour la connexion sur l'instance de routeur n'est pas disponible sur une instance cible, l'instruction ou le fragment d'instruction acheminé vers l'instance cible utilise le service MEDIUM (les services disponibles dépendent du type de charge globale Autonomous Database).

Activer l'acheminement des relevés et définir le mappage des schémas

Cette section explique comment configurer ProxySQL pour le routage automatique des instructions d'un routeur principal vers une ou plusieurs instances de base de données cible.

Activer le routage des instructions et définir la correspondance d'objets entre routeur et instances cible

Pour configurer le routage des instructions, vous activez ProxySQL sur l'instance de routeur et définissez le ou les schémas dont les instructions sont mises en correspondance (envoyées) avec les bases de données cible.

Les prérequis suivants permettent d'activer le routage automatique des instructions :

  • Créez l'instance Autonomous Database que vous prévoyez d'utiliser pour l'instance de routeur ou identifiez une instance Autonomous Database existante en tant qu'instance de routeur.

  • Créez les instances cible ou identifiez-les à partir d'instances Autonomous Database existantes.

  • Assurez-vous que l'instance de routeur et toute instance cible sur laquelle vous redirigez les requêtes ont des métadonnées correspondantes pour tous les objets que vous mettez en correspondance du routeur avec une cible.

    Quelle que soit la méthode de routage (mappage) que vous décidez d'utiliser, il incombe au concepteur de schéma d'application de s'assurer que les métadonnées des objets placés dans une instance cible sont également disponibles dans l'instance de routeur. Par exemple, si vous avez une table nommée EMPLOYEES dans l'instance cible, vous devez également avoir une table avec des métadonnées correspondantes nommées EMPLOYEES dans l'instance de routeur. La table de l'instance de routeur ne doit pas être vide.

  • Dans les choix disponibles, déterminez le type de routage d'instruction à utiliser : Routage au niveau schéma, Routage au niveau objet ou Routage hybride.

Pour activer le routage automatique des instructions et ajouter des entrées de mapping cible à la table de routage :

  1. Sur une instance Autonomous Database, exécutez DBMS_PROXY_SQL.ENABLE_ROUTING pour activer le routage automatique des instructions.

    Par exemple :

    BEGIN
       DBMS_PROXY_SQL.ENABLE_ROUTING;
    END;
    /

    L'instance sur laquelle vous exécutez DBMS_PROXY_SQL.ENABLE_ROUTING devient l'instance de routeur. Cela permet le routage automatique des relevés et crée la table de routage.

    Pour plus d'informations, reportez-vous à Procédure ENABLE_ROUTING.

  2. Exécutez DBMS_PROXY_SQL.ADD_MAPPING pour définir le mapping entre le routeur et une cible. Cette opération crée une entrée dans la table de routage qui indique l'instance cible vers laquelle les requêtes sont automatiquement acheminées.

    Exemple d'activation du routage au niveau objet :

    BEGIN
     DBMS_PROXY_SQL.ADD_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => 'INVENTORY',
        database_ocid  => 'TARGET1_DATABASE_OCID');
    END;
    /

    Exemple d'activation du routage au niveau schéma :

    BEGIN
     DBMS_PROXY_SQL.ADD_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => '*',
        database_ocid  => 'TARGET2_DATABASE_OCID');
    END;
    /

    Utilisez l'interrogation suivante pour extraire l'OCID de base de données :

    SELECT json_value(cloud_identity,'$.DATABASE_OCID') 
       FROM v$pdbs;
    

    Le paramètre object_owner indique le propriétaire de l'objet.

    Le paramètre object_name indique l'objet.

    Le paramètre database_ocid indique l'OCID de l'instance cible. La valeur du paramètre database_ocid doit être en majuscules. Pour déterminer l'OCID de l'instance cible, connectez-vous à l'instance cible en tant qu'utilisateur ADMIN et exécutez l'interrogation suivante :

    SELECT json_value(cloud_identity, '$.DATABASE_OCID') FROM v$pdbs;

    Pour plus d'informations, reportez-vous à Obtention des détails de location.

    Cette opération crée une entrée de routage dans la table de routage et définit une correspondance d'objet avec une instance cible.

    Pour plus d'informations, reportez-vous à Procédure ADD_MAPPING.

  3. Exécutez DBMS_PROXY_SQL.ADD_MAPPING pour ajouter des mappings cible supplémentaires, si nécessaire.

    Par exemple :

    BEGIN
     DBMS_PROXY_SQL.ADD_MAPPING ( 
        object_owner   => 'DW_USER_1',
        object_name    => 'CUSTOMERS',
        database_ocid  => 'TARGET3_DATABASE_OCID');
    END;
    /

Vous pouvez interroger la vue DBA_PROXY_SQL_MAPPINGS pour répertorier les enregistrements dans la table de routage. Pour plus d'informations, reportez-vous à DBA_PROXY_SQL_MAPPINGS View.

Accepter le routage des relevés sur les instances cible

Vous devez accepter le routage d'instructions sur une instance cible pour autoriser le mapping à partir de l'instance de routeur.

Pour autoriser (accepter) les redirections d'instructions de l'instance de routeur vers une instance cible :

  1. Sur l'instance cible, exécutez DBMS_PROXY_SQL.ACCEPT_MAPPING.

    Par exemple :

    BEGIN
     DBMS_PROXY_SQL.ACCEPT_MAPPING ( 
        object_owner          => 'DW_USER',
        router_database_ocid  => 'ROUTER_DATABASE_OCID'); 
     END;
    /

    object_owner est le propriétaire pour lequel la cible accepte le routage d'instruction.

    router_database_ocid indique l'OCID de l'instance Autonomous Database du routeur. Indique l'instance à partir de laquelle la cible accepte les demandes d'instruction redirigées entrantes.

    Le mappage d'acceptation est un par propriétaire d'objet. Par conséquent, une seule acceptation peut être requise pour plusieurs mappages d'objet sur l'instance de routeur.

    Vous pouvez indiquer la vue DBMS_PROXY_SQL_ACCEPTED_MAPPINGS pour répertorier les enregistrements dans la table d'acceptation. Pour plus d'informations, reportez-vous à DBA_PROXY_SQL_ACCEPTED_MAPPINGS View.

    Pour plus d'informations, reportez-vous à Procédure ACCEPT_MAPPING.

  2. Si plusieurs cibles sont indiquées dans le mapping de routeur, exécutez DBMS_PROXY_SQL.ACCEPT_MAPPING sur chaque cible.

    Pour plus d'informations, reportez-vous à Procédure ACCEPT_MAPPING.

Soumettre des relevés via ProxySQL

Pour tirer parti du routage automatique d'instructions, vous devez vous connecter à l'instance de routeur gérée par ProxySQL et la soumettre.

Lorsque vous envoyez des requêtes et des instructions LMD avec ProxySQL activé, vous devez vous connecter à l'instance de routeur pour tirer parti du routage automatique des instructions.

Arrêter le routage des instructions vers une instance cible

Effectuez ces étapes sur une instance Autonomous Database cible pour l'empêcher d'accepter des instructions routées à partir du routeur ProxySQL.

  1. Exécutez DBMS_PROXY_SQL.REJECT_MAPPING sur une instance cible afin de rejeter le routage d'instruction pour le propriétaire indiqué.

    Par exemple :

    BEGIN
     DBMS_PROXY_SQL.REJECT_MAPPING ( 
        object_owner          => 'DW_USER',
        router_database_ocid  => 'ROUTER_DATABASE_OCID');
     END;
    /

    Le paramètre object_owner indique le nom du propriétaire.

    Le paramètre router_database_ocid indique l'OCID de l'instance de routeur.

    L'instance Autonomous Database cible dans laquelle vous exécutez cette procédure ne demande plus de demandes de routage à partir de l'instance de routeur indiquée pour le propriétaire de l'objet indiqué.

  2. Exécutez DBMS_PROXY_SQL.REJECT_MAPPING sur des cibles supplémentaires, le cas échéant.

Pour plus d'informations, reportez-vous à Procédure REJECT_MAPPING.

Enlever le schéma ou le mappage d'objet de l'instance de routeur

Fournit les étapes permettant de supprimer un mapping spécifique de la base de données de routeur gérée par ProxySQL.

  1. Vous pouvez utiliser la procédure DBMS_PROXY_SQL.REMOVE_MAPPING pour enlever une entrée de mapping précédemment ajoutée pour l'objet indiqué. Par exemple :

    Exemple avec un tableau :

    BEGIN
     DBMS_PROXY_SQL.REMOVE_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => 'INVENTORY');
     END;
    /
    Cet exemple supprime l'entrée de mapping de la table INVENTORY de la table de routage. Une fois cette procédure exécutée, les requêtes sur la table INVENTORY ne sont acheminées vers aucune instance Autonomous Database cible.

    Exemple : avec un schéma :

    BEGIN
     DBMS_PROXY_SQL.REMOVE_MAPPING ( 
        object_owner   => 'DW_USER',
        object_name    => '*');
     END;
    /
    Cet exemple enlève l'entrée de mapping du schéma DW_USER de la table de routage. Une fois cette procédure exécutée, les requêtes sur le schéma DW_USER ne sont acheminées vers aucune instance Autonomous Database cible.

    Le paramètre object_owner indique le propriétaire.

    Le paramètre object_name indique le nom de la table.

    Pour plus d'informations, reportez-vous à Procédure REMOVE_MAPPING.

Désactiver le routage des relevés

Affiche les étapes du routage automatique des instructions en désactivant ProxySQL.

Exécutez DBMS_PROXY_SQL.DISABLE_ROUTING sur l'instance de routeur pour désactiver ProxySQL et pour désactiver le routage automatique des instructions vers les instances cible.

Par exemple :

BEGIN
 DBMS_PROXY_SQL.DISABLE_ROUTING;
END;
/

Cela désactive ProxySQL et désactive le routage automatique des instructions sur le routeur.

Lorsque vous désactivez ProxySQL, les entrées de mise en correspondance d'instructions dans la table de routage de l'instance de routeur ne sont pas supprimées. Cela signifie que si vous réactivez ProxySQL et que la table de routage contient des entrées existantes, le routage automatique des instructions achemine les instructions vers les instances cible, comme indiqué dans la table de routage. Utilisez la procédure DBMS_PROXY_SQL.REMOVE_MAPPING si vous souhaitez enlever les entrées de table de routage existantes avant de réactiver ProxySQL.

Pour plus d'informations, reportez-vous à Procédure DISABLE_ROUTING.

Routage automatique des instructions avec les notes ProxySQL

Répertorie les limites et les remarques importantes sur le routage automatique des instructions lorsque ProxySQL est activé.

  • L'utilisateur ADMIN dispose des privilèges permettant de gérer ProxySQL. Si vous souhaitez activer un autre utilisateur, vous devez accorder les privilèges suivants

    • Privilège EXECUTE sur le package DBMS_PROXY_SQL.

    • Privilège READ sur la vue DBA_PROXY_SQL_MAPPINGS.

    • Privilège READ sur la vue DBA_PROXY_SQL_ACCEPTED_MAPPINGS.

  • Le routage automatique des relevés reprend de manière transparente lorsque :
    • L'instance Autonomous Database cible bascule vers une base de données de secours Autonomous Data Guard locale.

    • Vous effectuez une permutation d'une instance Autonomous Database cible vers une base de données de secours Autonomous Data Guard locale.

    Toutefois, le routage automatique des instructions s'arrête après un basculement ou une permutation vers une base de données de secours Autonomous Data Guard inter-région.