Gestisci e memorizza i file in un repository di codici cloud con Autonomous Database

Autonomous Database fornisce routine per gestire e memorizzare i file nei repository di codici cloud (Git). I repository di codici cloud supportati sono: GitHub, AWS CodeCommit e Azure Repos.

Informazioni sui repository di codici cloud con Autonomous Database

Il package DBMS_CLOUD_REPO fornisce una singola interfaccia per accedere a un repository di codici cloud da Autonomous Database.

I repository di codici cloud supportati forniscono le funzioni riportate di seguito.

  • Git Version Control System: Git è un software per tenere traccia delle modifiche in qualsiasi set di file, di solito utilizzato per coordinare il lavoro tra i programmatori che sviluppano in modo collaborativo il codice sorgente durante lo sviluppo del software. I suoi obiettivi includono velocità, integrità dei dati e supporto per flussi di lavoro distribuiti e non lineari.

  • Repository Git: un repository Git è una memorizzazione virtuale del progetto. Ti permette di salvare le versioni del tuo codice, a cui puoi accedere quando necessario.

Le interfacce API DBMS_CLOUD_REPO utilizzano un handle di repository (oggetto REPO). L'handle del repository è un oggetto JSON opaco che rappresenta un repository di codici cloud di un provider cloud specifico. Un oggetto REPO può essere passato a interfacce API DBMS_CLOUD_REPO diverse. Questo oggetto opaco garantisce che le procedure e le funzioni DBMS_CLOUD_REPO siano compatibili con il multicloud. Non è necessario modificare il codice quando si esegue la migrazione da un provider del repository di codici cloud a un altro repository di codici cloud.

Autonomous Database offre quanto segue per aiutarti a lavorare con i repository di codici cloud:

Inizializza un repository di codici cloud

Le routine di inizializzazione DBMS_CLOUD_REPO inizializzano un repository di codici cloud. Dopo aver ottenuto un handle per il repository di codici cloud, è possibile utilizzare l'handle per accedere al repository di codici cloud.

Per inizializzare un repository di codici cloud:

  1. Creare una credenziale per accedere al repository di codici cloud.

    Per informazioni sulla creazione delle credenziali, vedere CREATE_CREDENTIAL Procedura.

  2. A seconda del repository, GitHub, Azure Repos o AWS CodeCommit, chiamare DBMS_CLOUD_REPO.INIT_REPO con i parametri per il repository specifico per ottenere un handle del repository.

    Gli esempi riportati di seguito forniscono esempi per ogni repository di codici cloud supportato.

    • Inizializzazione GitHub:

      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;
      /
      
    • Inizializzazione di 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;
      /
    • Inizializzazione 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;
      /

Per informazioni dettagliate sulle funzioni di inizializzazione, vedere DBMS_CLOUD_REPO Operazioni di inizializzazione.

Creare e gestire un repository di codici cloud

Le routine di gestione DBMS_CLOUD_REPO consentono di gestire un repository di codici cloud creando, elencando, aggiornando o eliminando un repository.

In primo luogo, ottenere un handle del repository di codici cloud per fornire l'accesso a un repository. Per i dettagli, vedere Iniziare un repository di codici cloud.

  1. Per creare un repository, effettuare le operazioni riportate di seguito.
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.CREATE_REPOSITORY(
            repo => :repo,
            description => 'test repo'
      );
    END;
    /
  2. Per aggiornare un repository:
    
    VAR repo clob
    DEFINE repo_name='test_repo';
    BEGIN
      DBMS_CLOUD_REPO.UPDATE_REPOSITORY(
            repo => :repo,
            new_name => '&repo_name' || '_new'
      );
    END;
    /
  3. Per elencare i repository:
    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. Per eliminare un repository:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_REPOSITORY(
            repo => :repo
      );
    END;
    /

Per ulteriori informazioni, vedere DBMS_CLOUD_REPO Operazioni di gestione del repository.

Creare e gestire le diramazioni in un repository di codici cloud

Le routine di gestione DBMS_CLOUD_REPO consentono di gestire le diramazioni del repository di codici cloud creando, elencando, unendo o eliminando le diramazioni in un repository.

