Dateien mit Autonomous Database in einem Cloud-Code-Repository verwalten und speichern

Autonomous Database bietet Routinen zum Verwalten und Speichern von Dateien in Cloud-Code-(Git-)Repositorys. Folgende Cloudcode-Repositorys werden unterstützt: GitHub, AWS CodeCommit und Azure Repos.

Cloud-Code-Repositorys mit Autonomous Database

Das DBMS_CLOUD_REPO-Paket bietet eine einzelne Schnittstelle für den Zugriff auf ein Cloud-Code-Repository aus Autonomous Database.

Die unterstützten Cloud-Code-Repositorys bieten die folgenden Features:

  • Git-Versionskontrollsystem: Git ist eine Software zur Verfolgung von Änderungen in einem beliebigen Set von Dateien. In der Regel wird sie verwendet, um die Arbeit zwischen Programmierern zu koordinieren, die während der Softwareentwicklung Quellcode entwickeln. Ihre Ziele umfassen unter anderem Geschwindigkeit, Datenintegrität und Unterstützung für verteilte, nichtlineare Workflows.

  • Git-Repository: Ein Git-Repository ist ein virtueller Speicher Ihres Projekts. Damit können Sie Versionen Ihres Codes speichern, auf die Sie bei Bedarf zugreifen können.

Die DBMS_CLOUD_REPO-APIs verwenden ein Repository Handle (REPO-Objekt). Das Repository Handle ist ein nicht transparentes JSON-Objekt, das ein Cloud-Code-Repository eines bestimmten Cloud-Providers darstellt. Ein REPO-Objekt kann an verschiedene DBMS_CLOUD_REPO-APIs übergeben werden. Dieses nicht transparente Objekt stellt sicher, dass DBMS_CLOUD_REPO-Prozeduren und -Funktionen Multicloud-kompatibel sind. Sie müssen Ihren Code nicht ändern, wenn Sie von einem Cloudcode-Repository-Provider zu einem anderen Cloudcode-Repository migrieren.

Autonomous Database stellt für die Arbeit mit Cloud-Code-Repositorys Folgendes bereit:

Cloudcode-Repository initialisieren

Mit den DBMS_CLOUD_REPO-Initialisierungsroutinen können Sie ein Cloudcode-Repository initialisieren. Nachdem Sie ein Handle für das Cloud-Code-Repository erhalten haben, können Sie mit dem Handle auf das Cloud-Code-Repository zugreifen.

So initialisieren Sie ein Cloud-Code-Repository:

  1. Erstellen Sie Zugangsdaten für den Zugriff auf das Cloud-Code-Repository.

    Informationen zum Erstellen von Zugangsdaten finden Sie unter Prozedur CREATE_CREDENTIAL.

  2. Rufen Sie je nach Repository (GitHub, Azure-Repositorys oder AWS CodeCommit) DBMS_CLOUD_REPO.INIT_REPO mit den Parametern für das jeweilige Repository auf, um ein Repository Handle abzurufen.

    Nachfolgend finden Sie Beispiele für die einzelnen unterstützten Cloud-Code-Repositorys.

    • GitHub Initialisierung:

      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;
      /
      
    • Azure Repos - Initialisierung:

      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;
      /
    • AWS CodeCommit-Initialisierung:

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

Einzelheiten zu den Initialisierungsfunktionen finden Sie unter DBMS_CLOUD_REPO Initialisierungsvorgänge.

Cloud-Code-Repository erstellen und verwalten

Mit den DBMS_CLOUD_REPO-Managementrouten können Sie ein Cloud-Code-Repository verwalten, indem Sie es erstellen, auflisten, aktualisieren oder löschen.

