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

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

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

  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ファイル操作を参照してください。

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