使用 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 初始化例程将初始化云代码资料档案库。获取云代码资料档案库句柄后,可以使用该句柄访问云代码资料档案库

要初始化云代码资料档案库,请执行以下操作:

  1. 创建身份证明以访问云代码资料档案库

    有关创建凭证的信息,请参见CREATE_CREDENTIAL Procedure

  2. 根据资料档案库、GitHub、Azure Repos 或 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 Initialization Operations

创建和管理云代码资料档案库

DBMS_CLOUD_REPO 管理例程允许您通过创建、列出、更新或删除资料档案库来管理云代码资料档案库

首先,获取 Cloud Code Repository(云代码资料档案库)句柄以提供对资料档案库的访问。有关详细信息,请参阅初始化云代码资料档案库

  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 Repository Branch Management Operations

将方案对象导出到云代码资料档案库分支

DBMS_CLOUD_REPO 管理例程允许您将方案中对象的元数据导出到 Cloud Code Repository(云代码资料档案库)分支。您可以根据对象名称或对象类型筛选列表。

要导出方案元数据,必须首先执行以下操作:

使用 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 Procedure

将文件操作与云代码资料档案库结合使用

DBMS_CLOUD_REPO 文件操作允许您在云代码资料档案库中创建、获取、列出、更新或删除文件。

在使用文件操作之前获取 Cloud Code Repository(云代码资料档案库)句柄。有关详细信息,请参阅初始化云代码资料档案库

在处理文件之前,还需要创建资料档案库。有关详细信息,请参阅创建和管理云代码资料档案库

  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 File Operations

将 SQL 安装操作与云代码资料档案库结合使用

DBMS_CLOUD_REPO SQL 安装操作允许您从云代码资料档案库存储和下载 SQL 脚本。

在使用 SQL 安装操作之前,获取云代码资料档案库句柄。有关详细信息,请参阅初始化云代码资料档案库

在使用 SQL 安装操作之前,还需要创建资料档案库。有关详细信息,请参阅创建和管理云代码资料档案库

这些脚本用作模式安装脚本,而不是通用 SQL 脚本:

  • 脚本不能包含特定于 SQL*Plus 客户端的命令。
  • 脚本不能包含绑定变量或参数化脚本。
  • SQL 语句必须以新行 (/) 上的斜杠终止。
  • 脚本可以包含 DDL 和 DML PLSQL 语句,但不支持直接 SELECT 语句。支持在 PL/SQL 块中使用 SELECT。

如果任何 SQL 语句不包含绑定变量或定义,则可以使用 EXECUTE IMMEDIATE 运行该语句。

  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 安装操作