4.3 クイック・スタート

この項では、簡単な設定およびタスクのリストを使用して、SQLclプロジェクト機能を紹介します。クイック・スタートでは、次のことを説明します:

  • 新しいプロジェクトを初期化する方法(demoという単一のスキーマを持つアプリケーションの場合)。
  • スプリントの一部として実行する作業:
    • チケット-1
      • 標準サンプルのdept表およびemp表の作成
      • 表へのサンプル・データのロード
    • チケット-2
      • emailという名前の列のemp表への追加
      • get_display_nameという名前の新しいファンクションの追加
  • リリースを完了し、アーティファクトを生成してデプロイする方法。

トピック

4.3.1 前提条件

このクイック・スタートには、次の前提条件があります:

  • demoスキーマを事前に作成して、2つのデータベースDEVおよびPRODを作成する必要があります。SQLclからdemoユーザーとして接続する必要があります。
    create user demo identified by demo;
    grant resource to demo;
    grant connect to demo;
    grant create view to demo;
    alter user demo quota unlimited on system;
  • SQLclでは、demo-devdemo-prodの2つの名前付き接続が必要です。次の例は、SQLclで名前付き接続を追加および管理する方法を示しています。
    -Add a new named connection
    -Note: -savepwd is an optional parameter to save the password.
    SQL> conn -savepwd -save demo-dev demo/demo@//myserver.com:1521/mypdb
     
    -List current connections
    SQL> connmgr list
     
    -To connect to a named connection
    SQL> conn -name demo-dev

4.3.2 仮定

このクイック・スタートでは、次のとおり仮定しています:

  • demo-projectという名前のGitプロジェクトを使用します。

    リポジトリ内の作業はすべて"ローカル"のみであり、このデモにはリモート・サーバー(GithubやGitlabなど)は必要ありません。

  • チケット(または発行)という用語は、通常、Jiraなどのシステムで追跡される作業単位を指します。
  • SQLclは、hostコマンドを使用してオペレーティング・システム・レベルのコマンドを実行できます。
    • たとえば、host dateはシステム日付を出力します。
    • hostコマンドのショートカットは!<cmd>です。たとえば、!datehost dateと同等です。
    • このデモでは、多くのhostコマンドを使用しています。毎回SQLclを終了したり入らなくてもよいように、!ショートカットを使用してSQLcl内で直接実行します。

4.3.3 プロジェクト設定

Gitリポジトリを作成します。

ノート:

このデモでは、ローカルGitリポジトリを使用します。ほとんどの場合、リモートGitリポジトリからのクローンが起点として使用されます。
-Create and go into new folder
mkdir demo-project
cd demo-project
 
-Start SQLcl
sql /nolog
 
-Initialize git repo
SQL> !git init --initial-branch=main

SQLclプロジェクトのリポジトリを初期化します。

-The schema that is used for this demo is called "demo".
 
SQL> project init -name demo_project -schemas demo
 
------------------------
PROJECT DETAILS
------------------------
Project name:    demo_project
Schema(s):       DEMO
Directory:       /private/tmp/demo-project
Connection name: 
Project root:    demo-project
Your project has been successfully created
  
-Root folder now looks like:
- .
- ├── .dbtools
- │   ├── filters
- │   │   └── project.filters
- │   ├── project.config.json
- │   └── project.sqlformat.xml
- ├── README.md
- ├── dist
- │   ├── README.md
- │   └── install.sql
- └── src
-     ├── README.md
-     └── database
-         ├── README.md
-         └── demo
 
-Add and commit the initial files to the repository
 
SQL> !git add --all
SQL> !git commit -m "initial"
 
[main (root-commit) 5fa6ebd] initial
 9 files changed, 188 insertions(+)
 create mode 100644 .dbtools/filters/project.filters
 create mode 100644 .dbtools/project.config.json
 create mode 100644 .dbtools/project.sqlformat.xml
 create mode 100644 .gitignore
 create mode 100644 README.md
 create mode 100644 dist/README.md
 create mode 100644 dist/install.sql
 create mode 100644 src/README.md
 create mode 100644 src/database/README.md

4.3.4 チケット-1

実際には、ほとんどの開発が、JiraやGitHubなどのプロジェクト管理システムでチケットの一部として行われます。この項では、ticket-1が作成され、次の要件があります:

  1. emp表およびdept表を作成します。
  2. 初期データを追加します。

