Gestion et stockage de fichiers dans un référentiel de code cloud avec Autonomous Database

Autonomous Database fournit des routines permettant de gérer et de stocker des fichiers dans des référentiels de code cloud (Git). Les référentiels de code cloud pris en charge sont les suivants : GitHub, AWS CodeCommit et Azure Repos.

A propos des référentiels de code cloud avec Autonomous Database

Le package DBMS_CLOUD_REPO fournit une interface unique permettant d'accéder à un référentiel de code cloud à partir d'Autonomous Database.

Les référentiels de code cloud pris en charge fournissent les fonctionnalités suivantes :

  • Système de contrôle des versions Git : Git est un logiciel qui permet de suivre les modifications apportées à un ensemble de fichiers. Il est généralement utilisé pour coordonner le travail des programmeurs qui développent de manière collaborative du code source lors du développement logiciel. Ses objectifs incluent la vitesse, l'intégrité des données et la prise en charge des workflows non linéaires et distribués.

  • Répertoire Git : un référentiel Git est un stockage virtuel de votre projet. Il vous permet d'enregistrer des versions de votre code, auxquelles vous pouvez accéder en cas de besoin.

Les API DBMS_CLOUD_REPO utilisent un descripteur de référentiel (objet REPO). Le descripteur de référentiel est un objet JSON opaque qui représente le référentiel de code cloud d'un fournisseur cloud spécifique. Un objet REPO peut être transmis à différentes API DBMS_CLOUD_REPO. Cet objet opaque garantit que les procédures et les fonctions DBMS_CLOUD_REPO sont compatibles avec plusieurs clouds. Il n'est pas nécessaire de modifier le code lors de la migration d'un fournisseur de référentiel de code cloud vers un autre référentiel de code cloud.

Autonomous Database fournit les opérations suivantes pour vous aider à utiliser les référentiels de code cloud :

Initialisation d'un référentiel de code cloud

Les routines d'initialisation DBMS_CLOUD_REPO initialisent un référentiel de code cloud. Une fois que vous avez obtenu un descripteur de référentiel de code cloud, vous pouvez l'utiliser pour accéder au référentiel.

Pour initialiser un référentiel de code cloud :

  1. Créez des informations d'identification permettant d'accéder au référentiel de code cloud.

    Reportez-vous à Procédure CREATE_CREDENTIAL pour plus d'informations sur la création d'informations d'identification.

  2. Selon le référentiel, GitHub, Azure Repos ou AWS CodeCommit, appelez DBMS_CLOUD_REPO.INIT_REPO avec les paramètres du référentiel spécifique pour obtenir un descripteur de référentiel.

    Les exemples suivants fournissent des exemples pour chaque référentiel de code cloud pris en charge.

    • GitHub Initialisation :

      DEFINE repo_name='test_repo';
      DEFINE cred_name='GITHUB_CRED';
      VAR repo clob
      BEGIN
        :repo := DBMS_CLOUD_REPO.INIT_REPO(
                      params => JSON_OBJECT('provider' value 'github',
                                            'repo_name' value '&repo_name',
                                            'credential_name' value '&cred_name',
                                            'owner'           value '<myuser>')
                );
      END;
      /
      
    • Initialisation pour Azure Repos :

      DEFINE repo_name='test_repo';
      DEFINE cred_name='AZURE_REPO_CRED';
      VAR repo clob
      BEGIN
        :repo := DBMS_CLOUD_REPO.INIT_REPO(
                      params => JSON_OBJECT('provider' value 'azure',
                                            'repo_name' value '&repo_name',
                                            'credential_name' value '&cred_name',
                                            'organization' value '<myorg>',
                                            'project' value '<myproject>')
                );
      END;
      /
    • Initialisation AWS CodeCommit :

      DEFINE repo_name='test_repo';
      DEFINE cred_name='AWS_REPO_CRED';
      VAR repo clob
      BEGIN
        :repo := DBMS_CLOUD_REPO.INIT_REPO(
                      params => JSON_OBJECT('provider' value 'aws',
                                            'repo_name' value '&repo_name',
                                            'credential_name' value '&cred_name',
                                            'region' value 'us-east-1')
                );
      END;
      /

Pour plus d'informations sur les fonctions d'initialisation, reportez-vous à DBMS_CLOUD_REPO Opérations d'initialisation.

Création et gestion d'un référentiel de code cloud

Les routines de gestion DBMS_CLOUD_REPO vous permettent de gérer un référentiel de code cloud en créant, en répertoriant, en mettant à jour et en supprimant un référentiel.

