Autonomous Databaseを使用したクラウド・コード・リポジトリでのファイルの管理および格納

Autonomous Databaseには、クラウド・コード(Git)リポジトリでファイルを管理および格納するためのルーチンが用意されています。サポートされているクラウド・コード・リポジトリは、GitHub、AWS CodeCommitおよびAzure Reposです。

Autonomous Databaseでのクラウド・コード・リポジトリについて

DBMS_CLOUD_REPOパッケージは、Autonomous DatabaseからCloud Code Repositoryにアクセスするための単一のインタフェースを提供します。

サポートされるクラウド・コード・リポジトリには、次の機能があります:

  • 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プロシージャを参照してください。

  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 Reposの初期化:

      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は、16進文字(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_SALARYおよびEMPLOYEE_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 File Operationsを参照してください。

クラウド・コード・リポジトリでの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インストール操作を参照してください。