Gestión y almacenamiento de archivos en un repositorio de Cloud Code con Autonomous Database

Autonomous Database proporciona rutinas para gestionar y almacenar archivos en repositorios de Cloud Code (Git). Los Repositorios de Cloud Code soportados son: GitHub, AWS CodeCommit y Azure Repos.

Acerca de los repositorios de Cloud Code con Autonomous Database

El paquete DBMS_CLOUD_REPO proporciona una única interfaz para acceder a un Repositorio de Cloud Code desde Autonomous Database.

Los repositorios de Cloud Code soportados proporcionan las siguientes funciones:

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

  • Repositorio de Git: un repositorio de Git es un almacenamiento virtual del proyecto. Le permite guardar versiones de su código, a las que podrá acceder cuando sea necesario.

En las API de DBMS_CLOUD_REPO se utiliza un manejador de repositorio (objeto REPO). El manejador de repositorio es un objeto JSON opaco que representa un Repositorio de Cloud Code de un proveedor en la nube específico. Un objeto REPO se puede transferir a diferentes API de 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 Cloud Code a otro repositorio de Cloud Code.

Autonomous Database proporciona lo siguiente para ayudarle a trabajar con los repositorios de Cloud Code:

Inicialización de un repositorio de Cloud Code

Las rutinas de inicialización DBMS_CLOUD_REPO inicializan un Repositorio de Cloud Code. Después de obtener un manejador del Repositorio de Cloud Code, utilice el manejador para acceder al Repositorio de Cloud Code.

Para inicializar un Repositorio de Cloud Code:

  1. Crear una credencial para acceder al repositorio de Cloud Code.

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

  2. En función del repositorio, GitHub, Azure Repos o AWS CodeCommit, llame a DBMS_CLOUD_REPO.INIT_REPO con los parámetros del repositorio concreto para obtener un identificador de repositorio.

    En los siguientes ejemplos se proporcionan ejemplos para cada uno de los repositorios de Cloud Code soportados.

    • 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 repositorios de 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;
      /
    • 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 Operaciones de inicialización para obtener información sobre las funciones de inicialización.

Creación y gestión de un repositorio de Cloud Code

Las rutinas de gestión DBMS_CLOUD_REPO permiten crear, mostrar, actualizar o suprimir un repositorio para gestionar un Repositorio de Cloud Code.

En primer lugar, obtenga un manejador de Repositorio de Cloud Code para proporcionar acceso a un repositorio. Consulte Inicialización de un repositorio de Cloud Code para obtener información.

  1. To create a repository:
    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 los 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 bifurcaciones en un repositorio de Cloud Code

Las rutinas de gestión DBMS_CLOUD_REPO permiten gestionar las bifurcaciones del repositorio de Cloud Code creando, enumerando, fusionando o suprimiendo bifurcaciones en un repositorio.

Para realizar operaciones de gestión de bifurcaciones del repositorio de Cloud Code, primero debe:

  1. Para crear una rama en un repositorio de Cloud Code:
    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 Cloud Code:
    BEGIN
      DBMS_CLOUD_REPO.DELETE_BRANCH (
          repo        => l_repo,
          branch_name => 'test_branch'
      );
    END;
    /
  3. Para fusionar una rama en otra rama en un repositorio de Cloud Code:
    BEGIN
      DBMS_CLOUD_REPO.MERGE_BRANCH (
        repo               => l_repo,
        branch_name        => 'test_branch',
        target_branch_name => 'main'
        );
    END;
    /
  4. Para mostrar las bifurcaciones en un repositorio de Cloud Code:
    
    SELECT * FROM DBMS_CLOUD_REPO.LIST_BRANCHES (repo => l_repo);
    
  5. Puede mostrar las confirmaciones de una rama en el repositorio de Cloud Code según lo siguiente:
    • Repositorio

    • Rama

    • La ruta al archivo de la rama

    • SHA/commit_id

      Nota

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

    Para mostrar 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 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 archivo de la rama:

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

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

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

Exportación de objetos de esquema a la rama del repositorio de Cloud Code

La rutina de gestión DBMS_CLOUD_REPO permite exportar metadatos de los objetos de un esquema a la rama Repositorio de Cloud Code. 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 Cloud Code:

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 el procedimiento EXPORT_SCHEMA para obtener más información.

Uso de operaciones de archivo con un repositorio de Cloud Code

Las operaciones de archivo DBMS_CLOUD_REPO permiten crear, obtener, mostrar, actualizar o suprimir archivos en un Repositorio de Cloud Code.

Obtenga un manejador del Repositorio de Cloud Code antes de utilizar las operaciones de archivo. Consulte Inicialización de un repositorio de Cloud Code para obtener información.

También debe crear un repositorio antes de trabajar con archivos. Consulte Creación y gestión de un repositorio de Cloud Code para obtener 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 Operaciones de archivo para obtener más información.

Uso de operaciones de instalación de SQL con un repositorio de Cloud Code

Las operaciones de instalación de SQL de DBMS_CLOUD_REPO permiten almacenar y descargar archivos de comandos SQL de un Repositorio de Cloud Code.

Obtenga un manejador de repositorio de Cloud Code antes de utilizar las operaciones de instalación de SQL. Consulte Inicialización de un repositorio de Cloud Code para obtener información.

También debe crear un repositorio antes de trabajar con operaciones de instalación de SQL. Consulte Creación y gestión de un repositorio de Cloud Code para obtener información.

Los scripts están diseñados como archivos de comandos de instalación de esquemas y no como archivos de comandos 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 deben terminar con una barra inclinada en una nueva línea (/).
  • Los scripts pueden contener sentencias DDL y DML PLSQL, pero las sentencias SELECT directas no están soportadas. Está soportado el uso de SELECT en un bloque PL/SQL.

Las sentencias SQL que se puedan ejecutar mediante EXECUTE IMMEDIATE funcionarán si no contienen variables de enlace o definiciones.

  1. Para cargar metadatos de DDL en un repositorio de 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. 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 Operaciones de instalación SQL para obtener más información.