使用 Autonomous Database 管理雲端程式碼儲存區域中的檔案並加以儲存

Autonomous Database 提供常式來管理和儲存雲端程式碼 (Git) 儲存庫中的檔案。支援的雲端程式碼儲存區域包括:GitHub、AWS CodeCommit 和 Azure 儲存區域。

相關主題

關於使用 Autonomous Database 的雲端程式碼儲存庫

DBMS_CLOUD_REPO 套裝程式提供單一介面,可從 Autonomous Database 存取雲端程式碼儲存區域

支援的「雲端程式碼儲存區域」提供下列功能:

  • Git 版本控制系統: Git 是用來追蹤任何一組檔案變更的軟體,通常用於協調程式設計人員在軟體開發期間協同開發原始程式碼之間的工作。其目標包括速度、資料完整性,以及對分散式非線性工作流程的支援。

  • Git 儲存區域:Git 儲存區域是您專案的虛擬儲存。它可讓您儲存程式碼的版本,並可在需要時存取。

DBMS_CLOUD_REPO API 使用儲存庫控點 (REPO 物件)。儲存區域控點是不通透的 JSON 物件,代表特定雲端提供者的雲端程式碼儲存區域REPO 物件可傳送至不同的 DBMS_CLOUD_REPO API。此不通透物件可確保 DBMS_CLOUD_REPO 程序和函數與多重雲端相容;將程式碼從某個雲端程式碼儲存區域提供者移轉至另一個雲端程式碼儲存區域時,您不需要變更程式碼。

Autonomous Database 提供下列功能來協助您使用雲端程式碼儲存區域

起始雲端程式碼儲存區域

DBMS_CLOUD_REPO 初始化常式會初始化 Cloud Code Repository 。取得雲端程式碼儲存區域控點之後,即可使用控點存取雲端程式碼儲存區域

若要起始雲端程式碼儲存區域

  1. 建立證明資料以存取雲端程式碼儲存區域

    請參閱 CREATE_CREDENTIAL 程序,瞭解建立證明資料的相關資訊。

  2. 視儲存區域、GitHub、Azure 儲存區域或 AWS CodeCommit 而定,使用特定儲存區域的參數呼叫 DBMS_CLOUD_REPO.INIT_REPO ,以取得儲存區域控制代碼。

    下列範例提供每個支援之雲端程式碼儲存區域的範例。

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

如需初始化函數的詳細資訊,請參閱 DBMS_CLOUD_REPO 初始化作業

建立及管理雲端程式碼儲存區域

DBMS_CLOUD_REPO 管理常式可讓您透過建立、列出、更新或刪除儲存區域來管理雲端程式碼儲存區域

首先,取得雲端程式碼儲存區域控點以提供存取儲存區域。請參閱起始雲端程式碼儲存區域以瞭解詳細資訊。

  1. 建立儲存區域:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.CREATE_REPOSITORY(
            repo => :repo,
            description => 'test repo'
      );
    END;
    /
  2. 若要更新儲存區域,請執行下列動作:
    
    VAR repo clob
    DEFINE repo_name='test_repo';
    BEGIN
      DBMS_CLOUD_REPO.UPDATE_REPOSITORY(
            repo => :repo,
            new_name => '&repo_name' || '_new'
      );
    END;
    /
  3. 列出儲存區域:
    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. 刪除儲存區域:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_REPOSITORY(
            repo => :repo
      );
    END;
    /

如需詳細資訊,請參閱 DBMS_CLOUD_REPO 儲存區域管理作業

雲端程式碼儲存區域中建立及管理分支

DBMS_CLOUD_REPO 管理常式可讓您透過在儲存區域中建立、列出、合併或刪除分支來管理雲端程式碼儲存區域分支。

若要執行雲端程式碼儲存區域分支管理作業,您必須先:

  1. 若要在雲端程式碼儲存區域中建立分支,請執行下列步驟:
    BEGIN
      DBMS_CLOUD_REPO.CREATE_BRANCH (
        repo            => l_repo,
        branch_name     => 'test_branch',
        parent_branch   => 'main'
        );
    END;
    /
  2. 若要刪除雲端程式碼儲存區域中的分支,請執行下列動作:
    BEGIN
      DBMS_CLOUD_REPO.DELETE_BRANCH (
          repo        => l_repo,
          branch_name => 'test_branch'
      );
    END;
    /
  3. 若要將分支合併至雲端程式碼儲存區域中的另一個分支:
    BEGIN
      DBMS_CLOUD_REPO.MERGE_BRANCH (
        repo               => l_repo,
        branch_name        => 'test_branch',
        target_branch_name => 'main'
        );
    END;
    /
  4. 若要列出雲端程式碼儲存區域中的分支,請執行下列步驟:
    
    SELECT * FROM DBMS_CLOUD_REPO.LIST_BRANCHES (repo => l_repo);
    
  5. 您可以根據下列項目,在雲端程式碼儲存區域的分支中列出確認項目;
    • 儲存區域

    • 分公司

    • 分支的檔案路徑

    • SHA/commit_id

      附註:

      SHA 是由十六進制字元 (0 – 9 和 a – f) 組成的總和檢查 40 字元字串。

    若要根據儲存區域列出確認項目:

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

    若要根據分支的儲存庫、commit_id 和檔案路徑列出確認:

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

    若要根據儲存區域和分支的檔案路徑列出確認項目:

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

    若要根據分支的儲存庫、branch_name 和檔案路徑列出確認:

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

    若要根據儲存區域和分支的 commit_id 列出確認:

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