Rufen Sie zunächst ein Cloud-Code-Repository-Handle ab, um den Zugriff auf ein Repository zu ermöglichen. Weitere Informationen finden Sie unter Cloud-Code-Repository initialisieren.

  1. So erstellen Sie ein Repository:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.CREATE_REPOSITORY(
            repo => :repo,
            description => 'test repo'
      );
    END;
    /
  2. So aktualisieren Sie ein Repository:
    
    VAR repo clob
    DEFINE repo_name='test_repo';
    BEGIN
      DBMS_CLOUD_REPO.UPDATE_REPOSITORY(
            repo => :repo,
            new_name => '&repo_name' || '_new'
      );
    END;
    /
  3. So listen Sie Repositorys auf:
    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. So löschen Sie ein Repository:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_REPOSITORY(
            repo => :repo
      );
    END;
    /

Weitere Informationen finden Sie unter DBMS_CLOUD_REPO Repository-Managementvorgänge.

Verzweigungen in einem Cloud-Code-Repository erstellen und verwalten

Mit den DBMS_CLOUD_REPO-Managementrouten können Sie Cloud-Code-Repository-Verzweigungen verwalten, indem Sie Verzweigungen in einem Repository erstellen, auflisten, zusammenführen oder löschen.

Um Verzweigungsverwaltungsvorgänge für Cloud Code Repository auszuführen, müssen Sie zuerst:

  1. So erstellen Sie eine Verzweigung in einem Cloud-Code-Repository:
    BEGIN
      DBMS_CLOUD_REPO.CREATE_BRANCH (
        repo            => l_repo,
        branch_name     => 'test_branch',
        parent_branch   => 'main'
        );
    END;
    /
  2. So löschen Sie eine Verzweigung in einem Cloud-Code-Repository:
    BEGIN
      DBMS_CLOUD_REPO.DELETE_BRANCH (
          repo        => l_repo,
          branch_name => 'test_branch'
      );
    END;
    /
  3. So führen Sie eine Verzweigung in einer anderen Verzweigung in einem Cloud-Code-Repository zusammen:
    BEGIN
      DBMS_CLOUD_REPO.MERGE_BRANCH (
        repo               => l_repo,
        branch_name        => 'test_branch',
        target_branch_name => 'main'
        );
    END;
    /
  4. So listen Sie Verzweigungen in einem Cloud-Code-Repository auf:
    
    SELECT * FROM DBMS_CLOUD_REPO.LIST_BRANCHES (repo => l_repo);
    
  5. Sie können Commits in einer Verzweigung im Cloud-Code-Repository auf der Grundlage der folgenden Elemente auflisten:
    • Repository

    • Branch

    • Der Dateipfad der Verzweigung

    • SHA/commit_id

      Hinweis

      SHA ist eine Prüfsummenzeichenfolge mit 40 Zeichen, die aus Hexadezimalzeichen (0-9 und a-f) besteht.

    So listen Sie Commits basierend auf dem Repository auf:

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

    So listen Sie Commits basierend auf dem Repository, commit_id und dem Dateipfad der Verzweigung auf:

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

    So listen Sie Commits basierend auf dem Repository und dem Dateipfad der Verzweigung auf:

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

    So listen Sie Commits basierend auf dem Repository, branch_name und dem Dateipfad der Verzweigung auf:

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

    So listen Sie Commits basierend auf dem Repository und commit_id der Verzweigung auf:

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

Weitere Informationen finden Sie unter DBMS_CLOUD_REPO Repository-Verzweigungsverwaltungsvorgänge.

Schemaobjekte in die Cloud-Code-Repository-Verzweigung exportieren

Mit der Verwaltungsroutine DBMS_CLOUD_REPO können Sie Metadaten der Objekte in einem Schema in die Verzweigung "Cloud-Code-Repository" exportieren. Sie können Ihre Liste anhand der Objektnamen oder Objekttypen filtern.

Um Schemametadaten zu exportieren, müssen Sie zuerst:

