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 de Nuvem (Git). Os Repositórios de Código da Nuvem suportados são: GitHub, AWS CodeCommit e Azure Repos.

Sobre Repositórios de Código da Nuvem com o Autonomous Database

O pacote DBMS_CLOUD_REPO fornece uma única interface para acessar um Cloud Code Repository no Autonomous Database.

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

  • Sistema de Controle de Versão Git: Git é um software para rastrear alterações em qualquer conjunto de arquivos, geralmente usado para coordenar o trabalho entre programadores que desenvolvem de forma colaborativa o código-fonte durante o desenvolvimento do software. Seus objetivos incluem velocidade, integridade de dados e suporte para fluxos de trabalho distribuídos e não lineares.

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

As APIs DBMS_CLOUD_REPO usam um handle de repositório (objeto REPO). O handle do repositório é um objeto JSON opaco que representa um Repositório de Código da Nuvem de um provedor de nuvem específico. Um objeto REPO pode ser passado para diferentes APIs DBMS_CLOUD_REPO. Esse objeto opaco garante que os procedimentos e 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 do Cloud Code Repository para outro Cloud Code Repository.

O Autonomous Database fornece o seguinte para ajudá-lo a trabalhar com Repositórios de Código da Nuvem:

Inicializar um Repositório de Código da Nuvem

As rotinas de inicialização DBMS_CLOUD_REPO inicializam um Cloud Code Repository. Depois de obter um handle do Cloud Code Repository, você usará o handle para acessar o Cloud Code Repository.

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

  1. Crie uma credencial para acessar o Cloud Code Repository.

    Consulte CREATE_CREDENTIAL Procedure para obter informações sobre como criar 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 handle de repositório.

    Os exemplos a seguir fornecem amostras para cada Repositório de Código da 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 Repositório do Azure:

      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 da Nuvem

As rotinas de gerenciamento DBMS_CLOUD_REPO permitem que você gerencie um Cloud Code Repository criando, listando, atualizando ou excluindo um repositório.

Primeiro, obtenha um handle do Cloud Code Repository para fornecer acesso a um repositório. Consulte Inicializar um Repositório de Código da 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 da Nuvem

As rotinas de gerenciamento DBMS_CLOUD_REPO permitem que você gerencie ramificações do Cloud Code Repository criando, listando, mesclando ou excluindo ramificações em um repositório.

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

  1. Para criar uma ramificação em um Cloud Code Repository:
    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 da 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 Cloud Code Repository:
    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 da Nuvem:
    
    SELECT * FROM DBMS_CLOUD_REPO.LIST_BRANCHES (repo => l_repo);
    
  5. Você pode listar commits em uma ramificação no Cloud Code Repository com base no seguinte;
    • Repositório

    • Ramificação

    • O caminho para a ramificação

    • SHA/commit_id

      Observação

      SHA é uma string de 40 caracteres de soma de verificação composta de 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, no commit_id e no 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, no branch_name e no 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 no 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 Cloud Code Repository

A rotina de gerenciamento DBMS_CLOUD_REPO permite exportar metadados dos objetos em um esquema para a ramificação Cloud Code Repository. Você pode filtrar sua lista com base nos nomes ou tipos de objeto.

Para exportar metadados de esquema, você deve primeiro:

Use o procedimento EXPORT_SCHEMA para exportar metadados dos objetos no seu esquema para uma ramificação do Cloud Code Repository:

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 Procedures para obter mais informações.

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

As operações de arquivo DBMS_CLOUD_REPO permitem que você crie, obtenha, liste, atualize ou exclua arquivos em um Cloud Code Repository.

Obtenha um handle do Cloud Code Repository antes de usar as operações de arquivo. Consulte Inicializar um Repositório de Código da 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 da 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 com um Repositório de Código da Nuvem

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

Obtenha um handle do Cloud Code Repository antes de usar as operações de Instalação SQL. Consulte Inicializar um Repositório de Código da 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 da Nuvem para obter detalhes.

Os scripts são destinados 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.
  • Scripts não podem conter variáveis de bind ou scripts parametrizados.
  • As instruções SQL devem ser encerradas com uma barra em uma nova linha (/).
  • Os scripts podem conter instruções DDL, DML PLSQL, mas instruções SELECT diretas não são suportadas. O uso de SELECT em um bloco PL/SQL é suportado.

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

  1. Para fazer upload de metadados DDL para um Repositório de Código da 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.