はじめに
Autonomous DatabaseのDBMS_CLOUD_REPOパッケージを使用して、Githubに接続し、リポジトリの作成、表定義DDL文をリポジトリのファイルとして出力、さらにリポジトリ上のスクリプトファイルを直接Autonomous Databaseで実行してみた。
作業ステップ
- リポジトリ(Github)のアクセストークンを生成
- Autonomous Databaseでクレデンシャルの生成
- 表定義をエクスポート
- コードリポジトリのスクリプトをAutonomous Databaseで実行
リポジトリ(Github)のアクセストークンを生成
Githubにログインしアクセストークンを生成
https://github.com/settings/tokens

生成されたトークンをコピー
Autonomous Databaseでクレデンシャルの生成
「データベース・アクション」などでAutonomous Databaseに接続し、クレデンシャルを作成
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL (
'GITHUB_CRED',
'<GitHub Email Address>',
'<GitHub Personal Access Token>');
END;
/
PL/SQL procedure successfully completed.
表定義をエクスポート
事前準備として表定義出力対象となる表の作成
CREATE TABLE persons(
person_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
first_name VARCHAR2(50) NOT NULL,
last_name VARCHAR2(50) NOT NULL
);
Table PERSONS created.
DBMS_CLOUD_REPO パッケージを使用して、新しい Git Repo を作成、表定義DDLをファイルに出力
必要なRepoハンドルの JSON オブジェクトを初期化し、それを使って “BlogRepo” という名前の新しいリポジトリを作成し、 “Persons”表のメタデータをエクスポート
DECLARE
repoHandle clob;
repoName clob := 'BlogRepo';
BEGIN
repoHandle := DBMS_CLOUD_REPO.INIT_GITHUB_REPO(
credential_name => 'GITHUB_CRED',
repo_name => repoName,
owner => '<GitHub Repo Owner>'
);
DBMS_OUTPUT.PUT_LINE(repoHandle);
DBMS_CLOUD_REPO.CREATE_REPOSITORY(
repo => repoHandle,
description => 'Blog example repo',
private => TRUE
);
DBMS_CLOUD_REPO.EXPORT_OBJECT(
repo => repoHandle,
object_type => 'TABLE', --Object types supported by DBMS_METADATA
object_name => 'persons',
file_path => 'BlogScript.sql'
);
END;
/
PL/SQL procedure successfully completed.
Elapsed: 00:00:10.623
Github でリポジトリ、ファイルが作成されていることの確認
コードリポジトリのスクリプトをAutonomous Databaseで実行
事前準備として作成対象の表を削除
DROP TABLE persons purge;
Table PERSONS dropped.
DBMS_CLOUD_REPOの "INSTALL_FILE" プロシージャを実行
DBMS_CLOUD_REPOパッケージの "INSTALL_FILE" プロシージャを実行して、リポジトリから任意のスクリプト(ここでは先ほど作成した BlogScript.sql を使用)を取得し、Autonomous Database上で実行
DECLARE
repoHandle clob;
repoName clob := 'BlogRepo';
BEGIN
repoHandle := DBMS_CLOUD_REPO.INIT_GITHUB_REPO(
credential_name => 'GITHUB_CRED',
repo_name => 'BlogRepo',
owner => '<GitHub Repo Owner>'
);
DBMS_OUTPUT.PUT_LINE(repoHandle);
DBMS_CLOUD_REPO.INSTALL_FILE(
repo => repoHandle,
file_path => 'BlogScript.sql',
stop_on_error => FALSE
);
END;
/
PL/SQL procedure successfully completed.
desc persons
Name Null? Type
---------- -------- ------------
PERSON_ID NOT NULL NUMBER
FIRST_NAME NOT NULL VARCHAR2(50)
LAST_NAME NOT NULL VARCHAR2(50)
おわりに
Autonomous Databaseから直接コードリポジトリを操作できることがわかりました。

