使用自治 AI 数据库在云代码资料档案库中管理和存储文件

自治 AI 数据库提供了用于在云代码 (Git) 资料档案库中管理和存储文件的例程。支持的云代码存储库包括:GitHub、AWS CodeCommit 和 Azure Repos。

关于使用自治 AI 数据库的云代码资料档案库

DBMS_CLOUD_REPO 程序包提供了用于从自治 AI 数据库访问云代码资料档案库的单个接口。

支持的云代码资料档案库提供了以下功能:

DBMS_CLOUD_REPO API 使用存储库句柄(REPO 对象)。资料档案库句柄是一个不透明的 JSON 对象,它表示特定云提供者的云代码资料档案库。REPO 对象可以传递到不同的 DBMS_CLOUD_REPO API。此不透明对象可确保 DBMS_CLOUD_REPO 过程和函数与多云兼容;当您从一个云代码资料档案库提供程序迁移到另一个云代码资料档案库时,不必更改代码。

自治 AI 数据库提供以下功能,可帮助您使用云代码资料档案库:

初始化云代码资料档案库

DBMS_CLOUD_REPO 初始化例程初始化云代码资料档案库。获取 Cloud Code Repository 句柄后,可使用该句柄访问 Cloud Code Repository。

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

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

在云代码资料档案库中创建和管理分支

通过 DBMS_CLOUD_REPO 管理例程,您可以通过在资料档案库中创建、列出、合并或删除分支来管理 Cloud Code Repository 分支。

要执行 Cloud Code Repository 分支管理操作,必须先执行以下操作:

  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. 您可以根据以下内容列出 Cloud Code Repository 中的分支中的提交;

    • 资料档案库

    • 分支

    • 分支的文件路径

    • 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');
    

    要基于分支的 repository 和 commit_id 列出提交,请执行以下操作:

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

有关更多信息,请参见 DBMS_CLOUD_REPO Repository Branch Management Operations

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

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 Procedure

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

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

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

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

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

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

这些脚本用作方案安装脚本,而不是一般 SQL 脚本:

如果任何 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 Install Operations

相关内容

关于 DBMS_CLOUD_REPO