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. Die unterstützten Cloudcode-Repositorys sind: GitHub, AWS CodeCommit und Azure-Repositorys.

Cloud-Code-Repositorys mit Autonomous Database

Das Package DBMS_CLOUD_REPO stellt eine einzige Schnittstelle für den Zugriff auf ein Cloud-Code-Repository aus Autonomous Database bereit.

Die unterstützten Cloudcode-Repositorys bieten die folgenden Features:

  • Git-Versionskontrollsystem: Git ist eine Software zum Verfolgen von Änderungen in einer beliebigen Gruppe von Dateien, die normalerweise zur Koordination der Arbeit zwischen Programmierern verwendet wird, die während der Softwareentwicklung gemeinsam Quellcode entwickeln. Zu seinen Zielen gehören Geschwindigkeit, Datenintegrität und Unterstützung für verteilte, nicht-lineare Workflows.

  • Git-Repository: Ein Git-Repository ist ein virtueller Speicher Ihres Projekts. Es ermöglicht Ihnen, Versionen Ihres Codes zu 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 undurchsichtiges 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 undurchsichtige Objekt stellt sicher, dass DBMS_CLOUD_REPO-Prozeduren und -Funktionen Multicloud-kompatibel sind. Sie müssen Ihren Code nicht ändern, wenn Sie von einem Cloud Code Repository-Provider zu einem anderen Cloud Code Repository migrieren.

Autonomous Database bietet Folgendes, damit Sie mit Cloud-Code-Repositorys arbeiten können:

Cloudcode-Repository initialisieren

Die Initialisierungsroutinen DBMS_CLOUD_REPO initialisieren ein Cloud-Code-Repository. Nachdem Sie ein Cloud Code Repository-Handle erhalten haben, greifen Sie mit dem Handle auf das Cloud Code Repository zu.

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. Je nach Repository, GitHub, Azure-Repository oder AWS CodeCommit, rufen Sie DBMS_CLOUD_REPO.INIT_REPO mit den Parametern für das jeweilige Repository auf, um ein Repository-Handle abzurufen.

    Die folgenden Beispiele enthalten Beispiele für jedes unterstützte Cloud Code Repository.

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

Weitere Informationen zu den Initialisierungsfunktionen finden Sie unter DBMS_CLOUD_REPO Initialization Operations.

Cloudcode-Repository erstellen und verwalten

Mit den DBMS_CLOUD_REPO-Verwaltungsroutinen können Sie ein Cloudcode-Repository verwalten, indem Sie ein Repository erstellen, auflisten, aktualisieren oder löschen.

Rufen Sie zunächst ein Cloud Code Repository-Handle ab, um Zugriff auf ein Repository zu gewähren. 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-Verwaltungsvorgänge.

Filialen in einem Cloudcode-Repository erstellen und verwalten

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

Um Cloud Code Repository-Verzweigungsverwaltungsvorgänge ausführen zu können, müssen Sie zuerst folgende Schritte ausführen:

  1. So erstellen Sie eine Verzweigung in einem Cloudcode-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 Cloudcode-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 Cloudcode-Repository auf:
    
    SELECT * FROM DBMS_CLOUD_REPO.LIST_BRANCHES (repo => l_repo);
    
  5. Sie können Commits in einer Verzweigung in Cloud Code Repository basierend auf folgenden Elementen auflisten:
    • Repository

    • Verzweigung

    • Der Dateipfad der Verzweigung

    • SHA/commit_id

      Hinweis

      SHA ist eine aus Hexadezimalzeichen (0–9 und a–f) zusammengesetzte Prüfsumme mit 40 Zeichen.

    So listen Sie Commits basierend auf dem Repository auf:

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

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

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

    So listen Sie Commits auf, die auf dem Repository und dem Dateipfad der Verzweigung basieren:

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

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

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

    So listen Sie Commits auf, die auf dem Repository und commit_id der Verzweigung basieren:

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

Schemaobjekte in die Cloudcode-Repository-Verzweigung exportieren

Mit der Verwaltungsroutine DBMS_CLOUD_REPO können Sie Metadaten der Objekte in einem Schema in die Cloudcode-Repository-Verzweigung exportieren. Sie können die 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 EMPLOYEE_RECORD_SEQ-Sequenz exportiert und die Ansichten 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 Cloudcode-Repository erstellen, abrufen, auflisten, aktualisieren oder löschen.

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

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

  1. So rufen Sie eine Datei ab:
    
    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 Cloud-Code-Repository verwenden

Mit den SQL-Installationsvorgängen DBMS_CLOUD_REPO können Sie SQL-Skripte in einem Cloud Code Repository speichern und herunterladen.

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

Sie müssen auch ein Repository erstellen, bevor Sie mit SQL-Installationsvorgängen arbeiten. Weitere Informationen finden Sie unter Cloud Code Repository erstellen und verwalten.

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

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

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

  1. So laden Sie DDL-Metadaten in ein Cloudcode-Repository hoch:
    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.