Tout d'abord, obtenez un descripteur de référentiel de code cloud permettant d'accéder à un référentiel. Pour plus de détails, reportez-vous à Initialisation d'un référentiel de code cloud.

  1. Pour créer un référentiel, procédez comme suit :
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.CREATE_REPOSITORY(
            repo => :repo,
            description => 'test repo'
      );
    END;
    /
  2. Pour mettre à jour un référentiel :
    
    VAR repo clob
    DEFINE repo_name='test_repo';
    BEGIN
      DBMS_CLOUD_REPO.UPDATE_REPOSITORY(
            repo => :repo,
            new_name => '&repo_name' || '_new'
      );
    END;
    /
  3. Pour répertorier les référentiels, procédez comme suit :
    col id format a30
    col name format a10
    col description format a15
    select id, name, bytes, private, description from
      DBMS_CLOUD_REPO.LIST_REPOSITORIES(:repo);
    
  4. Pour supprimer un référentiel, procédez comme suit :
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_REPOSITORY(
            repo => :repo
      );
    END;
    /

Pour plus d'informations, reportez-vous à DBMS_CLOUD_REPO Opérations de gestion de référentiel.

Créer et gérer des branches dans un référentiel de code cloud

Les routines de gestion DBMS_CLOUD_REPO vous permettent de gérer les branches du référentiel de code cloud en créant, répertoriant, fusionnant et supprimant des branches dans un référentiel.

Pour effectuer des opérations de gestion de branchement de référentiel de code cloud, vous devez d'abord :

  1. Pour créer une branche dans un référentiel de code cloud, procédez comme suit :
    BEGIN
      DBMS_CLOUD_REPO.CREATE_BRANCH (
        repo            => l_repo,
        branch_name     => 'test_branch',
        parent_branch   => 'main'
        );
    END;
    /
  2. Pour supprimer une branche dans un référentiel de code cloud, procédez comme suit :
    BEGIN
      DBMS_CLOUD_REPO.DELETE_BRANCH (
          repo        => l_repo,
          branch_name => 'test_branch'
      );
    END;
    /
  3. Pour fusionner un branchement dans un autre branchement dans un référentiel de code cloud, procédez comme suit :
    BEGIN
      DBMS_CLOUD_REPO.MERGE_BRANCH (
        repo               => l_repo,
        branch_name        => 'test_branch',
        target_branch_name => 'main'
        );
    END;
    /
  4. Pour répertorier les branches dans un référentiel de code cloud, procédez comme suit :
    
    SELECT * FROM DBMS_CLOUD_REPO.LIST_BRANCHES (repo => l_repo);
    
  5. Vous pouvez répertorier les validations dans une branche du référentiel de code cloud en fonction des éléments suivants :
    • référentiel

    • Branchement

    • Chemin du fichier de la branche

    • SHA/commit_id

      Remarque

      SHA est une chaîne de 40 caractères de somme de contrôle composée de caractères hexadécimaux (0-9 et a-f).

    Pour répertorier les validations en fonction du référentiel :

    SELECT * FROM DBMS_CLOUD_REPO.LIST_COMMITS (
        repo => :repo);

    Pour répertorier les validations en fonction du référentiel, de commit_id et du chemin de fichier du branchement, procédez comme suit :

    SELECT * FROM DBMS_CLOUD_REPO.LIST_COMMITS (
        repo        => l_repo,
        commit_id   => '66dd2b23b74cd0afabd11af66c6aa9c550540ba6',
        file_path   => 'sub_dir/test11.sql'

    Pour répertorier les validations en fonction du référentiel et du chemin de fichier du branchement, procédez comme suit :

    SELECT * FROM DBMS_CLOUD_REPO.LIST_COMMITS (
        repo        => :repo, 
        branch_name => 'branch1');

    Pour répertorier les validations en fonction du référentiel, de branch_name et du chemin de fichier du branchement, procédez comme suit :

    SELECT * FROM DBMS_CLOUD_REPO.LIST_COMMITS (
        repo         => :repo, 
        branch_name  => 'branch1',
        file_path    => 'sub_dir/test11.sql');

    Pour répertorier les validations en fonction du référentiel et de la valeur commit_id du branchement, procédez comme suit :

    SELECT * FROM DBMS_CLOUD_REPO.LIST_COMMITS (
        repo => :repo,
        commit_id =>'66dd2b23b74cd0afabd11af66c6aa9c550540ba6');

Pour plus d'informations, reportez-vous à DBMS_CLOUD_REPO Opérations de gestion de branche de référentiel.

Exporter des objets de schéma vers la branche du référentiel de code cloud

La routine de gestion DBMS_CLOUD_REPO vous permet d'exporter les métadonnées des objets d'un schéma vers la branche du référentiel de code cloud. Vous pouvez filtrer votre liste en fonction des noms d'objet ou des types d'objet.

Pour exporter des métadonnées de schéma, vous devez d'abord :

Utilisez la procédure EXPORT_SCHEMA pour exporter les métadonnées des objets de votre schéma vers une branche du référentiel de code cloud :

BEGIN
  DBMS_CLOUD_REPO.EXPORT_SCHEMA(
    repo          => l_repo,
    schema_name   => 'USER1',
    file_path     => 'myschema_ddl.sql'
    filter_list   =>
        to_clob('[    
             { "match_type":"equal",
                 "type":"table"
             },
             { "match_type":"not_equal",
                 "type":"view"
             },
             { "match_type":"in",
                 "type":"table",
                 "name": " ''EMPLOYEE_SALARY'',''EMPLOYEE_ADDRESS'' "
             },
             { "match_type":"equal",
                 "type":"sequence",
                 "name": "EMPLOYEE_RECORD_SEQ"
             },
             { "match_type":"like",
                 "type":"table",
                 "name": "%OFFICE%"
             }    
        ]'
     );
  );
