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

Autonomous Database fornisce le routine per gestire e memorizzare i file nei repository Git (Cloud Code). 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 offrono 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 durante lo sviluppo collaborativo del 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.

  • Git Repository: Un repository Git è uno storage virtuale del tuo progetto. Ti consente di salvare le versioni del tuo codice, a cui puoi accedere quando necessario.

Le 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. È possibile passare un oggetto REPO 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 fornisce quanto segue per aiutarti a lavorare con i repository di codici cloud:

Inizializzare 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, 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 Procedure.

  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 repository 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;
      /
    • 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 Initialization Operations.

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 Inizializza 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 Repository Management Operations.

Creare e gestire rami in un repository di codici cloud

Le routine di gestione DBMS_CLOUD_REPO consentono di gestire i rami del repository di codici cloud creando, elencando, unendo o eliminando rami 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 a quanto segue;
    • Repository

    • Diramazione

    • Percorso del file della diramazione

    • SHA/commit_id

      Nota

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

    Per elencare i commit in base al repository, procedere come segue.

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

    Per elencare i commit in base al repository, commit_id e il 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 del file della diramazione:

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

    Per elencare i commit in base al repository, branch_name e il 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:

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

Per ulteriori informazioni, vedere DBMS_CLOUD_REPO Repository Branch Management Operations.

Esporta oggetti schema nella diramazione Repository di codici cloud

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

Per esportare i metadati dello schema, è innanzitutto necessario:

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 vengono esportati i metadati dello schema USER1 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 Procedure.

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 repository di codici cloud.

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

È inoltre necessario creare un repository prima di utilizzare i file. Per i dettagli, vedere Creazione e gestione di 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, procedere nel seguente modo.
    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 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 Inizializza un repository di codici cloud.

È inoltre necessario creare un repository prima di utilizzare le operazioni di installazione SQL. Per i dettagli, vedere Creazione e gestione di 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 parametrizzati.
  • 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'utilizzo 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 definisce.

  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 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 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.