如需詳細資訊,請參閱 DBMS_CLOUD_REPO 儲存區域分支管理作業

將綱要物件匯出至雲端程式碼儲存區域分支

DBMS_CLOUD_REPO 管理常式可讓您將綱要中物件的描述資料匯出至雲端程式碼儲存區域分支。您可以根據物件名稱或物件類型來篩選清單。

若要匯出綱要描述資料,您必須先:

使用 EXPORT_SCHEMA 程序將綱要中物件的描述資料匯出至雲端程式碼儲存區域分支:

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

此範例會將 USER1 綱要的描述資料匯出至 l_repo 儲存區域。匯出包括表格 EMPLOYEE_SALARYEMPLOYEE_ADDRESS 的描述資料,以及任何包含 OFFICE 的表格名稱。它也會匯出 EMPLOYEE_RECORD_SEQ 序列,並排除綱要中的檢視。

如需詳細資訊,請參閱EXPORT_SCHEMA 程序

使用檔案作業搭配雲端程式碼儲存區域

您可以使用 DBMS_CLOUD_REPO 檔案作業來建立、取得、列出、更新或刪除雲端程式碼儲存區域中的檔案。

使用檔案作業之前,請先取得雲端程式碼儲存區域控點。請參閱起始雲端程式碼儲存區域以瞭解詳細資訊。

使用檔案之前,您還需要先建立儲存庫。請參閱建立及管理雲端程式碼儲存區域以瞭解詳細資訊。

  1. 若要取得檔案:
    
    SELECT DBMS_CLOUD_REPO.GET_FILE(repo => :repo, file_path => 'test1.sql')
    
  2. 若要建立檔案:
    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. 若要更新檔案:
    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. 列出檔案:
    SELECT id, name, bytes, url FROM DBMS_CLOUD_REPO.LIST_FILES(repo => :repo);
    
  5. 刪除檔案:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.DELETE_FILE(
            repo => :repo,
            file_path => 'test1.sql'
      );
    END;
    /

如需詳細資訊,請參閱 DBMS_CLOUD_REPO 檔案作業

將 SQL 安裝作業與雲端程式碼儲存區域搭配使用

您可以使用 DBMS_CLOUD_REPO SQL 安裝作業來儲存及下載雲端程式碼儲存區域中的 SQL 命令檔。

使用「SQL 安裝」作業之前,請先取得雲端程式碼儲存區域控制碼。請參閱起始雲端程式碼儲存區域以瞭解詳細資訊。

在使用「SQL 安裝」作業之前,您還需要先建立儲存區域。請參閱建立及管理雲端程式碼儲存區域以瞭解詳細資訊。

命令檔是用來作為綱要安裝命令檔,而非一般 SQL 命令檔:

  • 命令檔不可包含 SQL*Plus 從屬端特定命令。
  • 程序檔不能包含連結變數或參數化的程序檔。
  • SQL 敘述句必須在新的一行 (/) 以斜線終止。
  • 命令檔可以包含 DDL、DML PLSQL 敘述句,但不支援直接 SELECT 敘述句。支援在 PL/SQL 區塊中使用 SELECT。

如果不包含連結變數或定義,可以使用 EXECUTE IMMEDIATE 執行的任何 SQL 敘述句都將運作。

  1. 若要將 DDL 描述資料上傳至雲端程式碼儲存區域
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.EXPORT_OBJECT(
            repo => :repo,
            object_type => 'PACKAGE',
            object_name => 'MYPACK',
            file_path   => 'mypack.sql'
      );
    END;
    /
  2. 若要從檔案安裝 SQL 敘述句,請執行下列動作:
    VAR repo clob
    BEGIN
      DBMS_CLOUD_REPO.INSTALL_FILE(
            repo => :repo,
            file_path     => 'test3.sql',
            stop_on_error => FALSE
      );
    END;
    /
  3. 若要從緩衝區安裝 SQL 敘述句,請執行下列動作:
    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;
    /

如需詳細資訊,請參閱 DBMS_CLOUD_REPO SQL 安裝作業