使用自治 AI 数据库在云代码资料档案库中管理和存储文件
自治 AI 数据库提供了用于在云代码 (Git) 资料档案库中管理和存储文件的例程。支持的云代码存储库包括:GitHub、AWS CodeCommit 和 Azure Repos。
关于使用自治 AI 数据库的云代码资料档案库
DBMS_CLOUD_REPO 程序包提供了用于从自治 AI 数据库访问云代码资料档案库的单个接口。
支持的云代码资料档案库提供了以下功能:
-
Git 版本控制系统: Git 是用于跟踪任何文件集中的更改的软件,通常用于协调程序员在软件开发期间协作开发源代码的工作。其目标包括速度、数据完整性以及对分布式非线性工作流的支持。
-
Git 资源库:Git 资源库是项目的虚拟存储。它允许您保存代码的版本,您可以在需要时访问这些版本。
DBMS_CLOUD_REPO API 使用存储库句柄(REPO 对象)。资料档案库句柄是一个不透明的 JSON 对象,它表示特定云提供者的云代码资料档案库。REPO 对象可以传递到不同的 DBMS_CLOUD_REPO API。此不透明对象可确保 DBMS_CLOUD_REPO 过程和函数与多云兼容;当您从一个云代码资料档案库提供程序迁移到另一个云代码资料档案库时,不必更改代码。
自治 AI 数据库提供以下功能,可帮助您使用云代码资料档案库:
-
资料档案库初始化操作允许您初始化资料档案库。
有关更多信息,请参见 Initialize a Cloud Code Repository 。
-
可用于创建、列出、更新或删除资料档案库的资料档案库管理操作。
有关详细信息,请参阅创建和管理云代码资料档案库。
-
资料档案库分支管理操作,可用于在资料档案库中创建、列出、合并或删除分支。
有关详细信息,请参阅在云代码资料档案库中创建和管理分支。
-
将方案中所有对象的元数据 DDL 导出到资料档案库。
有关更多信息,请参见 Export Schema Objects to the Cloud Code Repository Branch 。
-
用于上载、下载、更新和删除文件的资料档案库文件管理操作。
有关更多信息,请参见 Use File Operations with a Cloud Code Repository 。
-
SQL 安装操作,允许您将数据库对象元数据 DDL 导出到资料档案库并将 SQL 语句从云代码资料档案库安装到数据库中。
有关更多信息,请参见 Use SQL Install Operations with a Cloud Code Repository 。
初始化云代码资料档案库
DBMS_CLOUD_REPO 初始化例程初始化云代码资料档案库。获取 Cloud Code Repository 句柄后,可使用该句柄访问 Cloud Code Repository。
要初始化云代码资料档案库,请执行以下操作:
-
创建身份证明以访问云代码资料档案库。
有关创建凭证的信息,请参见 CREATE_CREDENTIAL Procedure 。
-
根据存储库、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 句柄以提供对系统信息库的访问。有关详细信息,请参见初始化云代码资料档案库。
-
要创建资料档案库,请执行以下操作:
VAR repo clob BEGIN DBMS_CLOUD_REPO.CREATE_REPOSITORY( repo => :repo, description => 'test repo' ); END; / -
要更新存储库,请执行以下操作:
VAR repo clob DEFINE repo_name='test_repo'; BEGIN DBMS_CLOUD_REPO.UPDATE_REPOSITORY( repo => :repo, new_name => '&repo_name' || '_new' ); END; / -
要列出系统信息库:
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); -
要删除存储库,请执行以下操作:
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 分支管理操作,必须先执行以下操作:
-
创建身份证明。
有关详细信息,请参见 CREATE_CREDENTIAL Procedure 。
-
获取句柄。
有关详细信息,请参阅初始化云代码资料档案库。
-
创建资源库。
有关详细信息,请参阅创建和管理云代码资料档案库。
-
以 ADMIN 用户身份登录或对
DBMS_CLOUD_REPO具有EXECUTE权限。
-
要在云代码资料档案库中创建分支:
BEGIN DBMS_CLOUD_REPO.CREATE_BRANCH ( repo => l_repo, branch_name => 'test_branch', parent_branch => 'main' ); END; / -
要删除云代码资料档案库中的分支,请执行以下操作:
BEGIN DBMS_CLOUD_REPO.DELETE_BRANCH ( repo => l_repo, branch_name => 'test_branch' ); END; / -
要将分支合并到云代码资料档案库中的另一个分支,请执行以下操作:
BEGIN DBMS_CLOUD_REPO.MERGE_BRANCH ( repo => l_repo, branch_name => 'test_branch', target_branch_name => 'main' ); END; / -
要列出云代码资料档案库中的分支,请执行以下操作:
SELECT * FROM DBMS_CLOUD_REPO.LIST_BRANCHES (repo => l_repo); -
您可以根据以下内容列出 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 管理例程允许您将方案中对象的元数据导出到云代码资料档案库分支。您可以根据对象名称或对象类型筛选列表。
要导出方案元数据,必须首先:
-
创建身份证明。
有关详细信息,请参见 CREATE_CREDENTIAL Procedure 。
-
获取句柄。
有关详细信息,请参阅初始化云代码资料档案库。
-
创建资源库。
有关详细信息,请参阅创建和管理云代码资料档案库。
-
以 ADMIN 用户身份登录或对
DBMS_CLOUD_REPO具有EXECUTE权限。
使用 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_SALARY 和 EMPLOYEE_ADDRESS 的元数据以及包含 OFFICE 的任何表名。它还会导出 EMPLOYEE_RECORD_SEQ 序列并排除方案中的视图。
有关更多信息,请参见 EXPORT_SCHEMA Procedure 。
将文件操作与云代码资料档案库结合使用
通过 DBMS_CLOUD_REPO 文件操作,可以在云代码资料档案库中创建、获取、列出、更新或删除文件。
使用文件操作之前,请先获取云代码资料档案库句柄。有关详细信息,请参见初始化云代码资料档案库。
在处理文件之前,还需要创建系统信息库。有关详细信息,请参见“创建和管理云代码资料档案库”。
- 要获取文件,请执行以下操作:
SELECT DBMS_CLOUD_REPO.GET_FILE(repo => :repo, file_path => 'test1.sql') -
要创建文件,请执行以下操作:
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; / -
要更新文件,请执行以下操作:
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; / -
要列出文件,请执行以下操作:
SELECT id, name, bytes, url FROM DBMS_CLOUD_REPO.LIST_FILES(repo => :repo); -
要删除文件,请执行以下操作:
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*Plus 客户端特定的命令。
-
脚本不能包含绑定变量或参数化脚本。
-
SQL 语句必须以斜杠在新行 (/) 中终止。
-
脚本可以包含 DDL 和 DML PLSQL 语句,但是不支持直接
SELECT语句。支持在 PL/SQL 块中使用 SELECT。
如果任何 SQL 语句不包含绑定变量或定义,则可以使用 EXECUTE IMMEDIATE 运行该语句。
-
要将 DDL 元数据上载到云代码资料档案库,请执行以下操作:
VAR repo clob BEGIN DBMS_CLOUD_REPO.EXPORT_OBJECT( repo => :repo, object_type => 'PACKAGE', object_name => 'MYPACK', file_path => 'mypack.sql' ); END; / -
要从文件安装 SQL 语句,请执行以下操作:
VAR repo clob BEGIN DBMS_CLOUD_REPO.INSTALL_FILE( repo => :repo, file_path => 'test3.sql', stop_on_error => FALSE ); END; / -
从缓冲区安装 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 。