次のステップで、操作を実行します:

  1. ticket-1という名前のGitブランチを作成してチェックアウトします。

  2. データベース・スキーマに表を作成します。

  3. スキーマからプロジェクトのsrcフォルダにオブジェクトをエクスポートします。

  4. プロジェクトのdistフォルダに変更を登録します。

    • 変更は、機能ブランチとメイン・ブランチを比較することで自動的に検出されます。
    • 変更は、ticket-1の一部として次のリリースで作成されます。
    • 変更は、Liquibaseの変更ログまたは変更セットとして取得されます。
  5. emp表およびdept表の初期データをロードするカスタム・スクリプトを追加します。

  6. 変更をコミットしてマージし、チケットを完了します。

ステップ

  1. demo-devサーバーに接続します。
    SQL> conn -name demo-dev
    Connected.
  2. ticket-1という新しいブランチを作成します。
    SQL> !git checkout -b ticket-1
    Switched to a new branch 'ticket-1'
  3. データベース・オブジェクトを作成します。
    SQL> create table dept( 
         deptno     number(2,0),  
         dname      varchar2(14), 
         loc        varchar2(13), 
         constraint pk_dept primary key (deptno)  
    );
    
    Table DEPT created.
     
    SQL> create table emp(  
         empno      number(4,0),
         ename      varchar2(10),   
         job        varchar2(9),
         mgr        number(4,0),
         hiredate   date,   
         sal        number(7,2),
         comm       number(7,2),
         deptno     number(2,0),
         constraint pk_emp    primary key (empno),   
         constraint fk_deptno foreign key (deptno) references dept (deptno)   
    );
    
    Table EMP created.
     
    SQL> create index idx_emp_deptno on emp(deptno);
    Index IDX_EMP_DEPTNO created.
  4. すべてのオブジェクトをsrcフォルダにエクスポートします。
    SQL> project export
    
    The current connection //myserver.com:1521/mypdb DEMO will be used for all operations
    *** INDEXES ***
    *** TABLES ***
    *** REF_CONSTRAINTS ***
    -------------------------------
    TABLE                         2
    REF_CONSTRAINT                1
    INDEX                         1
    -------------------------------
    Exported 4 objects
    Elapsed 20 sec

    これで、srcフォルダにdemoスキーマでオブジェクトを再作成するために必要なスクリプトがすべて格納されました。

    srcフォルダ内の変更は、リリースごとにdistフォルダに追加する必要がある変更を検出するために使用されます。

    フォルダ構造は次のようになります:

    └── src                                                                                                                                                                                                                                         
        ├── README.md                                                                                                                                                                                                                               
        └── database                                                                                                                                                                                                                                
            ├── README.md                                                                                                                                                                                                                           
            └── demo                                                                                                                                                                                                                                
                ├── indexes                                                                                                                                                                                                                         
                │   └── idx_emp_deptno.sql                                                                                                                                                                                                          
                ├── ref_constraints                                                                                                                                                                                                                 
                │   └── fk_deptno.sql                                                                                                                                                                                                               
                └── tables                                                                                                                                                                                                                          
                    ├── dept.sql                                                                                                                                                                                                                    
                    └── emp.sql

    新しく作成したsrcファイルを追加してコミットします。

    ノート:

    コミットされた変更のみがdist/releaseに対する変更を判別するために使用されるので、srcの変更をすべてコミットすることが非常に重要です。
    SQL> !git add --all
    SQL> !git commit -m "TICKET-1: Added dept emp tables, and get_display_name function"
     
    [ticket-1 812db72] TICKET-1: Added dept emp tables, and get_display_name function
     4 files changed, 44 insertions(+)
     create mode 100644 src/database/demo/indexes/idx_emp_deptno.sql
     create mode 100644 src/database/demo/ref_constraints/fk_deptno.sql
     create mode 100644 src/database/demo/tables/dept.sql
     create mode 100644 src/database/demo/tables/emp.sql
  5. 現在のチケットのスクリプトおよびLiquibase変更ログを生成します。

    これはバックグラウンドで実行され、branches/ticket-1/src内の変更がbranches/main/srcと比較されます。

    SQL> project stage 
    Stage successfully created, please review and commit your changes to repository

    これで、distフォルダは次のようになります:

    ノート:

    • 現在の作業はすべてreleases/nextフォルダに格納されます。リリースの準備が完了すると、このフォルダはリリース番号に変換され、新規または空のnextフォルダが作成されます。
    • 変更ログは次のように機能します: main.changelog.xmlnext/release.changelog.xmlを参照し、これはticket-1/stage.changelog.xmlを参照し、これはticket-1に含まれるすべてのファイルを参照します。
    ├── dist
    │   ├── README.md
    │   ├── install.sql
    │   ├── releases
    │   │   ├── main.changelog.xml
    │   │   └── next
    │   │       ├── changes
    │   │       │   └── ticket-1
    │   │       │       ├── code
    │   │       │       │   └── _custom
    │   │       │       ├── demo
    │   │       │       │   ├── index
    │   │       │       │   │   └── idx_emp_deptno.sql
    │   │       │       │   ├── ref_constraint
    │   │       │       │   │   └── fk_deptno.sql
    │   │       │       │   └── table
    │   │       │       │       ├── dept.sql
    │   │       │       │       └── emp.sql
    │   │       │       └── stage.changelog.xml
    │   │       ├── code
    │   │       │   └── code.changelog.xml
    │   │       └── release.changelog.xml
    │   └── utils
    │       ├── prechecks.sql
    │       └── recompile.sql
  6. ファイルを追加してコミットします。

    リポジトリに追加する前に、生成されたすべてのファイルを確認することをお薦めします。

    SQL> !git add --all
    SQL> !git status
     
    On branch ticket-1
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            new file:   dist/releases/main.changelog.xml
            new file:   dist/releases/next/changes/ticket-1/demo/index/idx_emp_deptno.sql
            new file:   dist/releases/next/changes/ticket-1/demo/ref_constraint/fk_deptno.sql
            new file:   dist/releases/next/changes/ticket-1/demo/table/dept.sql
            new file:   dist/releases/next/changes/ticket-1/demo/table/emp.sql
            new file:   dist/releases/next/changes/ticket-1/stage.changelog.xml
            new file:   dist/releases/next/code/code.changelog.xml
            new file:   dist/releases/next/release.changelog.xml
            new file:   dist/utils/prechecks.sql
            new file:   dist/utils/recompile.sql
    
    SQL> !git commit -m "TICKET-1: Added dept emp tables"
     
    [ticket-1 261cceb] TICKET-1: Added dept emp tables
     10 files changed, 396 insertions(+)
     create mode 100644 dist/releases/main.changelog.xml
     create mode 100644 dist/releases/next/changes/ticket-1/demo/index/idx_emp_deptno.sql
     create mode 100644 dist/releases/next/changes/ticket-1/demo/ref_constraint/fk_deptno.sql
     create mode 100644 dist/releases/next/changes/ticket-1/demo/table/dept.sql
     create mode 100644 dist/releases/next/changes/ticket-1/demo/table/emp.sql
     create mode 100644 dist/releases/next/changes/ticket-1/stage.changelog.xml
     create mode 100644 dist/releases/next/code/code.changelog.xml
     create mode 100644 dist/releases/next/release.changelog.xml
     create mode 100644 dist/utils/prechecks.sql
     create mode 100644 dist/utils/recompile.sql
  7. カスタム.sqlファイルを使用して、各表のサンプル・データを追加します。

    project stage add-customコマンドを使用してカスタム・ファイルを生成します。これは、すべてのLiquibaseヘッダー情報を自動生成するためです。

    SQL> project stage add-custom -file-name dept-data.sql
    SQL> project stage add-custom -file-name emp-data.sql

    これで、カスタム・ファイルが_customフォルダのdistに表示されます。

    ├── dist
    │   ├── releases
    │   │   └── next
    │   │       ├── changes
    │   │       │   └── ticket-1
    │   │       │       ├── code
    │   │       │       │   └── _custom
    │   │       │       │       ├── dept-data.sql
    │   │       │       │       └── emp-data.sql

    次のコマンドでは、dept-data.sqlの内容が表示されます。

    SQL> !cat dist/releases/next/changes/ticket-1/code/_custom/dept-data.sql
    (For Windows, use !type .\dist\releases\next\changes\ticket-1\code\_custom\dept-data.sql)
    
    -- liquibase formatted sql
    -- changeset SqlCl:f56fcfec11f7d7cb99d74403a0c2727a765ddb99 stripComments:false logicalFilePath:ticket-1/code/_custom/dept-data.sql
    -- sqlcl_snapshot dist/releases/next/changes/ticket-1/code/_custom/dept-data.sql:null:null:custom
  8. 各ファイルのサンプル・データを追加します。

    dist/releases/next/changes/ticket-1/code/_custom/dept-data.sqlで、次の文をコピーしてファイルの最後に貼り付け、ファイルを保存します。

    insert into demo.dept values(10, 'ACCOUNTING', 'NEW YORK');
    insert into demo.dept values(20, 'RESEARCH', 'DALLAS');
    insert into demo.dept values(30, 'SALES', 'CHICAGO');
    insert into demo.dept values(40, 'OPERATIONS', 'BOSTON');

    dist/releases/next/changes/ticket-1/code/_custom/emp-data.sqlで、次の文をコピーしてファイルの最後に貼り付け、ファイルを保存します。

    insert into demo.emp values( 7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981','dd-mm-yyyy'), 5000, null, 10);
    insert into demo.emp values( 7698, 'BLAKE', 'MANAGER', 7839, to_date('1-5-1981','dd-mm-yyyy'), 2850, null, 30);
    insert into demo.emp values( 7782, 'CLARK', 'MANAGER', 7839, to_date('9-6-1981','dd-mm-yyyy'), 2450, null, 10);
    insert into demo.emp values( 7566, 'JONES', 'MANAGER', 7839, to_date('2-4-1981','dd-mm-yyyy'), 2975, null, 20);
    insert into demo.emp values( 7788, 'SCOTT', 'ANALYST', 7566, to_date('13-JUL-87','dd-mm-rr') - 85, 3000, null, 20);
    insert into demo.emp values( 7902, 'FORD', 'ANALYST', 7566, to_date('3-12-1981','dd-mm-yyyy'), 3000, null, 20);
    insert into demo.emp values( 7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980','dd-mm-yyyy'), 800, null, 20);
    insert into demo.emp values( 7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-2-1981','dd-mm-yyyy'), 1600, 300, 30);
    insert into demo.emp values( 7521, 'WARD', 'SALESMAN', 7698, to_date('22-2-1981','dd-mm-yyyy'), 1250, 500, 30);
    insert into demo.emp values( 7654, 'MARTIN', 'SALESMAN', 7698, to_date('28-9-1981','dd-mm-yyyy'), 1250, 1400, 30);
    insert into demo.emp values( 7844, 'TURNER', 'SALESMAN', 7698, to_date('8-9-1981','dd-mm-yyyy'), 1500, 0, 30);
    insert into demo.emp values( 7876, 'ADAMS', 'CLERK', 7788, to_date('13-JUL-87', 'dd-mm-rr') - 51, 1100, null, 20);
    insert into demo.emp values( 7900, 'JAMES', 'CLERK', 7698, to_date('3-12-1981','dd-mm-yyyy'), 950, null, 30);
    insert into demo.emp values( 7934, 'MILLER', 'CLERK', 7782, to_date('23-1-1982','dd-mm-yyyy'), 1300, null, 10);
  9. 各ファイルを実行して、データが表にロードされていることを確認します。
    SQL> @dist/releases/next/changes/ticket-1/code/_custom/dept-data.sql
    SQL> @dist/releases/next/changes/ticket-1/code/_custom/emp-data.sql
    SQL> commit;
     
    Commit complete.
  10. 新しいカスタム・ファイルを追加してコミットします。
    SQL> !git add --all
    SQL> !git commit -m "TICKET-1: data files"
     
    [ticket-1 ac2488d] TICKET-1: data files
     3 files changed, 33 insertions(+)
     create mode 100644 dist/releases/next/changes/ticket-1/code/_custom/dept-data.sql
     create mode 100644 dist/releases/next/changes/ticket-1/code/_custom/emp-data.sql
  11. 自動的に管理されている操作の順序を明らかにするために、次のコマンドを入力します:
    SQL> !cat dist/releases/next/changes/ticket-1/stage.changelog.xml
     
    <?xml version="1.0" encoding="UTF-8"?>
    <databaseChangeLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                       xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                       xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                          http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
    <!--BEGIN-->
    <include file="demo/table/dept.sql" relativeToChangelogFile="true"/>
    <include file="demo/table/emp.sql" relativeToChangelogFile="true"/>
    <include file="demo/ref_constraint/fk_deptno.sql" relativeToChangelogFile="true"/>
    <include file="demo/index/idx_emp_deptno.sql" relativeToChangelogFile="true"/>
    <!--END-->
    <!--BEGIN CUSTOM-->
    <include file="code/_custom/dept-data.sql" relativeToChangelogFile="true"/>
    <include file="code/_custom/emp-data.sql" relativeToChangelogFile="true"/>
    <!--END CUSTOM-->

    これで、Ticket-1が完了しました。

  12. 変更をmainブランチにマージします。

    これは、マージ・リクエストまたはプル・リクエスト(Gitプロバイダによって異なります)を介して実行されます。これはローカル・リポジトリであるため、mainにしか直接マージできません。

    SQL> !git checkout main
     
    Switched to branch 'main'
     
    SQL> !git merge "ticket-1"
     
    Updating f9660ae..ac2488d
    Fast-forward
     dist/releases/main.changelog.xml                                      |   9 +++++++
     dist/releases/next/changes/ticket-1/code/_custom/dept-data.sql        |  11 ++++++++
     dist/releases/next/changes/ticket-1/code/_custom/emp-data.sql         |  20 +++++++++++++++
     dist/releases/next/changes/ticket-1/demo/index/idx_emp_deptno.sql     |   8 ++++++
     dist/releases/next/changes/ticket-1/demo/ref_constraint/fk_deptno.sql |   9 +++++++
     dist/releases/next/changes/ticket-1/demo/table/dept.sql               |  13 ++++++++++
     dist/releases/next/changes/ticket-1/demo/table/emp.sql                |  18 +++++++++++++
     dist/releases/next/changes/ticket-1/stage.changelog.xml               |  16 ++++++++++++
     dist/releases/next/code/code.changelog.xml                            |   8 ++++++
     dist/releases/next/release.changelog.xml                              |  11 ++++++++
     dist/utils/prechecks.sql                                              |  81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     dist/utils/recompile.sql                                              | 225 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     src/database/demo/indexes/idx_emp_deptno.sql                          |   7 ++++++
     src/database/demo/ref_constraints/fk_deptno.sql                       |   8 ++++++
     src/database/demo/tables/dept.sql                                     |  12 +++++++++
     src/database/demo/tables/emp.sql                                      |  17 +++++++++++++
     16 files changed, 473 insertions(+)
     create mode 100644 dist/releases/main.changelog.xml
     create mode 100644 dist/releases/next/changes/ticket-1/code/_custom/dept-data.sql
     create mode 100644 dist/releases/next/changes/ticket-1/code/_custom/emp-data.sql
     create mode 100644 dist/releases/next/changes/ticket-1/demo/index/idx_emp_deptno.sql
     create mode 100644 dist/releases/next/changes/ticket-1/demo/ref_constraint/fk_deptno.sql
     create mode 100644 dist/releases/next/changes/ticket-1/demo/table/dept.sql
     create mode 100644 dist/releases/next/changes/ticket-1/demo/table/emp.sql
     create mode 100644 dist/releases/next/changes/ticket-1/stage.changelog.xml
     create mode 100644 dist/releases/next/code/code.changelog.xml
     create mode 100644 dist/releases/next/release.changelog.xml
     create mode 100644 dist/utils/prechecks.sql
     create mode 100644 dist/utils/recompile.sql
     create mode 100644 src/database/demo/indexes/idx_emp_deptno.sql
     create mode 100644 src/database/demo/ref_constraints/fk_deptno.sql
     create mode 100644 src/database/demo/tables/dept.sql
     create mode 100644 src/database/demo/tables/emp.sql

4.3.5 チケット-2

最初のチケットが完了したので、TICKET-2から作業を開始できます。このチケットの目的は、ソフト・オブジェクト(つまり、パッケージ、ビューなどの再実行可能なオブジェクト)の作成とともに自動DDL管理を明らかにすることです。

TICKET-2には次の要件があります:

  1. 新しい列emp.emailを追加します。
  2. 新しいファンクションget_display_nameを追加します。

ステップは次のとおりです:

  1. ticket-2というGitブランチを作成してチェックアウトします。
  2. emp表を変更し、データベースに新しい列を追加します。
  3. emp表をエクスポートします。これにより、src/.../tables/emp.sqlファイルの新しい表構造が表示されます。
  4. project stageコマンドを実行して、alter table文を登録します。
  5. データベースに新しいファンクションget_display_nameを作成し、project exportを実行します。
  6. project stageコマンドを再実行して、get_display_nameファンクションを組み込みます。
  7. 変更をコミットしてマージし、チケットを完了します。

ステップ

  1. ticket-2ブランチを作成します。
    SQL> !git checkout -b ticket-2
    Switched to a new branch 'ticket-2'
  2. 開発データベースに表の変更を加えます。
    SQL> alter table emp add email varchar2(255);
    Table EMP altered.
  3. project exportコマンドを実行して、表の最新バージョンを取得します。

    ノート:

    demo.emp表のみをエクスポートするには、-o引数を使用します。
    SQL> project export -o emp
    
    The current connection //myserver.com:1521/mypdb DEMO will be used for all operations
    *** INDEXES ***
    *** TABLES ***
    *** REF_CONSTRAINTS ***
    -------------------------------
    TABLE                         1
    REF_CONSTRAINT                1
    INDEX                         1
    -------------------------------
    Exported 3 objects
    Elapsed 13 sec
  4. git diffコマンドを実行して、src/database/demo/tables/emp.sqlファイルで変更された内容を表示します。

    ノート:

    列名が変更されたため、ファイル全体が変更済としてマークされ、スペースが追加されます。

    実際の相違を示すために、論理的な変更のみを次に示します。diffにより、新しい列(email)が追加されたことが明らかになります。

    !git --no-pager diff src/database/demo/tables/emp.sql
    
    -    deptno   number(2, 0)
    +    deptno   number(2, 0),
    +    email    varchar2(255 byte)
  5. 変更を追加してコミットします。これは、project stageコマンドを実行する前に必要です。

    これはバックグラウンドで実行され、branches/ticket-1/src内の変更がbranches/main/srcと比較されます。

    SQL> !git add --all
    SQL> !git commit -m "TICKET-2: Added emp.email"
    
    [ticket-2 a3e7508] TICKET-2: Added emp.email
     1 file changed, 3 insertions(+), 2 deletions(-)
  6. project stageを実行して、email列の追加に必要なalter table文を自動的に生成します。
    SQL> project stage
    Stage successfully created, please review andcommityour changes to repository

    次のファイルが追加されました:

    ├── dist
    │   ├── releases
    │   │   └── next
    │   │       ├── changes
    │   │       │   └── ticket-2
    │   │       │       ├── code
    │   │       │       │   └── _custom
    │   │       │       ├── demo
    │   │       │       │   └── table
    │   │       │       │       └── emp.sql
    │   │       │       └── stage.changelog.xml
  7. dist/releases/next/changes/ticket-2/demo/table/emp.sqlの出力を次に示します。

    emp表の変更が自動的に検出され、正しいalter文が生成されました。

    SQL> !cat dist/releases/next/changes/ticket-2/demo/table/emp.sql
    
    -- liquibase formatted sql
    -- changeset DEMO:cffad61078f4afbd0680bfacbe818e5f089ce535 stripComments:false logicalFilePath:ticket-2/demo/table/emp.sql
    -- sqlcl_snapshot src/database/demo/tables/emp.sql:1d12b2ddb0fe34a061ad35dc1990fc3d84d5a676:9c26d3ba57756671939cf399cb7e96ae0d3ac84e:alter
    
    alter table demo.emp add (
        email varchar2(255)
    )
    /
  8. 変更を追加してコミットします。
    SQL> !git add --all
    SQL> !git commit -m "TICKET-2: emp.email alter commands"
    
    [ticket-2 582cd63] TICKET-2: emp.email alter commands
     3 files changed, 20 insertions(+)
     create mode 100644 dist/releases/next/changes/ticket-2/demo/table/emp.sql
     create mode 100644 dist/releases/next/changes/ticket-2/stage.changelog.xml
  9. get_display_nameという新しいファンクションを作成します。これにより、SQLclプロジェクトを使用してソース・コードを自動的に管理する方法が明らかになります。
    SQL> create or replace function get_display_name(p_ename in emp.ename%type)
    return varchar2
    as
    begin
        return initcap(p_ename);
    end get_display_name;
    /
     
    Function GET_DISPLAY_NAME compiled
  10. 表の変更と同様に、project exportコマンドを実行すると、サポートされているオブジェクトの変更が検出されます。
    SQL> project export
     
    *** FUNCTIONS ***
    *** INDEXES ***
    *** TABLES ***
    *** REF_CONSTRAINTS ***
    -------------------------------
    TABLE                         2
    REF_CONSTRAINT                1
    INDEX                         1
    FUNCTION                      1
    -------------------------------
    Exported 5 objects
    Elapsed 14 sec
  11. 追加してコミットした後に、project stageでリリースに追加します。
    SQL> !git add --all
    SQL> !git commit -m "TICKET-2: added get_display_name"
     
    [ticket-2 7cf60a4] TICKET-2: added get_display_name
     1 file changed, 10 insertions(+)
     create mode 100644 src/database/demo/functions/get_display_name.sql
    
    SQL> project stage
    Stage successfully created, please review and commit your changes to repository
     

    ファンクションは、ticket-2ではなく、共通のcodeフォルダ下のdist/nextフォルダに追加されました。

    これは、再実行可能なコード(パッケージ、ファンクションなど)が1つのスプリント内で複数回変更される可能性があるためです。ほとんどの場合、コンパイルする必要があるのは1回のみです。

    SQL> !git status
    On branch ticket-2
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   dist/releases/next/code/code.changelog.xml
            modified:   dist/releases/next/release.changelog.xml
     
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            dist/releases/next/code/demo/
  12. distの変更を追加してコミットします。
    SQL> !git add --all
    SQL> !git commit -m "TICKET-2: dist changes for get_display_name"
     
    [ticket-2 706fdb9] TICKET-2: dist changes for get_display_name
     3 files changed, 13 insertions(+)
     create mode 100644 dist/releases/next/code/demo/function/get_display_name.sql
  13. ticket-2に対する作業がすべて完了したので、mainにマージします。
    SQL> !git checkout main
     Switched to branch 'main'
     
    SQL> !git merge "ticket-2"
     
    Updating d6abe9d..706fdb9
    Fast-forward
     dist/releases/next/changes/ticket-2/demo/table/emp.sql     |  8 ++++++++
     dist/releases/next/changes/ticket-2/stage.changelog.xml    | 11 +++++++++++
     dist/releases/next/code/code.changelog.xml                 |  1 +
     dist/releases/next/code/demo/function/get_display_name.sql | 11 +++++++++++
     dist/releases/next/release.changelog.xml                   |  2 ++
     src/database/demo/functions/get_display_name.sql           | 10 ++++++++++
     src/database/demo/tables/emp.sql                           |  5 +++--
     7 files changed, 46 insertions(+), 2 deletions(-)
     create mode 100644 dist/releases/next/changes/ticket-2/demo/table/emp.sql
     create mode 100644 dist/releases/next/changes/ticket-2/stage.changelog.xml
     create mode 100644 dist/releases/next/code/demo/function/get_display_name.sql
     create mode 100644 src/database/demo/functions/get_display_name.sql

4.3.6 最終ステップ

スプリントの完了後に、次の操作を実行する必要があります:

  • リリースの生成(project release)
    • releaseコマンドでは、dist/nextフォルダの名前がリリース名(次の例では1.0.0)に変更され、次のスプリントの変更に備えて新しい(空の)dist/nextフォルダが生成されます。
  • アーティファクトの生成(project gen-artifact)
    • gen-artifactでは、単一のinstall.sqlファイルを含むzipファイルが作成されます。このファイルは、distフォルダ内の様々なサブフォルダをすべて指します。この例では、1つのフォルダ(1.0.0)のみが含まれています。時間の経過とともに、アーティファクトには追加のリリースが含まれるようになります。これは、Liquibaseが任意の時点からアップグレードできるようにするためです。
  • アーティファクトのデプロイ(project deploy)。
    • deployコマンドでは、アーティファクトを受け取り、環境を最新バージョンにアップグレードします。たとえば、アーティファクトにバージョン1から10が含まれており、現在の環境がバージョン8の場合、インストーラは現在の状態を自動検出し、バージョン9およびバージョン10に関連する変更のみを実行します。

4.3.6.1 リリース1.0.0の生成

リリースを生成すると:
  • dist/nextの内容がリリース名に移動します。たとえば、リリース1.0.0を生成する場合、dist/nextはdist/1.0.0となります。
  • 次のリリースの次の作業セット用にオープン状態の新しいdist/nextフォルダが作成されます。
  1. リリース1.0.0を生成します
    SQL> project release -version 1.0.0
    Process completed successfully

    これで、distフォルダは次のようになります。dist/nextフォルダが空になっており、新たに"別の" release.changelog.xmlがあることに注意してください。

    ├── dist
    │   ├── README.md
    │   ├── install.sql
    │   ├── releases
    │   │   ├── 1.0.0
    │   │   │   ├── changes
    │   │   │   │   ├── main
    │   │   │   │   │   ├── code
    │   │   │   │   │   │   └── _custom
    │   │   │   │   │   └── stage.changelog.xml
    │   │   │   │   ├── ticket-1
    │   │   │   │   │   ├── code
    │   │   │   │   │   │   └── _custom
    │   │   │   │   │   │       ├── dept-data.sql
    │   │   │   │   │   │       └── emp-data.sql
    │   │   │   │   │   ├── demo
    │   │   │   │   │   │   ├── index
    │   │   │   │   │   │   │   └── idx_emp_deptno.sql
    │   │   │   │   │   │   ├── ref_constraint
    │   │   │   │   │   │   │   └── fk_deptno.sql
    │   │   │   │   │   │   └── table
    │   │   │   │   │   │       ├── dept.sql
    │   │   │   │   │   │       └── emp.sql
    │   │   │   │   │   └── stage.changelog.xml
    │   │   │   │   └── ticket-2
    │   │   │   │       ├── code
    │   │   │   │       │   └── _custom
    │   │   │   │       ├── demo
    │   │   │   │       │   └── table
    │   │   │   │       │       └── emp.sql
    │   │   │   │       └── stage.changelog.xml
    │   │   │   ├── code
    │   │   │   │   ├── code.changelog.xml
    │   │   │   │   └── demo
    │   │   │   │       └── function
    │   │   │   │           └── get_display_name.sql
    │   │   │   └── release.changelog.xml
    │   │   ├── main.changelog.xml
    │   │   └── next
    │   │       └── release.changelog.xml
  2. 変更したファイルを追加してコミットします。
    SQL> !git add --all
    SQL> !git add .
    SQL> !git commit -m "release 1.0.0"
     
    [main 5e1ac12] release 1.0.0
     16 files changed, 25 insertions(+), 4 deletions(-)
     create mode 100644 dist/releases/1.0/changes/main/stage.changelog.xml
     rename dist/releases/{next => 1.0}/changes/ticket-1/code/_custom/dept-data.sql (100%)
     rename dist/releases/{next => 1.0}/changes/ticket-1/code/_custom/emp-data.sql (100%)
     rename dist/releases/{next => 1.0}/changes/ticket-1/demo/index/idx_emp_deptno.sql (100%)
     rename dist/releases/{next => 1.0}/changes/ticket-1/demo/ref_constraint/fk_deptno.sql (100%)
     rename dist/releases/{next => 1.0}/changes/ticket-1/demo/table/dept.sql (100%)
     rename dist/releases/{next => 1.0}/changes/ticket-1/demo/table/emp.sql (100%)
     rename dist/releases/{next => 1.0}/changes/ticket-1/stage.changelog.xml (100%)
     rename dist/releases/{next => 1.0}/changes/ticket-2/demo/table/emp.sql (100%)
     rename dist/releases/{next => 1.0}/changes/ticket-2/stage.changelog.xml (100%)
     rename dist/releases/{next => 1.0}/code/code.changelog.xml (100%)
     rename dist/releases/{next => 1.0}/code/demo/function/get_display_name.sql (100%)
     create mode 100644 dist/releases/1.0/release.changelog.xml
  3. (オプション)リリースにGitタグを付けます。
    !git tag release-1.0.0

    この時点で、dist/release/nextフォルダが、新しいリリースの次の作業セット用に準備されています。

4.3.6.2 アーティファクトの生成

アーティファクトには、デプロイメントがインスタンスの現在のバージョンと、最新に更新するために実行する必要があるリリースを自動的に検出できるようにするすべてのリリースが含まれています。SQLclは、zipファイルとしてアーティファクトを生成します。デフォルトでは、このファイルは時間の経過とともに大きくなる可能性があるバイナリ・ファイルであるため、Gitリポジトリには含まれません。

ノート:

アーティファクトは、JFrogのArtifactoryなどのアーティファクト・リポジトリに格納する必要があります。

アーティファクトを次のように生成します:

SQL> project gen-artifact -version 1.0.0
Your artifact has been generated demo_project-1.0.0.zip

これで、アーティファクト・ディレクトリには次のアーティファクトが含まれています:

├── artifact
 │   └── demo_project-1.0.0.zip

デフォルトでは、アーティファクト・ディレクトリは.gitignoreファイルに含まれており、リポジトリには追加されません。これらをアーティファクト・リポジトリ(JFrogなど)に移動することをお薦めします。

4.3.6.3 PRODへのデプロイ

前のステップで生成されたアーティファクトを使用し、別のデータベースでdeployコマンドを実行します。次のステップでは、demo-prod接続にアーティファクトをデプロイします。
  1. 本番サーバーに接続します。
    SQL> connect -name demo-prod
  2. Prodサーバーにデプロイします。
    SQL> project deploy -file artifact/demo_project-1.0.0.zip
     
    Starting the migration...
    Running Changeset: ticket-1/demo/table/dept.sql::1e18b33eb500d4ccf3880f65c0d06846c793c509::DEMO
    Running Changeset: ticket-1/demo/table/emp.sql::1d12b2ddb0fe34a061ad35dc1990fc3d84d5a676::DEMO
    Running Changeset: ticket-1/demo/ref_constraint/fk_deptno.sql::55dee6178861d12324b4e858b5465b7f4c1a4fcd::DEMO
    Running Changeset: ticket-1/demo/index/idx_emp_deptno.sql::ab1f05f1b3b979156e8b2c8e1608231ae86a14c5::DEMO
    Running Changeset: ticket-1/code/_custom/dept-data.sql::f56fcfec11f7d7cb99d74403a0c2727a765ddb99::SqlCl
    Running Changeset: ticket-1/code/_custom/emp-data.sql::113b7d3b31e5ae089898777aaa7f556ff6f8dbf7::SqlCl
    Running Changeset: ticket-2/demo/table/emp.sql::cffad61078f4afbd0680bfacbe818e5f089ce535::DEMO
    Running Changeset: ../demo/function/get_display_name.sql::4c4e98c47aeddbc5ca84a31d8ab7e1c066296976::DEMO
    Liquibase: Update has been successful. Rows affected: 26
    Installing/updating schemas
    --Starting Liquibase at 2024-11-05T17:00:18.968636 (version [local build] #0 built at 2024-08-14 18:40+0000)
     
    UPDATE SUMMARY
    Run:                          8
    Previously run:               0
    Filtered out:                 0
    -------------------------------
    Total change sets:            8
     
     
    Produced logfile: sqlcl-lb-1730851216381.log
     
    Operation completed successfully.
     
     Migration has been completed