Gerenciar e armazenar arquivos em um repositório de código na nuvem com o Autonomous Database

O Autonomous Database fornece rotinas para gerenciar e armazenar arquivos em Repositórios de Código na Nuvem (Git). Os Repositórios de Código na Nuvem suportados são: GitHub, AWS CodeCommit e Azure Repos.

Sobre Repositórios de Código no Cloud com o Autonomous Database

O pacote DBMS_CLOUD_REPO fornece uma única interface para acessar no Autonomous Database um Repositório de Código na Nuvem.

Os Repositórios de Código na Nuvem suportados fornecem os seguintes recursos:

  • Sistema de Controle de Versão do Git: O Git é um software para rastrear alterações em qualquer conjunto de arquivos, geralmente usado para coordenar o trabalho entre os programadores, desenvolvendo colaborativamente o código-fonte durante o desenvolvimento do software. Suas metas incluem velocidade, integridade de dados e suporte para workflows distribuídos não lineares.

  • Repositório Git: É um armazenamento virtual do seu projeto. Ele permite salvar versões do seu código, que você pode acessar quando necessário.

As APIs DBMS_CLOUD_REPO usam um identificador de repositório (objeto REPO). O identificador de repositório é um objeto JSON opaco que representa um Repositório de Código na Nuvem de um provedor de nuvem específico. Um objeto REPO pode ser transmitido a diferentes APIs DBMS_CLOUD_REPO. Esse objeto opaco garante que os procedimentos e as funções DBMS_CLOUD_REPO sejam compatíveis com várias nuvens; você não precisa alterar seu código ao migrar de um provedor de Cloud Code Repository para outro.

O Autonomous Database fornece as seguintes opções para ajudar você a trabalhar com Repositórios de Código na Nuvem:

Inicializar um Repositório de Código na Nuvem

As rotinas de inicialização DBMS_CLOUD_REPO inicializam um Repositório de Código na Nuvem. Depois de obter um identificador de Repositório de Código na Nuvem, use-o para acessar o repositório.

Para inicializar um Repositório de Código na Nuvem:

  1. Crie uma credencial para acessar o Repositório de Código da Nuvem.

    Consulte Procedimento CREATE_CREDENTIAL para obter informações sobre a criação de credenciais.

  2. Dependendo do repositório, GitHub, Azure Repos ou AWS CodeCommit, chame DBMS_CLOUD_REPO.INIT_REPO com os parâmetros do repositório específico para obter um identificador de repositório.

    Os exemplos a seguir fornecem amostras para cada Repositório de Código na Nuvem suportado.

    • GitHub Inicialização:

      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;
      /
      
    • Inicialização do 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;
      /
    • Inicialização do 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;
      /

Consulte DBMS_CLOUD_REPO Operações de Inicialização para obter detalhes sobre as funções de inicialização.

Criar e Gerenciar um Repositório de Código na Nuvem

As rotinas de gerenciamento DBMS_CLOUD_REPO permitem que você crie, liste, atualize ou exclua um repositório.

Primeiro, obtenha um identificador do Repositório de Código na Nuvem para fornecer acesso a um repositório. Consulte Inicializar um Repositório de Código na Nuvem para obter detalhes.

  1. Para criar um repositório:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.CREATE_REPOSITORY(
            repo => :repo,
            description => 'test repo'
      );
    END;
    /
  2. Para atualizar um repositório:
    
    VAR repo clob
    DEFINE repo_name='test_repo';
    BEGIN
      DBMS_CLOUD_REPO.UPDATE_REPOSITORY(
            repo => :repo,
            new_name => '&repo_name' || '_new'
      );
    END;
    /
  3. Para listar repositórios:
    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. Para excluir um repositório:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_REPOSITORY(
            repo => :repo
      );
    END;
    /

Consulte DBMS_CLOUD_REPO Operações de Gerenciamento de Repositório para obter mais informações.

Criar e Gerenciar Ramificações em um Repositório de Código na Nuvem

As rotinas de gerenciamento DBMS_CLOUD_REPO permitem que você gerencie ramificações do Repositório de Código na Nuvem criando, listando, mesclando ou excluindo ramificações em um repositório.

