Gestión y almacenamiento de archivos en un repositorio de código en la nube con Autonomous Database

Autonomous Database proporciona rutinas para gestionar y almacenar archivos en repositorios de código en la nube (Git). Los repositorios de código en la nube soportados son: GitHub, AWS CodeCommit y Azure Repos.

Acerca de los repositorios de código en la nube con Autonomous Database

El paquete DBMS_CLOUD_REPO proporciona una única interfaz para acceder a un repositorio de código en la nube desde Autonomous Database.

Los repositorios de código en la nube soportados ofrecen las siguientes funciones:

  • Sistema de control de versiones de Git: Git es un software para realizar un seguimiento de los cambios en cualquier conjunto de archivos, que generalmente se utiliza para coordinar el trabajo entre los programadores que desarrollan código fuente en colaboración durante el desarrollo de software. Sus objetivos incluyen la velocidad, la integridad de los datos y el soporte para flujos de trabajo distribuidos y no lineales.

  • Git Repository: Un repositorio Git es un almacenamiento virtual de su proyecto. Le permite guardar versiones de su código, a las que puede acceder cuando sea necesario.

Las API DBMS_CLOUD_REPO utilizan un identificador de repositorio (objeto REPO). El identificador de repositorio es un objeto JSON opaco que representa un repositorio de código en la nube de un proveedor de nube específico. Un objeto REPO se puede transferir a diferentes API DBMS_CLOUD_REPO. Este objeto opaco garantiza que los procedimientos y las funciones de DBMS_CLOUD_REPO sean compatibles con varias nubes; no tiene que cambiar el código al migrar de un proveedor de repositorio de código en la nube a otro repositorio de código en la nube.

Autonomous Database proporciona lo siguiente para ayudarle a trabajar con repositorios de código en la nube:

Inicialización de un repositorio de código en la nube

Las rutinas de inicialización DBMS_CLOUD_REPO inicializan un repositorio de código en la nube. Después de obtener un identificador del repositorio de código en la nube, utilice el identificador para acceder al repositorio de código en la nube.

Para inicializar un repositorio de código en la nube:

  1. Cree una credencial para acceder al repositorio de código en la nube.

    Consulte Procedimiento CREATE_CREDENTIAL para obtener información sobre la creación de credenciales.

  2. Según el repositorio, GitHub, Azure Repos o AWS CodeCommit, llame a DBMS_CLOUD_REPO.INIT_REPO con los parámetros para que el repositorio concreto obtenga un identificador de repositorio.

    En los siguientes ejemplos se proporcionan ejemplos para cada repositorio de código en la nube soportado.

    • GitHub Inicialización:

      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;
      /
      
    • Inicialización de 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;
      /
    • Inicialización de 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 Initialization Operations para obtener más información sobre las funciones de inicialización.

Creación y gestión de un repositorio de código en la nube

Las rutinas de gestión DBMS_CLOUD_REPO permiten gestionar un repositorio de código en la nube creando, enumerando, actualizando o suprimiendo un repositorio.

En primer lugar, obtenga un identificador de repositorio de código en la nube para proporcionar acceso a un repositorio. Consulte Inicialización de un repositorio de código en la nube para obtener más información.

  1. Para crear un repositorio:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.CREATE_REPOSITORY(
            repo => :repo,
            description => 'test repo'
      );
    END;
    /
  2. Para actualizar un repositorio:
    
    VAR repo clob
    DEFINE repo_name='test_repo';
    BEGIN
      DBMS_CLOUD_REPO.UPDATE_REPOSITORY(
            repo => :repo,
            new_name => '&repo_name' || '_new'
      );
    END;
    /
  3. Para mostrar repositorios:
    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 suprimir un repositorio:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_REPOSITORY(
            repo => :repo
      );
    END;
    /

Consulte DBMS_CLOUD_REPO Repository Management Operations para obtener más información.

Creación y gestión de sucursales en un repositorio de código en la nube

Las rutinas de gestión de DBMS_CLOUD_REPO le permiten gestionar bifurcaciones del repositorio de código en la nube mediante la creación, la enumeración, la fusión o la supresión de bifurcaciones en un repositorio.

