4.4 例
この項では、接続とソース・スキーマに関するいくつかの仮定に基づいた、接続が作成されていることを前提とした例を示します。
4.4.1 単一スキーマ
この例は、単一の開発スキーマと単一の本番スキーマからなります。作成後、本番スキーマには、開発スキーマからのオブジェクトとLiquibase変更ログ・オブジェクトが含まれています。
概要
- SQLclデータベース・プロジェクトを作成します。
- データベース・プロジェクト内のgitリポジトリを初期化し、初期ファイルをメイン・ブランチにコミットします。
base-release
という新しいブランチを作成し、project export
を実行して接続hr-dev
からオブジェクトをエクスポートし、それらのファイルをそのブランチにコミットします。project stage
を実行してブランチbase-release
をmain
ブランチと比較し、ベース・リリースのインストールのための変更ログを生成します。project release
を実行してその開発コードを1.0というバージョニングされたリリースに移行します。project gen-artifact
を実行して<projectname>-<version>.zip
というリリースのデプロイ可能zipファイルを作成します。- 本番スキーマに接続し、
project deploy
コマンドを使用してその成果物をデプロイします。
接続定義
hr-dev
: 開発スキーマとして使用する接続です。
hr-prod
: 本番スキーマとして使用する接続です。
開発の接続およびオブジェクト
開発スキーマで、HR sample schema
のオブジェクトをインストールします。これらのオブジェクトは、Githubで入手できます。oracle-samples/db-samples-schemas
リポジトリをクローンします。
この例では、hr
ユーザーは、パスワードoracle
を使用して設定されています。
$> git clone git@github.com:oracle-samples/db-sample-schemas.git
$> cd db-sample-schemas/human_resources
$> sql <SYSTEM_USER>/<SYSTEMPASSWORD>@<DATABASE_URL>
SQL> @hr_install
Thank you for installing the Oracle Human Resources Sample Schema.
This installation script will automatically exit your database session
at the end of the installation or if any error is encountered.
The entire installation will be logged into the 'hr_install.log' log file.
Enter a password for the user HR: ******
Enter a tablespace for HR [USERS]:
Do you want to overwrite the schema, if it already exists? [YES|no]: YES
Old HR schema has been dropped.
****** Creating REGIONS table ....
****** Creating COUNTRIES table ....
****** Creating LOCATIONS table ....
****** Creating DEPARTMENTS table .....
****** Creating JOBS table ....
****** Creating EMPLOYEES table ....
****** Creating JOB_HISTORY table ....
****** Creating EMP_DETAILS_VIEW view ...
****** Creating indexes ...
****** Adding table column comments ...
****** Populating REGIONS table ....
****** Populating COUNTRIES table ....
****** Populating LOCATIONS table ....
****** Populating DEPARTMENTS table ....
****** Populating JOBS table ....
****** Populating EMPLOYEES table ....
****** Populating JOB_HISTORY table ....
Installationverification
___________________________
Verification:
Table provided actual
______________ ___________ _________
regions 5 5
countries 25 25
departments 27 27
locations 23 23
employees 107 107
jobs 19 19
job_history 10 10
VSCode用またはOracle SQLcl用のOracle SQL Developer拡張機能で接続を作成します。
SQL> connect -save hr-dev -savepwd hr/oracle@localhost/freepdb1
Name: hr-dev
Connect String: localhost/freepdb1
User: hr
Password: ******
Connected.
SQL> connect -name hr-dev
Connected.
login.sqlファイルを使用して、ログイン・エクスペリエンスをカスタマイズします。ユーザー、データベース、プロジェクト、gitステータスおよび現在の作業ディレクトリを設定します。
–-login.sql
set sqlformat ansiconsole
set sqlprompt "@|red _USER|@@@|green _O_RELEASE|@@|blue 🚥 >|@"
set statusbar default editmode linecol git project cwd
set statusbar on
ステップ
-
SQLclデータベース・プロジェクトを作成します。
プロジェクトを作成するディレクトリを選択し、
project init
コマンドを実行します。SQL> project init -name demo -schemas hr -makeroot ------------------------ PROJECT DETAILS ------------------------ Project name: demo Schema(s): HR Directory: /Users/abc/sandbox/projects/demo Connection name: hr-dev Config Only: false Project root demo Your project has been successfully created.
このコマンドではプロジェクトが作成され、
makeroot
オプションによりプロジェクト・フォルダが作成されます。 -
Gitリポジトリを初期化します。
プロジェクト・ディレクトリで、Gitリポジトリを初期化し、初期ファイルをメイン・ブランチにコミットします。メイン・ブランチは
main
と呼ばれます。コミット時には、リリースに関して機能、バグおよびその他修正などのタイプを識別するために役立つように、コミット・メッセージにConventional Commits標準を使用することが重要です。このコード・ブロックでは、ホスト・コマンド(Gitコマンドの前の!
文字によって示されている)を使用して、SQLclで実行されているGitを示しています。この文字により、ユーザーが、ホスト・シェルで使用可能な任意のコマンドを実行できるようになります。SQL>cd demo SQL>pwd /Users/abc/sandbox/projects/demo SQL> !git init --initial-branch=main Initialized empty Git repository in /Users/abc/sandbox/projects/demo/.git/ SQL> !git add . SQL> !git commit -m "chore: initializing repository with default project files" [main (root-commit) 6cc2434] chore: initializing repository with default project files 8 files changed, 145 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 dist/README.md create mode 100644 dist/install.sql create mode 100644 src/README.md create mode 100644 src/database/README.md
demo
フォルダには、次のような、いくつかのフォルダとファイルがあります:.dbtools
: プロジェクトの構成ファイルが含まれています。src
: スキーマからエクスポートされたソース・ファイルが含まれます。dist
: 生成されたインストール・ファイルおよびリリースが含まれます。artifact
: リリース用に生成されたzipファイルが含まれます。
-
base-release
ブランチを作成し、エクスポートされたファイルをコミットします。Gitに
base-release
というブランチを作成し、それをチェックアウトします。project export
を実行してhr-dev接続からオブジェクトをエクスポートします。SQL> !git checkout -b base-release Switched to a new branch 'base-release' SQL> project export The current connection localhost/freepdb1 HR will be used for all operations. *** INDEXES *** *** PROCEDURES *** *** SEQUENCES *** *** TABLES *** *** TRIGGERS *** *** VIEWS *** *** COMMENTS *** *** REF_CONSTRAINTS *** -------------------------------- TABLE 6 PROCEDURE 2 REF_CONSTRAINT 10 CREATE_USER 1 TRIGGER 2 SEQUENCE 3 INDEX 11 VIEW 1 COMMENT 7 -------------------------------- Exported 43 objects. Elapsed 13 sec. SQL>!git status On branch base-release Untracked files: (use "git add <file>..." to include in what will be committed) src/database/hr/ SQL>!git add src SQL>!git status On branch base-release Changes to be committed: (use "git restore --staged <file>..." to unstage) new file: src/database/hr/comments/countries.sql ... new file: src/database/hr/comments/regions.sql new file: src/database/hr/create_users/create_user.sql new file: src/database/hr/indexes/dept_location_ix.sql ... new file: src/database/hr/indexes/loc_state_province_ix.sql new file: src/database/hr/procedures/add_job_history.sql new file: src/database/hr/procedures/secure_dml.sql new file: src/database/hr/ref_constraints/countr_reg_fk.sql ... new file: src/database/hr/ref_constraints/loc_c_id_fk.sql new file: src/database/hr/sequences/departments_seq.sql new file: src/database/hr/sequences/employees_seq.sql new file: src/database/hr/sequences/locations_seq.sql new file: src/database/hr/tables/countries.sql ... new file: src/database/hr/tables/regions.sql new file: src/database/hr/triggers/secure_employees.sql new file: src/database/hr/triggers/update_job_history.sql new file: src/database/hr/views/emp_details_view.sql !git commit -m "chore: base export of hr schema" [base-release b481c41] chore: base export of hr schema 44 files changed, 609 insertions(+) create mode 100644 src/database/hr/comments/countries.sql ... create mode 100644 src/database/hr/comments/regions.sql create mode 100644 src/database/hr/create_users/create_user.sql create mode 100644 src/database/hr/indexes/dept_location_ix.sql ... create mode 100644 src/database/hr/indexes/loc_state_province_ix.sql create mode 100644 src/database/hr/procedures/add_job_history.sql create mode 100644 src/database/hr/procedures/secure_dml.sql create mode 100644 src/database/hr/ref_constraints/countr_reg_fk.sql ... create mode 100644 src/database/hr/ref_constraints/loc_c_id_fk.sql create mode 100644 src/database/hr/sequences/departments_seq.sql ... create mode 100644 src/database/hr/sequences/locations_seq.sql create mode 100644 src/database/hr/tables/countries.sql ... create mode 100644 src/database/hr/tables/regions.sql create mode 100644 src/database/hr/triggers/secure_employees.sql create mode 100644 src/database/hr/triggers/update_job_history.sql create mode 100644 src/database/hr/views/emp_details_view.sql
-
project stage
を使用してベース・リリースのインストールのための変更ログを作成します。project stage
コマンドを実行してbase-release
ブランチをメイン・ブランチと比較し、ベース・リリースのインストールのための変更ログを生成します。SQL> project stage Stage successfully created, please review and commit your changes to repository. SQL> !git status On branch base-release Untracked files: (use "git add <file>..." to include in what will be committed) dist/releases/ SQL> !find dist/releases/next dist/releases/next dist/releases/next/changes dist/releases/next/changes/base-release dist/releases/next/changes/base-release/code dist/releases/next/changes/base-release/code/_custom dist/releases/next/changes/base-release/stage.changelog.xml dist/releases/next/changes/base-release/hr dist/releases/next/changes/base-release/hr/ref_constraint dist/releases/next/changes/base-release/hr/ref_constraint/dept_loc_fk.sql dist/releases/next/changes/base-release/hr/ref_constraint/emp_job_fk.sql dist/releases/next/changes/base-release/hr/ref_constraint/jhist_job_fk.sql dist/releases/next/changes/base-release/hr/ref_constraint/jhist_dept_fk.sql dist/releases/next/changes/base-release/hr/ref_constraint/loc_c_id_fk.sql dist/releases/next/changes/base-release/hr/ref_constraint/countr_reg_fk.sql dist/releases/next/changes/base-release/hr/ref_constraint/emp_dept_fk.sql dist/releases/next/changes/base-release/hr/ref_constraint/jhist_emp_fk.sql dist/releases/next/changes/base-release/hr/ref_constraint/dept_mgr_fk.sql dist/releases/next/changes/base-release/hr/ref_constraint/emp_manager_fk.sql dist/releases/next/changes/base-release/hr/table dist/releases/next/changes/base-release/hr/table/jobs.sql dist/releases/next/changes/base-release/hr/table/departments.sql dist/releases/next/changes/base-release/hr/table/regions.sql dist/releases/next/changes/base-release/hr/table/countries.sql dist/releases/next/changes/base-release/hr/table/employees.sql dist/releases/next/changes/base-release/hr/table/job_history.sql dist/releases/next/changes/base-release/hr/table/locations.sql dist/releases/next/changes/base-release/hr/index dist/releases/next/changes/base-release/hr/index/emp_name_ix.sql dist/releases/next/changes/base-release/hr/index/jhist_department_ix.sql dist/releases/next/changes/base-release/hr/index/emp_manager_ix.sql dist/releases/next/changes/base-release/hr/index/emp_department_ix.sql dist/releases/next/changes/base-release/hr/index/loc_country_ix.sql dist/releases/next/changes/base-release/hr/index/jhist_employee_ix.sql dist/releases/next/changes/base-release/hr/index/jhist_job_ix.sql dist/releases/next/changes/base-release/hr/index/loc_city_ix.sql dist/releases/next/changes/base-release/hr/index/dept_location_ix.sql dist/releases/next/changes/base-release/hr/index/emp_job_ix.sql dist/releases/next/changes/base-release/hr/index/loc_state_province_ix.sql dist/releases/next/changes/base-release/hr/sequence dist/releases/next/changes/base-release/hr/sequence/departments_seq.sql dist/releases/next/changes/base-release/hr/sequence/locations_seq.sql dist/releases/next/changes/base-release/hr/sequence/employees_seq.sql dist/releases/next/release.changelog.xml dist/releases/next/code dist/releases/next/code/code.changelog.xml dist/releases/next/code/hr dist/releases/next/code/hr/trigger dist/releases/next/code/hr/trigger/update_job_history.sql dist/releases/next/code/hr/trigger/secure_employees.sql dist/releases/next/code/hr/comment dist/releases/next/code/hr/comment/jobs.sql dist/releases/next/code/hr/comment/departments.sql dist/releases/next/code/hr/comment/regions.sql dist/releases/next/code/hr/comment/countries.sql dist/releases/next/code/hr/comment/employees.sql dist/releases/next/code/hr/comment/job_history.sql dist/releases/next/code/hr/comment/locations.sql dist/releases/next/code/hr/procedure dist/releases/next/code/hr/procedure/secure_dml.sql dist/releases/next/code/hr/procedure/add_job_history.sql dist/releases/next/code/hr/view dist/releases/next/code/hr/view/emp_details_view.sql
-
project release
を実行してそのリリースを完成させます。project release
コマンドを実行してその開発コードを1.0というバージョニングされたリリースに移行します。SQL> project release -version 1.0 -verbose Creating a release version 1.0 for the current body of work Updated change:dist/releases/main.changelog.xml Moved folder "dist/releases/next" to "dist/releases/1.0" Created file: dist/releases/next Created change:dist/releases/next/release.changelog.xml Created change:dist/releases/next/release.changelog.xml Process completed successfully
これにより、
next
フォルダ内のすべての変更内容が、releasesの下の1.0
フォルダに移動されます。–-Cropped Tree Structure SQL> !tree . ├── demo │ ├── README.md │ ├── dist │ │ ├── install.sql │ │ └── releases │ │ ├── 1.0 │ │ │ ├── code │ │ │ ├── release.changelog.xml │ │ │ └── changes │ │ │ └── base-release │ │ │ ├── code │ │ │ ... │ │ │ ├── hr │ │ │ ... │ │ │ └── stage.changelog.xml │ │ ├── main.changelog.xml │ │ ├── next │ │ │ └── release.changelog.xml │ │ └── util │ │ ├── prechecks.sql │ │ └── recompile.sql │ └── src │ ├── README.md │ └── database │ ├── README.md │ └── hr │ ...
-
project deploy
を実行してその成果物をデータベースにインストールします。本番スキーマに接続し、
project deploy
コマンドを使用してその成果物をデプロイします。connect -name production-connection SQL> project deploy -file artifact/demo-1.0.zip -verbose Check database connection... Extract the file name: demo-1.0 Artifact decompression in progress... Artifact decompressed: /var/folders/35/v7k4b96d1d9b61mm93bgjjnr0000gn/T/e6b3d0f0-92d5-4fde-b82c-37ea9ec419c58326209255710673404 Starting the installation...
- インストールされたスキーマを調べて、インストールされたオブジェクトを確認します。
SQL> connect hr/<password> Connected. SQL> tables TABLES ___________________________ COUNTRIES DATABASECHANGELOG_ACTIONS DATABASECHANGELOG DATABASECHANGELOGLOCK DEPARTMENTS DOC EMPLOYEES JOB_HISTORY JOBS LOCATIONS REGIONS
移行された表が、Liquibaseの管理表とともにリストされます。
4.4.2 管理者がHRを本番スキーマにエクスポート
この例では、デプロイ(ステップ7)が管理者として実行される点を除き、ステップは「単一スキーマ」と同じです。作成されるすべてのオブジェクトには、先頭にスキーマ名を付ける必要があります。これは、次の構成項目を設定することで、エクスポート時に追加できます:
project config set -name export.setTransform.emitSchema -value true -type BOOLEAN
project deploy
コマンドを実行します。
SQL> connect adminuser/oracle@database
SQL> drop user hr cascade;
SQL> grant connect,resource, dba to hr identified by oracle;
SQL> project deploy -file artifact/demo-1.0.zip -verbose
Check database connection...
Extract the file name: demo-1.0
Artifact decompression in progress...
Artifact decompressed: /var/folders/35/v7k4b96d1d9b61mm93bgjjnr0000gn/T/e6b3d0f0-92d5-4fde-b82c-37ea9ec419c58326209255710673404
Starting the installation...
インストール後の、オブジェクトの主な違いは、Liquibase表が存在する場所です。
SQL> show user
USER is "ABC"
SQL> tables
TABLES
____________________________
DATABASECHANGELOG_ACTIONS
DATABASECHANGELOG
DATABASECHANGELOGLOCK
SQL> connect hr/oracle
Connected.
SQL> tables
TABLES
___________________________
COUNTRIES
DEPARTMENTS
DOC
EMPLOYEES
JOB_HISTORY
JOBS
LOCATIONS
REGIONS