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.

Argomenti correlati

Informazioni sui repository di codici cloud con Autonomous Database

Il pacchetto DBMS_CLOUD_REPO fornisce una singola interfaccia per l'accesso a un Cloud Code Repository 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 Cloud Code Repository 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 di DBMS_CLOUD_REPO siano compatibili con il multicloud e 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 l'handle del repository di codici cloud, 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 di 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 di Cloud Code Repository 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 di Cloud Code Repository creando, elencando, unendo o eliminando diramazioni in un repository.

Per eseguire le operazioni di gestione delle diramazioni di Cloud Code Repository, è innanzitutto necessario:

  1. Per creare una diramazione in un repository di codici cloud, effettuare le operazioni riportate di seguito.
    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, effettuare le operazioni riportate di seguito.
    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 in Cloud Code Repository in base a quanto riportato di seguito.
    • Repository

    • Diramazione

    • 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 nel ramo Cloud Code Repository. È 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 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;
/

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, ottenere, elencare, aggiornare o eliminare i file in un Cloud Code Repository.

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 di DBMS_CLOUD_REPO consentono di memorizzare e scaricare gli script SQL da un Cloud Code Repository.

Ottenere un handle per Cloud Code Repository 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, effettuare le operazioni riportate di seguito.
    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:
    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.