Para realizar operaciones de gestión de sucursales del repositorio de código en la nube, primero debe:

  1. Para crear una rama en un repositorio de código en la nube:
    BEGIN
      DBMS_CLOUD_REPO.CREATE_BRANCH (
        repo            => l_repo,
        branch_name     => 'test_branch',
        parent_branch   => 'main'
        );
    END;
    /
  2. Para suprimir una rama en un repositorio de código en la nube:
    BEGIN
      DBMS_CLOUD_REPO.DELETE_BRANCH (
          repo        => l_repo,
          branch_name => 'test_branch'
      );
    END;
    /
  3. Para fusionar una rama en otra rama de un repositorio de código en la nube:
    BEGIN
      DBMS_CLOUD_REPO.MERGE_BRANCH (
        repo               => l_repo,
        branch_name        => 'test_branch',
        target_branch_name => 'main'
        );
    END;
    /
  4. Para mostrar ramas en un repositorio de código en la nube:
    
    SELECT * FROM DBMS_CLOUD_REPO.LIST_BRANCHES (repo => l_repo);
    
  5. Puede mostrar las confirmaciones en una rama del repositorio de código en la nube según lo siguiente:
    • Repositorio

    • Sucursal

    • Ruta de archivo de la rama

    • SHA/commit_id

      Nota

      SHA es una cadena de total de control de 40 caracteres compuesta por caracteres hexadecimales (0–9 y a–f).

    Para mostrar las confirmaciones basadas en el repositorio:

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

    Para mostrar las confirmaciones basadas en el repositorio, commit_id y la ruta de acceso del archivo de la rama:

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

    Para mostrar las confirmaciones basadas en el repositorio y la ruta de archivo de la rama:

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

    Para mostrar las confirmaciones basadas en el repositorio, branch_name y la ruta de acceso del archivo de la rama:

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

    Para mostrar las confirmaciones basadas en el repositorio y commit_id de la rama:

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

Exportar objetos de esquema a la rama de repositorio de código en la nube

La rutina de gestión DBMS_CLOUD_REPO permite exportar metadatos de los objetos de un esquema a la rama del repositorio de código en la nube. Puede filtrar la lista según los nombres de objeto o los tipos de objeto.

Para exportar metadatos de esquema, primero debe:

Utilice el procedimiento EXPORT_SCHEMA para exportar metadatos de los objetos del esquema a una rama del repositorio de código en la nube:

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

En este ejemplo, se exportan los metadatos del esquema USER1 al repositorio l_repo. La exportación incluye los metadatos de las tablas EMPLOYEE_SALARY y EMPLOYEE_ADDRESS, así como cualquier nombre de tabla que contenga OFFICE. También exporta la secuencia EMPLOYEE_RECORD_SEQ y excluye las vistas del esquema.

Consulte EXPORT_SCHEMA Procedure para obtener más información.

Uso de operaciones de archivo con un repositorio de código en la nube

Las operaciones de archivo DBMS_CLOUD_REPO le permiten crear, obtener, mostrar, actualizar o suprimir archivos en un repositorio de código en la nube.

Obtenga un manejador de repositorio de código en la nube antes de utilizar las operaciones de archivos. Consulte Inicialización de un repositorio de código en la nube para obtener más información.

También debe crear un repositorio antes de trabajar con archivos. Consulte Creación y gestión de un repositorio de código en la nube para obtener más información.

  1. Para obtener un archivo:
    
    SELECT DBMS_CLOUD_REPO.GET_FILE(repo => :repo, file_path => 'test1.sql')
    
  2. Para crear un archivo:
    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 actualizar un archivo:
    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 mostrar archivos:
    SELECT id, name, bytes, url FROM DBMS_CLOUD_REPO.LIST_FILES(repo => :repo);
    
  5. Para suprimir un archivo:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_FILE(
            repo => :repo,
            file_path => 'test1.sql'
      );
    END;
    /

Consulte DBMS_CLOUD_REPO File Operations para obtener más información.

Uso de operaciones de instalación SQL con un repositorio de código en la nube

Las operaciones de instalación de SQL DBMS_CLOUD_REPO permiten almacenar y descargar scripts SQL desde un repositorio de código en la nube.

Obtenga un manejador de Cloud Code Repository antes de utilizar las operaciones de instalación de SQL. Consulte Inicialización de un repositorio de código en la nube para obtener más información.

También debe crear un repositorio antes de trabajar con operaciones de instalación SQL. Consulte Creación y gestión de un repositorio de código en la nube para obtener más información.

Los scripts están diseñados como scripts de instalación de esquema y no como scripts SQL genéricos:

  • Los scripts no pueden contener comandos específicos del cliente SQL*Plus.
  • Los scripts no pueden contener variables de enlace ni scripts con parámetros.
  • Las sentencias SQL se deben terminar con una barra diagonal en una nueva línea (/).
  • Los scripts pueden contener sentencias DDL, DML PLSQL, pero las sentencias SELECT directas no están soportadas. Está soportado el uso de SELECT en un bloque PL/SQL.

Cualquier sentencia SQL que se pueda ejecutar mediante EXECUTE IMMEDIATE funcionará si no contiene variables de enlace o no las define.

  1. Para cargar metadatos DDL en un repositorio de código en la nube:
    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 sentencias SQL desde un archivo:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.INSTALL_FILE(
            repo => :repo,
            file_path     => 'test3.sql',
            stop_on_error => FALSE
      );
    END;
    /
  3. Para instalar sentencias SQL desde un 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 SQL Install Operations para obtener más información.