Gérer et stocker des fichiers dans un référentiel de code en nuage avec une base de données autonome

La base de données autonome fournit des sous-programmes pour gérer et stocker des fichiers dans des référentiels de code en nuage (Git). Les référentiels de code en nuage pris en charge sont : GitHub, AWS CodeCommit et Azure Repos.

Rubriques connexes

À propos des référentiels de code en nuage avec Autonomous Database

L'ensemble DBMS_CLOUD_REPO fournit une interface unique pour accéder à un référentiel de code en nuage à partir de la base de données autonome.

Les référentiels de code en nuage pris en charge offrent les fonctionnalités suivantes :

  • Système de contrôle des versions Git : Git est un logiciel permettant d'effectuer le suivi des modifications apportées à un jeu de fichiers. Il est généralement utilisé pour coordonner le travail entre des programmeurs qui développent du code source en collaboration lors du développement de logiciels. Ses objectifs comprennent la vitesse, l'intégrité des données et la prise en charge des flux de travail distribués et non linéaires.

  • Référentiel 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 lorsque vous en avez 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 un référentiel de code en nuage d'un fournisseur de services infonuagiques spécifique. Un objet REPO peut être transmis à différentes API DBMS_CLOUD_REPO. Cet objet opaque garantit que les procédures et fonctions DBMS_CLOUD_REPO sont compatibles entre plusieurs nuages; vous n'avez pas besoin de modifier votre code lorsque vous migrez d'un fournisseur de référentiel de code en nuage vers un autre référentiel de code en nuage.

La base de données autonome fournit les éléments suivants pour vous aider à utiliser des référentiels de code en nuage :

Initialiser un référentiel de code en nuage

Les sous-programmes d'initialisation de DBMS_CLOUD_REPO initialisent un référentiel de code en nuage. Après avoir obtenu un descripteur de référentiel de code en nuage, utilisez-le pour accéder au référentiel de code en nuage.

Pour initialiser un référentiel de code en nuage :

  1. Create a credential to access the Cloud Code Repository.

    Voir CREATE_CREDENTIAL Procédure pour plus d'informations sur la création de données 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 concerné pour obtenir un descripteur de référentiel.

    Vous trouverez ci-après des exemples concernant chaque référentiel de code en nuage 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 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;
      /

Voir Opérations d'initialisation de DBMS_CLOUD_REPO pour plus de détails sur les fonctions d'initialisation.

Créer et gérer un référentiel de code en nuage

Les sous-programmes de gestion DBMS_CLOUD_REPO vous permettent de gérer un référentiel de code en nuage en créant, en listant, en mettant à jour ou en supprimant un référentiel.

Commencez par obtenir un descripteur de référentiel de code en nuage pour fournir l'accès à un référentiel. Pour plus de détails, voir Initialiser un référentiel de code en nuage.

  1. Pour créer un référentiel :
    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 lister les référentiels :
    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 :
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_REPOSITORY(
            repo => :repo
      );
    END;
    /

Créer et gérer des succursales dans un référentiel de code en nuage

Les sous-programmes de gestion DBMS_CLOUD_REPO vous permettent de gérer les branches du référentiel de code en nuage en créant, en listant, en fusionnant ou en supprimant des branches dans un référentiel.

Pour effectuer des opérations de gestion de branche du référentiel de code en nuage, vous devez d'abord :

  1. Pour créer une branche dans un référentiel de code en nuage :
    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 en nuage :
    BEGIN
      DBMS_CLOUD_REPO.DELETE_BRANCH (
          repo        => l_repo,
          branch_name => 'test_branch'
      );
    END;
    /
  3. Pour fusionner une branche dans une autre branche d'un référentiel de code en nuage :
    BEGIN
      DBMS_CLOUD_REPO.MERGE_BRANCH (
        repo               => l_repo,
        branch_name        => 'test_branch',
        target_branch_name => 'main'
        );
    END;
    /
  4. Pour lister les branches dans un référentiel de code en nuage :
    
    SELECT * FROM DBMS_CLOUD_REPO.LIST_BRANCHES (repo => l_repo);
    
  5. Vous pouvez lister les validations dans une branche du référentiel de code en nuage en fonction des éléments suivants :
    • Référentiel

    • Branche

    • Chemin d'accès au fichier de la branche

    • SHA/commit_id

      Note :

      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 lister les validations en fonction du référentiel :

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

    Pour lister les validations en fonction du référentiel, de commit_id et du chemin d'accès au fichier de la branche :

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

    Pour lister les validations en fonction du référentiel et du chemin d'accès au fichier de la branche :

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

    Pour lister les validations en fonction du référentiel, de branch_name et du chemin d'accès au fichier de la branche :

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

    Pour lister les validations en fonction du référentiel et de commit_id de la branche :

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

Exporter les objets de schéma vers la branche du référentiel de code en nuage

Le sous-programme de gestion DBMS_CLOUD_REPO vous permet d'exporter les métadonnées des objets d'un schéma vers la branche Référentiel de code en nuage. 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 en nuage :

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'exportation 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.

Voir Procédure EXPORT_SCHEMA pour plus d'informations.

Utiliser des opérations de fichier avec un référentiel de code en nuage

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

Obtenez un descripteur de référentiel de code en nuage avant d'utiliser les opérations de fichier. Pour plus de détails, voir Initialiser un référentiel de code en nuage.

Vous devez également créer un référentiel avant d'utiliser des fichiers. Voir Créer et gérer un référentiel de code en nuage pour plus de détails.

  1. Pour obtenir un fichier :
    
    SELECT DBMS_CLOUD_REPO.GET_FILE(repo => :repo, file_path => 'test1.sql')
    
  2. Pour créer 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 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 lister les fichiers :
    SELECT id, name, bytes, url FROM DBMS_CLOUD_REPO.LIST_FILES(repo => :repo);
    
  5. Pour supprimer un fichier :
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_FILE(
            repo => :repo,
            file_path => 'test1.sql'
      );
    END;
    /

Pour plus d'informations, voir DBMS_CLOUD_REPO Opérations de fichier.

Utiliser des opérations d'installation SQL avec un référentiel de code en nuage

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

Obtenez un descripteur de référentiel de code en nuage avant d'utiliser les opérations d'installation SQL. Pour plus de détails, voir Initialiser un référentiel de code en nuage.

Vous devez également créer un référentiel avant d'utiliser les opérations d'installation SQL. Voir Créer et gérer un référentiel de code en nuage pour plus de détails.

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.
  • Les scripts ne peuvent pas contenir des variables de liaison ni des scripts paramétrés.
  • Les énoncés SQL doivent se terminer par une barre oblique sur une nouvelle ligne (/).
  • Les scripts peuvent contenir des énoncés LDD, LMD et PLSQL, mais les énoncés SELECT directs ne sont pas pris en charge. L'utilisation de SELECT dans un bloc PL/SQL est prise en charge.

Tout énoncé SQL pouvant être exécuté à l'aide de EXECUTE IMMEDIATE fonctionne s'il ne contient pas de variables ni de définitions de liaison.

  1. Pour charger des métadonnées LDD dans un référentiel de code en nuage :
    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 énoncés SQL à partir d'une mémoire tampon :
    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, voir Opérations d'installation SQL de DBMS_CLOUD_REPO.