Para executar operações de gerenciamento de ramificações do Cloud Code Repository, primeiro você deve:

  1. Para criar uma ramificação em um Repositório de Código na Nuvem:
    BEGIN
      DBMS_CLOUD_REPO.CREATE_BRANCH (
        repo            => l_repo,
        branch_name     => 'test_branch',
        parent_branch   => 'main'
        );
    END;
    /
  2. Para excluir uma ramificação em um Repositório de Código na Nuvem:
    BEGIN
      DBMS_CLOUD_REPO.DELETE_BRANCH (
          repo        => l_repo,
          branch_name => 'test_branch'
      );
    END;
    /
  3. Para mesclar uma ramificação em outra ramificação em um Repositório de Código na Nuvem:
    BEGIN
      DBMS_CLOUD_REPO.MERGE_BRANCH (
        repo               => l_repo,
        branch_name        => 'test_branch',
        target_branch_name => 'main'
        );
    END;
    /
  4. Para listar ramificações em um Repositório de Código na Nuvem:
    
    SELECT * FROM DBMS_CLOUD_REPO.LIST_BRANCHES (repo => l_repo);
    
  5. Você pode listar commits em uma ramificação no Repositório de Código na Nuvem com base no seguinte;
    • Repositório

    • Ramificação

    • O caminho de arquivo da ramificação

    • SHA/commit_id

      Observação

      SHA é uma string de 40 caracteres de soma de verificação composta por caracteres hexadecimais (0-9 e a-f).

    Para listar commits com base no repositório:

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

    Para listar commits com base no repositório, commit_id e caminho do arquivo da ramificação:

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

    Para listar commits com base no repositório e no caminho do arquivo da ramificação:

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

    Para listar commits com base no repositório, branch_name e caminho do arquivo da ramificação:

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

    Para listar commits com base no repositório e em commit_id da ramificação:

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

Exportar Objetos de Esquema para a Ramificação do Repositório de Código na Nuvem

A rotina de gerenciamento DBMS_CLOUD_REPO permite exportar metadados dos objetos em um esquema para a ramificação do Repositório de Código na Nuvem. Você pode filtrar sua lista com base nos nomes ou tipos de objeto.

Para exportar metadados do esquema, primeiro você deve:

Use o procedimento EXPORT_SCHEMA para exportar metadados dos objetos no seu esquema para uma ramificação do Repositório de Código na Nuvem:

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;
/

Este exemplo exporta os metadados do esquema USER1 para o repositório l_repo. A exportação inclui os metadados das tabelas EMPLOYEE_SALARY e EMPLOYEE_ADDRESS e qualquer nome de tabela que contenha OFFICE. Ele também exporta a sequência EMPLOYEE_RECORD_SEQ e exclui as views no esquema.

Consulte EXPORT_SCHEMA Procedimento para obter mais informações.

Usar Operações de Arquivo com um Repositório de Código na Nuvem

As operações de arquivo DBMS_CLOUD_REPO permitem criar, obter, listar, atualizar ou excluir arquivos em um Repositório de Código na Nuvem.

Obtenha um identificador de Repositório de Código na Nuvem antes de usar as operações de arquivo. Consulte Inicializar um Repositório de Código na Nuvem para obter detalhes.

Você também precisa criar um repositório antes de trabalhar com arquivos. Consulte Criar e Gerenciar um Repositório de Código na Nuvem para obter detalhes.

  1. Para obter um arquivo:
    
    SELECT DBMS_CLOUD_REPO.GET_FILE(repo => :repo, file_path => 'test1.sql')
    
  2. Para criar um arquivo:
    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. Para atualizar um arquivo:
    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. Para listar arquivos:
    SELECT id, name, bytes, url FROM DBMS_CLOUD_REPO.LIST_FILES(repo => :repo);
    
  5. Para excluir um arquivo:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_FILE(
            repo => :repo,
            file_path => 'test1.sql'
      );
    END;
    /

Consulte Operações de Arquivo DBMS_CLOUD_REPO para obter mais informações.

Usar Operações de Instalação SQL em um Repositório de Código na Nuvem

As operações de Instalação SQL DBMS_CLOUD_REPO permitem armazenar e fazer download de scripts SQL de um Repositório de Código na Nuvem.

Obtenha um identificador de Repositório de Código na Nuvem antes de usar as operações de Instalação SQL. Consulte Inicializar um Repositório de Código na Nuvem para obter detalhes.

Você também precisa criar um repositório antes de trabalhar com operações de Instalação SQL. Consulte Criar e Gerenciar um Repositório de Código na Nuvem para obter detalhes.

Os scripts são considerados como scripts de instalação de esquema e não como scripts SQL genéricos:

  • Os scripts não podem conter comandos específicos do cliente SQL*Plus.
  • Os scripts não podem conter variáveis de bind ou scripts paramétricos.
  • As instruções SQL devem terminar com uma barra em uma nova linha (/).
  • Os scripts podem conter instruções DDL e DML PLSQL, mas não são suportadas instruções SELECT diretas. há suporte para o uso de SELECT em um bloco PL/SQL.

Qualquer instrução SQL que possa ser executada usando EXECUTE IMMEDIATE funcionará se não contiver definições e variáveis de bind.

  1. Para fazer upload de metadados de DDL para um Repositório de Código na Nuvem:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.EXPORT_OBJECT(
            repo => :repo,
            object_type => 'PACKAGE',
            object_name => 'MYPACK',
            file_path   => 'mypack.sql'
      );
    END;
    /
  2. Para instalar instruções SQL de um arquivo:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.INSTALL_FILE(
            repo => :repo,
            file_path     => 'test3.sql',
            stop_on_error => FALSE
      );
    END;
    /
  3. Para instalar instruções SQL de um buffer:
    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;
    /

Consulte DBMS_CLOUD_REPO Operações de Instalação SQL para obter mais informações.