Verwenden Sie die Prozedur EXPORT_SCHEMA, um Metadaten der Objekte in Ihrem Schema in eine Cloud-Code-Repository-Verzweigung zu exportieren:

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 diesem Beispiel werden die Metadaten des Schemas USER1 in das Repository l_repo exportiert. Der Export umfasst die Metadaten der Tabellen EMPLOYEE_SALARY und EMPLOYEE_ADDRESS sowie alle Tabellennamen, die OFFICE enthalten. Außerdem wird die Sequence EMPLOYEE_RECORD_SEQ exportiert und die Views im Schema ausgeschlossen.

Weitere Informationen finden Sie unter Prozedur EXPORT_SCHEMA.

Dateivorgänge mit einem Cloud Code Repository verwenden

Mit den DBMS_CLOUD_REPO-Dateivorgängen können Sie Dateien in einem Cloud-Code-Repository erstellen, abrufen, auflisten, aktualisieren oder löschen.

Rufen Sie ein Cloud Code Repository-Handle ab, bevor Sie die Dateivorgänge verwenden. Weitere Informationen finden Sie unter Cloud-Code-Repository initialisieren.

Außerdem müssen Sie ein Repository erstellen, bevor Sie mit Dateien arbeiten. Weitere Informationen finden Sie unter Cloud-Code-Repository erstellen und verwalten.

  1. So erhalten Sie eine Datei:
    
    SELECT DBMS_CLOUD_REPO.GET_FILE(repo => :repo, file_path => 'test1.sql')
    
  2. So erstellen Sie eine Datei:
    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. So aktualisieren Sie eine Datei:
    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. So listen Sie Dateien auf:
    SELECT id, name, bytes, url FROM DBMS_CLOUD_REPO.LIST_FILES(repo => :repo);
    
  5. So löschen Sie eine Datei:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_FILE(
            repo => :repo,
            file_path => 'test1.sql'
      );
    END;
    /

Weitere Informationen finden Sie unter DBMS_CLOUD_REPO File Operations.

SQL-Installationsvorgänge mit einem Cloudcode-Repository verwenden

Mit den DBMS_CLOUD_REPO-SQL-Installationen können Sie SQL-Skripte in einem Cloud-Code-Repository speichern und daraus herunterladen.

Rufen Sie ein Handle für das Cloud-Code-Repository ab, bevor Sie die SQL-Installationsvorgänge verwenden. Weitere Informationen finden Sie unter Cloud-Code-Repository initialisieren.

Außerdem müssen Sie ein Repository erstellen, bevor Sie mit SQL-Installationsoperationen arbeiten können. Weitere Informationen finden Sie unter Cloud-Code-Repository erstellen und verwalten.

Die Skripte sind als Schema-Installationsskripte und nicht als generische SQL-Skripte vorgesehen:

  • Skripte dürfen keine clientspezifischen SQL*Plus-Befehle enthalten.
  • Skripte dürfen keine Bind-Variablen oder Parameterskripte enthalten.
  • SQL-Anweisungen müssen mit einem Slash in einer neuen Zeile (/) beendet werden.
  • Skripte können DDL-, DML- und PLSQL-Anweisungen enthalten, direkte SELECT-Anweisungen werden jedoch nicht unterstützt. Die Verwendung von SELECT in einem PL/SQL-Block wird unterstützt.

SQL-Anweisung, die mit EXECUTE IMMEDIATE ausgeführt werden kann, funktioniert, sofern sie keine Bind-Variablen oder Definitionen enthält.

  1. So hochladen Sie DDL-Metadaten in ein Cloud-Code-Repository:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.EXPORT_OBJECT(
            repo => :repo,
            object_type => 'PACKAGE',
            object_name => 'MYPACK',
            file_path   => 'mypack.sql'
      );
    END;
    /
  2. So installieren Sie SQL-Anweisungen aus einer Datei:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.INSTALL_FILE(
            repo => :repo,
            file_path     => 'test3.sql',
            stop_on_error => FALSE
      );
    END;
    /
  3. So installieren Sie SQL-Anweisungen aus einem Puffer:
    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;
    /

Weitere Informationen finden Sie unter DBMS_CLOUD_REPO SQL-Installationsvorgänge.