END;
/

Cet exemple exporte les métadonnées du schéma USER1 dans le référentiel l_repo. L'export inclut les métadonnées des tables EMPLOYEE_SALARY et EMPLOYEE_ADDRESS, ainsi que tout nom de table contenant OFFICE. Il exporte également la séquence EMPLOYEE_RECORD_SEQ et exclut les vues du schéma.

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

Utilisation des opérations de fichier avec un référentiel de code cloud

Les opérations de fichier DBMS_CLOUD_REPO vous permettent de créer, d'obtenir, de répertorier, de mettre à jour ou de supprimer des fichiers dans un référentiel de code cloud.

Obtenez un descripteur de référentiel de code cloud avant d'utiliser les opérations de fichier. Pour plus de détails, reportez-vous à Initialisation d'un référentiel de code cloud.

Vous devez également créer un référentiel avant d'utiliser des fichiers. Pour plus de détails sur la création et la gestion d'un référentiel de code cloud.

  1. Pour obtenir un fichier :
    
    SELECT DBMS_CLOUD_REPO.GET_FILE(repo => :repo, file_path => 'test1.sql')
    
  2. Pour créer un fichier, procédez comme suit :
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.PUT_FILE(
            repo => :repo,
            file_path => 'test1.sql',
            contents => UTL_RAW.cast_to_raw('create table t1 (x varchar2(30))' || CHR(10) || '/')
      );
    END;
    /
  3. Pour mettre à jour un fichier :
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.PUT_FILE(
            repo => :repo,
            file_path => 'test1.sql',
            contents => UTL_RAW.cast_to_raw('create table t2 (x varchar2(30))' || CHR(10) || '/')
      );
    END;
    /
  4. Pour répertorier des fichiers, procédez comme suit :
    SELECT id, name, bytes, url FROM DBMS_CLOUD_REPO.LIST_FILES(repo => :repo);
    
  5. Pour supprimer un fichier, procédez comme suit :
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_FILE(
            repo => :repo,
            file_path => 'test1.sql'
      );
    END;
    /

Pour plus d'informations, reportez-vous à DBMS_CLOUD_REPO Opérations de fichier.

Utilisation des opérations d'installation SQL avec un référentiel de code cloud

Les opérations d'installation SQL DBMS_CLOUD_REPO vous permettent de stocker et de télécharger des scripts SQL à partir d'un référentiel de code cloud.

Obtenez un descripteur de référentiel de code cloud avant d'utiliser les opérations d'installation SQL. Pour plus de détails, reportez-vous à Initialisation d'un référentiel de code cloud.

Vous devez également créer un référentiel avant d'utiliser les opérations d'installation SQL. Pour plus de détails sur la création et la gestion d'un référentiel de code cloud.

Les scripts sont conçus en tant que scripts d'installation de schéma et non en tant que scripts SQL génériques :

  • Les scripts ne peuvent pas contenir de commandes propres au client SQL*Plus.
  • Ils ne peuvent pas contenir de variables attachées ni de scripts paramétrés.
  • Les instructions SQL doivent se terminer par une barre oblique sur une nouvelle ligne (/).
  • Les scripts peuvent contenir des instructions DDL et DML PLSQL, mais les instructions SELECT directes ne sont pas prises en charge. L'utilisation de l'instruction SELECT dans un bloc PL/SQL est prise en charge.

Les instructions SQL pouvant être exécutées à l'aide de la commande EXECUTE IMMEDIATE fonctionnent si elles ne contiennent pas de variables attachées ou de définitions.

  1. Pour télécharger des métadonnées DDL vers un référentiel Cloud Code :
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.EXPORT_OBJECT(
            repo => :repo,
            object_type => 'PACKAGE',
            object_name => 'MYPACK',
            file_path   => 'mypack.sql'
      );
    END;
    /
  2. Pour installer des instructions SQL à partir d'un fichier :
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.INSTALL_FILE(
            repo => :repo,
            file_path     => 'test3.sql',
            stop_on_error => FALSE
      );
    END;
    /
  3. Pour installer des instructions SQL à partir d'une mémoire tampon, procédez comme suit :
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.INSTALL_SQL(
            repo => :repo,
            content   => 'create table t1 (x varchar2(30))' || CHR(10) || '/',
            stop_on_error => FALSE
      );
    END;
    /

Pour plus d'informations, reportez-vous à DBMS_CLOUD_REPO Opérations d'installation SQL.