Per eseguire le operazioni di gestione delle diramazioni del repository di codici cloud, è innanzitutto necessario:

  1. Per creare una diramazione in un repository di codici cloud:
    BEGIN
      DBMS_CLOUD_REPO.CREATE_BRANCH (
        repo            => l_repo,
        branch_name     => 'test_branch',
        parent_branch   => 'main'
        );
    END;
    /
  2. Per eliminare una diramazione in un repository di codici cloud:
    BEGIN
      DBMS_CLOUD_REPO.DELETE_BRANCH (
          repo        => l_repo,
          branch_name => 'test_branch'
      );
    END;
    /
  3. Per unire una diramazione in un'altra diramazione in un repository di codici cloud:
    BEGIN
      DBMS_CLOUD_REPO.MERGE_BRANCH (
        repo               => l_repo,
        branch_name        => 'test_branch',
        target_branch_name => 'main'
        );
    END;
    /
  4. Per elencare le diramazioni in un repository di codici cloud:
    
    SELECT * FROM DBMS_CLOUD_REPO.LIST_BRANCHES (repo => l_repo);
    
  5. È possibile elencare i commit in una diramazione nel repository di codici cloud in base ai seguenti elementi:
    • Repository

    • Branch

    • Il percorso del ramo

    • SHA/commit_id

      Nota

      SHA è una stringa di checksum di 40 caratteri composta da caratteri esadecimali (0-9 e a-f).

    Per elencare i commit in base al repository:

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

    Per elencare i commit in base al repository, commit_id e al percorso del file della diramazione:

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

    Per elencare i commit in base al repository e al percorso file della diramazione, effettuare le operazioni riportate di seguito.

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

    Per elencare i commit in base al repository, branch_name e al percorso del file della diramazione:

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

    Per elencare i commit in base al repository e all'indirizzo commit_id della diramazione, effettuare le operazioni riportate di seguito.

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

Esporta oggetti schema nella diramazione del repository di codici cloud

La routine di gestione DBMS_CLOUD_REPO consente di esportare i metadati degli oggetti in uno schema nella diramazione del repository di codici cloud. È possibile filtrare l'elenco in base ai nomi o ai tipi di oggetto.

Per esportare i metadati dello schema, è necessario innanzitutto effettuare le operazioni riportate di seguito.

Utilizzare la procedura EXPORT_SCHEMA per esportare i metadati degli oggetti nello schema in una diramazione del repository di codici cloud:

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

In questo esempio i metadati dello schema USER1 vengono esportati nel repository l_repo. L'esportazione include i metadati delle tabelle EMPLOYEE_SALARY e EMPLOYEE_ADDRESS e qualsiasi nome di tabella contenente OFFICE. Esporta inoltre la sequenza EMPLOYEE_RECORD_SEQ ed esclude le viste nello schema.

Per ulteriori informazioni, vedere EXPORT_SCHEMA Procedura.

Usa operazioni file con un repository di codici cloud

Le operazioni del file DBMS_CLOUD_REPO consentono di creare, recuperare, elencare, aggiornare o eliminare i file in un repository di codici cloud.

Ottenere un handle per il repository di codici cloud prima di utilizzare le operazioni file. Per i dettagli, vedere Iniziare un repository di codici cloud.

È inoltre necessario creare un repository prima di utilizzare i file. Per i dettagli, vedere Creare e gestire un repository di codici cloud.

  1. Per ottenere un file:
    
    SELECT DBMS_CLOUD_REPO.GET_FILE(repo => :repo, file_path => 'test1.sql')
    
  2. Per creare un file:
    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. Per aggiornare un file:
    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. Per elencare i file:
    SELECT id, name, bytes, url FROM DBMS_CLOUD_REPO.LIST_FILES(repo => :repo);
    
  5. Per eliminare un file, effettuare le operazioni riportate di seguito.
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_FILE(
            repo => :repo,
            file_path => 'test1.sql'
      );
    END;
    /

Per ulteriori informazioni, vedere DBMS_CLOUD_REPO File Operations.

Usa operazioni di installazione SQL con un repository di codici cloud

Le operazioni di installazione SQL DBMS_CLOUD_REPO consentono di memorizzare e scaricare gli script SQL da un repository di codici cloud.

Ottenere un handle per il repository di codici cloud prima di utilizzare le operazioni di installazione SQL. Per i dettagli, vedere Iniziare un repository di codici cloud.

È inoltre necessario creare un repository prima di utilizzare le operazioni di installazione SQL. Per i dettagli, vedere Creare e gestire un repository di codici cloud.

Gli script sono intesi come script di installazione dello schema e non come script SQL generici:

  • Gli script non possono contenere comandi specifici del client SQL*Plus.
  • Gli script non possono contenere bind variable o script con parametri.
  • Le istruzioni SQL devono essere terminate con una barra su una nuova riga (/).
  • Gli script possono contenere istruzioni DDL e DML PLSQL, ma le istruzioni SELECT dirette non sono supportate. È supportato l'uso di SELECT all'interno di un blocco PL/SQL.

Qualsiasi istruzione SQL che può essere eseguita utilizzando EXECUTE IMMEDIATE funzionerà se non contiene bind variable o definizioni.

  1. Per caricare i metadati DDL in un repository di codici cloud:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.EXPORT_OBJECT(
            repo => :repo,
            object_type => 'PACKAGE',
            object_name => 'MYPACK',
            file_path   => 'mypack.sql'
      );
    END;
    /
  2. Per installare le istruzioni SQL da un file:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.INSTALL_FILE(
            repo => :repo,
            file_path     => 'test3.sql',
            stop_on_error => FALSE
      );
    END;
    /
  3. Per installare le istruzioni SQL da un buffer, procedere come segue.
    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;
    /

Per ulteriori informazioni, vedere DBMS_CLOUD_REPO Operazioni di installazione SQL.