3 Liquibaseの使用
この章では、SQLclのLiquibase機能について説明します。内容は次のとおりです。
3.1 SQLclでのLiquibaseについて
Liquibaseは、データベース・スキーマの変更を追跡、管理、および適用するための、データベースに依存しないオープンソースのライブラリです。
Liquibaseの主要な概念の理解については、主要な概念を参照してください。
ノート:
SQL Developerインストールの一部であるSQLclでは、Liquibaseは使用できません。この機能を使用するには、スタンドアロンのSQLclオファリングをダウンロードする必要があります。
SQLclのLiquibase機能により、コマンドを実行して、単一オブジェクトまたは完全なスキーマ(変更セットと変更ログ)の変更ログを生成できます。これらのオブジェクトは、SQLclを使用するか、従来のLiquibaseインタフェースを使用して手動で処理できます。
SQLclのLiquibase機能を使用すると、次のことができます。
- 単一オブジェクトの変更ログを生成して実行する
- オブジェクトの依存性を持つスキーマ変更セットを生成して実行する
- 作成中に、オブジェクトの依存性に基づいて変更セットを自動的にソートする
- 変更セットまたは変更ログの実行に関するすべてのSQL文を、生成時に記録する
- 変更セットおよび変更ログの完全なロールバック・サポートを自動的に提供する
SQLclおよびLiquibaseを使用した変更管理については、このLiveLabsワークショップを参照してください。
3.2 Liquibaseを使用するための要件
Liquibase機能を使用するための2つの重要な側面は、Oracleデータベースにおけるオブジェクトの取得とデプロイです。
オブジェクトの取得
オブジェクトまたはスキーマを取得するには、SQLcl 19.2以降がインストールされている必要があります。
このリリースでは、SQLclで接続しているスキーマからのみオブジェクトを取得できます。また、ファイルを保存するディレクトリに対する書込み権限も必要です。
スキーマ全体を取得する場合、接続先のユーザーに表を作成する権限が必要です。DATABASECHANGELOG_EXPORT表は、オブジェクトの詳細を収集して正しくソートするために内部的に作成されます。作成されたオブジェクトは、取得プロセスから自動的に除外され、取得の完了時に破棄されます。
オブジェクトのデプロイ
Liquibaseは、DATABASECHANGELOG表を使用して、実行された変更セットを追跡します。DATABASECHANGELOGLOCK表は、Liquibaseのインスタンスが確実に一度に1つのみ実行されているようにします。DATABASECHANGELOG_ACTIONS表は、オブジェクトの状態とデプロイメント中に実行されたSQL文を追跡します。
-
SQLcl
SQLclを介してデータベースに変更をデプロイするには、19.2リリース以降および表を作成する権限が必要です。デプロイする変更を介して任意のオブジェクト型を作成するには、必要な権限を持っている必要があります。
-
Liquibase
Liquibaseを直接使用して変更セットをデプロイする場合、次のものが必要です。
- Liquibase環境にインストールされている拡張機能。
dbtools-liquibase.jar
ファイルをliquibase/lib/ext
に追加します。 - 表およびパッケージを作成する権限。
- Liquibase環境にインストールされている拡張機能。
3.3 サポートされているタイプ
DDLタイプでは、作成構文または置換構文を使用します。変更を適用する前にオブジェクトのスナップショットが取得されるため、最後の既知の状態への自動ロールバックがサポートされます。
SXMLタイプは、自動ロールバック・サポートによる自動変更生成をサポートします。
DDLタイプには、独自の変更タイプがあります。
- CONSTRAINT
- DIMENSION
- DIRECTORY
- FUNCTION
- JOB
- OBJECT_GRANT
- PACKAGE_BODY
- PACKAGE_SPEC
- PROCEDURE
- PUBLIC_SYNONYM
- REF_CONSTRAINT
- SYNONYM
- TRIGGER
- TYPE BODY
- TYPE SPEC
SXMLタイプは、SXML変更タイプを共有します。
- AQ_QUEUE
- AQ_QUEUE_TABLE
- AQ_TRANSFORM
- ASSOCIATION
- AUDIT
- AUDIT_OBJ
- CLUSTER
- CONTEXT
- DB_LINK
- DEFAULT_ROLE
- FGA_POLICY
- JOB
- LIBRARY
- MATERIALIZED_VIEW
- MATERIALIZED_VIEW_LOG
- OPERATOR
- PROFILE
- PROXY
- REFRESH_GROUP
- RESOURCE_COST
- RLS_CONTEXT
- RLS_GROUP
- RMGR_CONSUMER_GROUP
- RMGR_INTITIAL_CONSUMER_GROUP
- RMGR_PLAN
- RMGR_PLAN_DIRECTIVE
- ROLE
- ROLLBACK_SEGMENT
- SEQUENCE
- TABLE
- TABLESPACE
- TRIGGER XS_ACL
- TRUSTED_DB_LINK
- USER
- VIEW
- XMLSCHEMA
- XS_ACL_PARAM INDEX
- XS_DATA_SECURITY
- XS_ROLE
- XS_ROLESET
- XS_ROLE_GRANT
- XS_SECURITY_CLASS
- XS_USER
3.4 SQLclでサポートされているLiquibaseコマンド
SQLclのLiquibaseコマンドは、liquibase
またはlb
を使用して起動できます。
使用可能なすべてのコマンドのリストを表示するには、引数なしでliquibase
またはlb
を実行します。
3.4.1 LB GENOBJECT
APEX
構文
lb genobject -type {APEX} -applicationid APPLICATIONID -workspaceid WORKSPACEID
[-instance] [-expWorkspace][-expMinimal] [-expFiles] [-skipExportDate] [-expPubReports] [-expSavedReports]
[-expIRNotif] [-expTranslations] [-expFeedback] [-expTeamdevdata] [-deploymentSystem DEPLOYMENTSYSTEM]
[-expFeedbackSince EXPFEEDBACKSINCE] [-expOriginalIds] [-expNoSubscriptions] [-expComments]
[-expSupportingObjects {Y,N,I}] [-expACLAssignments] [-dir DIR] [-list LIST]
[-changesSince CHANGESSINCE] [-changesBy CHANGESBY] [-nochecksum] [-split]
[-expComponents EXPCOMPONENTS] [-context CONTEXT] [-label LABEL]
[-emit_schema] [-fail] [-replace] [-runonchange] [-runalways] [-debug]
APEXオブジェクトの変更ログを生成します。
名前付きパラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
-type {APEX} |
APEXオブジェクトの出力を生成します。 | - |
-applicationid APPLICATIONID |
エクスポートするアプリケーションのIDを指定します。 | - |
-workspaceid WORKSPACEID |
エクスポートするすべてのアプリケーションまたはエクスポートするワークスペースのワークスペースIDを指定します。 | - |
-instance |
すべてのアプリケーションをエクスポートします。 | False |
-expWorkspace |
-workspaceidで指定されたワークスペースをエクスポートします。-workspaceidが指定されていない場合はすべてのワークスペースをエクスポートします。 | False |
-expMinimal |
ワークスペース定義、ユーザーおよびグループのみエクスポートします。 | False |
|
-workspaceidで指定されたすべてのワークスペース・ファイルをエクスポートします。 | False |
-skipExportDate |
アプリケーション・エクスポート・ファイルからエクスポート日付を除外します。 | False |
-expPubReports |
ユーザーが保存したすべてのパブリック対話型レポートをエクスポートします。 | False |
-expSavedReports |
ユーザーが保存したすべての対話型レポートをエクスポートします。 | False |
-expIRNotif |
すべての対話型レポート通知をエクスポートします。 | False |
-expTranslations |
変換リポジトリから、変換マッピングとすべてのテキストをエクスポートします。 | False |
-expFeedback |
すべてのワークスペースまたは-workspaceidで指定されたワークスペースのチーム開発フィードバックをエクスポートします。 | False |
-expTeamdevdata
|
すべてのワークスペースまたは-workspaceidで指定されたワークスペースのチーム開発データをエクスポートします。 | False |
-deploymentSystem DEPLOYMENTSYSTEM |
エクスポートするフィードバックのデプロイメント・システムを指定します。 | - |
-expFeedbackSince EXPFEEDBACKSINCE |
YYYYMMDD書式の日付以降のチーム開発フィードバックをエクスポートします。 | - |
-expOriginalIds |
アプリケーションのインポート時のIDが、エクスポートにそのまま表示されます。 | False |
-expNoSubscriptions |
サブスクライブしているコンポーネントへの参照をエクスポートしません。 | False |
-expComments
|
開発者コメントをエクスポートします。 | False |
-expSupportingObjects {Y,N,I} |
サポートしているオブジェクトをエクスポートします。はい(Y)、いいえ(N)またはインストール(I)を渡して、デフォルトをオーバーライドします(デフォルト: N) | N |
-expACLAssignments
|
ACLユーザー・ロール割当てをエクスポートします。 | False |
-dir DIR
|
指定されたディレクトリ内のすべてのファイルを保存します。たとえば、-dir some/sub/directoryです。 | - |
-list LIST |
アプリケーションのワークスペースまたはコンポーネントにある変更されたすべてのアプリケーションをリストします。 | - |
-changesSince CHANGESSINCE
|
日付パラメータを必要とします(yyyy-mm-dd)。-listの値を、指定の日付以降の変更に限定します。 | - |
-changesBy CHANGESBY |
文字列パラメータを必要とします。-listの値を、指定のユーザーによる変更に限定します。 | - |
-nochecksum |
内容が変更されていない場合でも、既存のファイルを上書きします。 | False |
-split |
アプリケーションを複数のファイルに分割します。 | False |
-expComponents EXPCOMPONENTS
|
アプリケーション・コンポーネントをエクスポートします。残りのすべてのパラメータは、TYPE: IDという形式にする必要があります。 | - |
共通ジェネレータ・パラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
-context CONTEXT |
実行する変更セット・コンテキストを指定します。 | - |
-label LABEL |
ラベルを使用して変更ログをフィルタします。 | - |
-emit_schema |
DDLの生成時にスキーマを含めます。 | False |
-fail |
変更セットにfailOnError値を設定します。 | False |
-replace |
変更セットにreplaceIfExists値を設定します。 | False |
-runonchange
|
変更セットにrunOnChange値を設定します。 | False |
-runalways
|
変更セットにrunAlways値を設定します。 | False |
-debug |
追加のデバッグ出力を生成して表示します。 | False |
例
SQL> lb genobject -type apex -applicationid 4900
Exporting Application 4900
Action successfully completed please review created file f4900.xml
ORDS RESTfulサービス・モジュール
構文
lb genobject -type {ORDS} -name NAME [-noenable] [-noprivs]
[-context CONTEXT] [-label LABEL] [-emit_schema] [-fail]
[-replace] [-runonchange] [-runalways] [-debug]
ORDS (Oracle REST Data Services) RESTfulサービス・モジュールの変更ログを生成します。
名前付きパラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
-type {ORDS} |
ORDSモジュールの出力を生成します。 | - |
-name NAME |
モジュール名 | - |
-noenable |
enable_schemaコールをエクスポートに含めるかどうかを指定します | True |
-noprivs |
権限をエクスポートに含めるかどうかを指定します。 | True |
共通ジェネレータ・パラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
-context CONTEXT |
実行する変更セット・コンテキストを指定します。 | - |
-label LABEL |
ラベルを使用して変更ログをフィルタします。 | - |
-emit_schema |
DDLの生成時にスキーマを含めます。 | False |
-fail |
変更セットにfailOnError値を設定します。 | False |
-replace |
変更セットにreplaceIfExists値を設定します。 | False |
-runonchange
|
変更セットにrunOnChange値を設定します。 | False |
-runalways
|
変更セットにrunAlways値を設定します。 | False |
-debug |
追加のデバッグ出力を生成して表示します。 | False |
データベース・オブジェクト
構文
lb genobject -type TYPE -name NAME
[-context CONTEXT] [-label LABEL] [-emit_schema]
[-fail] [-replace] [-runonchange] [-runalways] [-debug]
指定したデータベース・オブジェクトの変更ログを生成します。
名前付きパラメータ
パラメータ | 説明 |
---|---|
-type TYPE |
データベース内のオブジェクトのタイプ |
-name NAME |
オブジェクト名 |
共通ジェネレータ・パラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
-context CONTEXT |
実行する変更セット・コンテキストを指定します。 | - |
-label LABEL |
ラベルを使用して変更ログをフィルタします。 | - |
-emit_schema |
DDLの生成時にスキーマを含めます。 | False |
-fail |
変更セットにfailOnError値を設定します。 | False |
-replace |
変更セットにreplaceIfExists値を設定します。 | False |
-runonchange
|
変更セットにrunOnChange値を設定します。 | False |
-runalways
|
変更セットにrunAlways値を設定します。 | False |
-debug |
追加のデバッグ出力を生成して表示します。 | False |
サポートされるデータベース・オブジェクト・タイプ
タイプ | タイプ | タイプ |
---|---|---|
AQ_QUEUE | AQ_QUEUE_TABLE | AQ_TRANSFORM |
ASSOCIATION | AUDIT | AUDIT_OBJ |
CLUSTER | CONSTRAINT | CONTEXT |
DB_LINK | DEFAULT_ROLE | DIMENSION |
FGA_POLICY | FUNCTION | INDEX |
JOB | LIBRARY | MATERIALIZED_VIEW |
MATERIALIZED_VIEW_LOG | OBJECT_GRANT | OPERATOR |
PACKAGE_SPEC | PACKAGE_BODY | PROCEDURE |
PROFILE | PROXY | PUBLIC_SYNONYM |
REF_CONSTRAINT | REFRESH_GROUP | RESOURCE_COST |
RLS_CONTEXT | RLS_GROUP | RLS_POLICY |
RMGR_CONSUMER_GROUP | RMGR_PLAN | RMGR_PLAN_DIRECTIVE |
ROLE | ROLLBACK_SEGMENT | SEQUENCE |
SYNONYM | TABLE | TABLESPACE |
TRIGGER | TRUSTED_DB_LINK | TYPE |
TYPE_SPEC | TYPE_BODY | USER |
VIEW | XMLSCHEMA XS_USER | XS_ROLE |
XS_ROLESET | XS_ROLE_GRANT | XS_SECURITY_CLASS |
XS_DATA_SECURITY | XS_ACL | XS_ACL_PARAM |
XS_NAMESPACE | RMGR_INTITIAL_CONSUMER_GROUP |
例
SQL> lb genobject -type table -name zipcodes
Action successfully completed please review created file zipcodes_table.xml
3.4.2 LB GENSCHEMA
構文
liquibase(lb) genschema [-noreport] [-synonyms] [-grants]
[-context CONTEXT] [-label LABEL] [-emit_schema]
[-fail] [-replace] [-runonchange] [-runalways] [-debug]
ユーザーがSQLclで接続しているスキーマ全体を取得します。スキーマ内のオブジェクトのそれぞれについて、現在の作業ディレクトリにXMLファイルが作成され、controller.xmlファイルが作成されます。コントローラ・ファイルは、スキーマを正しくデプロイできるように、すべてのファイルを適切な順序で含んだ変更ログです。
名前付きパラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
-noreport |
画面出力を抑制します | True |
-synonyms |
パブリック・シノニムを含めます | False |
-grants |
権限を含めます | False |
共通ジェネレータ・パラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
-context CONTEXT |
実行する変更セット・コンテキストを指定します。 | - |
-label LABEL |
ラベルを使用して変更ログをフィルタします。 | - |
-emit_schema |
DDLの生成時にスキーマを含めます。 | False |
-fail |
変更セットにfailOnError値を設定します。 | False |
-replace |
変更セットにreplaceIfExists値を設定します。 | False |
-runonchange |
変更セットにrunOnChange値を設定します。 | False |
-runalways |
変更セットにrunAlways値を設定します。 | False |
-debug |
追加のデバッグ出力を生成して表示します。 | False |
例
SQL> lb genschema
lb genschema
[Type - TYPE_SPEC]: 153 ms
[Type - TYPE_BODY]: 29 ms
[Type - SEQUENCE]: 48 ms
[Type - CLUSTER]: 27 ms
[Type - TABLE]: 36 ms
[Type - MATERIALIZED_VIEW_LOG]: 19 ms
[Type - MATERIALIZED_VIEW]: 6 ms
[Type - VIEW]: 148 ms
[Type - REF_CONSTRAINT]: 272 ms
[Type - DIMENSION]: 23 ms
[Type - FUNCTION]: 27 ms
[Type - PROCEDURE]: 64 ms
[Type - PACKAGE_SPEC]: 171 ms
[Type - DB_LINK]: 14 ms
[Type - SYNONYM]: 22 ms
[Type - INDEX]: 202 ms
[Type - TRIGGER]: 51 ms
[Type - PACKAGE_BODY]: 252 ms
[Method loadCaptureTable]: 1864 ms
[Method parseCaptureTableRecords]: 7342 ms
[Method sortCaptureTable]: 30 ms
[Method createExportChangeLogs]: 3 ms
Export Flags Used:
Export Grants false
Export Synonyms false
3.4.3 LB GENCONTROLFILE
構文
liquibase(lb) gencontrolfile
現在の作業ディレクトリにファイルを含めるためのプレースホルダを指定して、空の変更ログmaster.xml
を作成します。このコマンドは、カスタム変更セットを含む変更ログを作成するときに使用できます。
例
SQL> lb gencontrolfile
Action successfully completed please review created file controller.xml
3.4.4 LB UPDATE
構文
liquibase(lb) update -changelog CHANGELOG [-context CONTEXT]
[-label LABEL] [-emit_schema] [-fail] [-replace] [-runonchange] [-runalways] [-debug]
自分や他の開発者が変更ログ・ファイルに追加したデータベースの変更を適用できます。
名前付きパラメータ
パラメータ | 説明 |
---|---|
-changelog CHANGELOG |
使用する変更ログ・ファイルを指定します。 |
共通更新パラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
-context CONTEXT |
実行する変更セット・コンテキストを指定します。 | - |
-label LABEL |
ラベルを使用して変更ログをフィルタします。 | - |
-emit_schema |
DDLの生成時にスキーマを含めます。 | False |
-log |
実行した作業のログを生成します | False |
-debug |
追加のデバッグ出力を生成して表示します。 | False |
例
SQL> lb update -changelog zipcodes_table.xml
ScriptRunner Executed:zipcodes_table.xml::3b128595dbfbc34086c0a18ff38e090529999::Generated
3.4.5 LB UPDATESQL
構文
liquibase(lb) updatesql -changelog CHANGELOG [-context CONTEXT]
[-label LABEL] [-emit_schema] [-fail] [-replace] [-runonchange] [-runalways] [-debug]
特定の変更ログに適用されるSQL文を生成し、画面にレンダリングします。
名前付きパラメータ
パラメータ | 説明 |
---|---|
-changelog CHANGELOG |
使用する変更ログ・ファイルを指定します。 |
共通ジェネレータ・パラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
-context CONTEXT |
実行する変更セット・コンテキストを指定します。 | - |
-label LABEL |
ラベルを使用して変更ログをフィルタします。 | - |
-emit_schema |
DDLの生成時にスキーマを含めます。 | False |
-fail |
変更セットにfailOnError値を設定します。 | False |
-replace |
変更セットにreplaceIfExists値を設定します。 | False |
-runonchange |
変更セットにrunOnChange値を設定します。 | False |
-runalways |
変更セットにrunAlways値を設定します。 | False |
-debug |
追加のデバッグ出力を生成して表示します。 | False |
例
SQL> lb updatesql -changelog zipcodes_tablev2.xml
-- *********************************************************************
-- Update Database Script
-- *********************************************************************
-- Change Log: zipcodes_tablev2.xml
-- Ran at: 6/3/20 12:49 PM
-- Against: JDOE@jdbc:oracle:thin:@localhost:1521/ORCLPDB1
-- Liquibase version: 3.8.9
-- *********************************************************************
-- Lock Database
UPDATE JDOE.DATABASECHANGELOGLOCK SET LOCKED = 1, LOCKEDBY = '192.168.1.175 (192.168.1.175)',
LOCKGRANTED = TO_TIMESTAMP('2020-06-03 12:49:05.779', 'YYYY-MM-DD HH24:MI:SS.FF') WHERE ID = 1 AND LOCKED = 0;
-- Changeset zipcodes_tablev2.xml::3595dbfbc34086449c0a18ff38e090529999::Generated
ALTER TABLE "ZIPCODES" ADD ("LON" NUMBER)
/
-- Logging Oracle Extension actions to the Database.
DECLARE
id varchar2(200) := '3595dbfbc34086449c0a18ff38e090529999';
rawAction clob;
rawSxml clob;
myrow varchar2(2000);
action clob := '';
sxml clob := '';
dep varchar2(200) := '1202945773';
author varchar2(200) := 'Generated';
filename varchar2(200) := 'zipcodes_tablev2.xml';
insertlog varchar2(200) := 'insert into DATABASECHANGELOG_ACTIONS (id,author,filename,sql,sxml,deployment_id)
values (:id,:author,:filename,:action,:sxml,:dep) returning rowid into :out';
updateaction varchar2(200) := 'update DATABASECHANGELOG_ACTIONS set sql = sql ||:action where rowid = :myrow ';
updatesxml varchar2(200) := 'update DATABASECHANGELOG_ACTIONS set sxml = sxml ||:sxml where rowid = :myrow ';
begin
action := utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw(q'
{QUxURVIgVEFCTEUgIlpJUENPREVTIiBBREQgKCJMT04iIE5VTUJFUikKLwogIC0tIE9SQS0zOTM0MTogQ
2Fubm90IGNvbnZlcnQgYW4gZXhpc3RpbmcgY29sdW1uIGludG8gYW4gaWRlbnRpdHkgY29sdW1uLgov}')));
sxml := utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw(q'
{PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PFRBQkxFIHhtbG5zPSJodHRwOi8veG1sbnMub3Jh
Y2xlLmNvbS9rdSIgdmVyc2lvbj0iMS4wIj4KICAgPFNDSEVNQT5TS1VUWjwvU0NIRU1BPgogICA8TkFNRT5aSVBDT0RFUzwvTkFNRT4KICAgPFJFT
EFUSU9OQUxfVEFCTEU+CiAgICAgIDxDT0xfTElTVD4KICAgICAgICAgPENPTF9MSVNUX0lURU0+CiAgICAgICAgICAgIDxOQU1FPklEPC9OQU1FPg
ogICAgICAgICAgICA8REFUQVRZUEU+TlVNQkVSPC9EQVRBVFlQRT4KICAgICAgICAgICAgPE5PVF9OVUxMLz4KICAgICAgICAgPC9DT0xfTElTVF9
JVEVNPgogICAgICAgICA8Q09MX0xJU1RfSVRFTT4KICAgICAgICAgICAgPE5BTUU+Q09ERTwvTkFNRT4KICAgICAgICAgICAgPERBVEFUWVBFPlZBU
kNIQVIyPC9EQVRBVFlQRT4KICAgICAgICAgICAgPExFTkdUSD42PC9MRU5HVEg+CiAgICAgICAgICAgIDxDT0xMQVRFX05BTUU+VVNJTkdfTkxTX0N
PTVA8L0NPTExBVEVfTkFNRT4KICAgICAgICAgPC9DT0xfTElTVF9JVEVNPgogICAgICAgICA8Q09MX0xJU1RfSVRFTT4KICAgICAgICAgICAgPE5BT
UU+Q0lUWTwvTkFNRT4KICAgICAgICAgICAgPERBVEFUWVBFPlZBUkNIQVIyPC9EQVRBVFlQRT4KICAgICAgICAgICAgPExFTkdUSD41MDwvTEVOR1R
IPgogICAgICAgICAgICA8Q09MTEFURV9OQU1FPlVTSU5HX05MU19DT01QPC9DT0xMQVRFX05BTUU+CiAgICAgICAgIDwvQ09MX0xJU1RfSVRFTT4KI
CAgICAgICAgPENPTF9MSVNUX0lURU0+CiAgICAgICAgICAgIDxOQU1FPlNUQVRFPC9OQU1FPgogICAgICAgICAgICA8REFUQVRZUEU+VkFSQ0hBUjI
8L0RBVEFUWVBFPgogICAgICAgICAgICA8TEVOR1RIPjUwPC9MRU5HVEg+CiAgICAgICAgICAgIDxDT0xMQVRFX05BTUU+VVNJTkdfTkxTX0NPTVA8L
0NPTExBVEVfTkFNRT4KICAgICAgICAgPC9DT0xfTElTVF9JVEVNPgogICAgICAgICA8Q09MX0xJU1RfSVRFTT4KICAgICAgICAgICAgPE5BTUU+Q09
VTlRZPC9OQU1FPgogICAgICAgICAgICA8REFUQVRZUEU+VkFSQ0hBUjI8L0RBVEFUWVBFPgogICAgICAgICAgICA8TEVOR1RIPjUwPC9MRU5HVEg+C
iAgICAgICAgICAgIDxDT0xMQVRFX05BTUU+VVNJTkdfTkxTX0NPTVA8L0NPTExBVEVfTkFNRT4KICAgICAgICAgPC9DT0xfTElTVF9JVEVNPgogICA
gICAgICA8Q09MX0xJU1RfSVRFTT4KICAgICAgICAgICAgPE5BTUU+QVJFQV9DT0RFPC9OQU1FPgogICAgICAgICAgICA8REFUQVRZUEU+TlVNQkVSP
C9EQVRBVFlQRT4KICAgICAgICAgICAgPFBSRUNJU0lPTj4zPC9QUkVDSVNJT04+CiAgICAgICAgICAgIDxTQ0FMRT4wPC9TQ0FMRT4KICAgICAgICA
gPC9DT0xfTElTVF9JVEVNPgogICAgICAgICA8Q09MX0xJU1RfSVRFTT4KICAgICAgICAgICAgPE5BTUU+TEFUPC9OQU1FPgogICAgICAgICAgICA8R
EFUQVRZUEU+TlVNQkVSPC9EQVRBVFlQRT4KICAgICAgICAgPC9DT0xfTElTVF9JVEVNPgogICAgICA8L0NPTF9MSVNUPgogICAgICA8UFJJTUFSWV9
LRVlfQ09OU1RSQUlOVF9MSVNUPgogICAgICAgICA8UFJJTUFSWV9LRVlfQ09OU1RSQUlOVF9MSVNUX0lURU0+CiAgICAgICAgICAgIDxDT0xfTElTV
D4KICAgICAgICAgICAgICAgPENPTF9MSVNUX0lURU0+CiAgICAgICAgICAgICAgICAgIDxOQU1FPklEPC9OQU1FPgogICAgICAgICAgICAgICA8L0N
PTF9MSVNUX0lURU0+CiAgICAgICAgICAgIDwvQ09MX0xJU1Q+CiAgICAgICAgICAgIDxVU0lOR19JTkRFWD4KICAgICAgICAgICAgICAgPElOREVYX
0FUVFJJQlVURVM+CiAgICAgICAgICAgICAgICAgIDxQQ1RGUkVFPjEwPC9QQ1RGUkVFPgogICAgICAgICAgICAgICAgICA8SU5JVFJBTlM+MjwvSU5
JVFJBTlM+CiAgICAgICAgICAgICAgICAgIDxNQVhUUkFOUz4yNTU8L01BWFRSQU5TPgogICAgICAgICAgICAgICAgICA8VEFCTEVTUEFDRT5VU0VSU
zwvVEFCTEVTUEFDRT4KICAgICAgICAgICAgICAgICAgPExPR0dJTkc+WTwvTE9HR0lORz4KICAgICAgICAgICAgICAgPC9JTkRFWF9BVFRSSUJVVEV
TPgogICAgICAgICAgICA8L1VTSU5HX0lOREVYPgogICAgICAgICA8L1BSSU1BUllfS0VZX0NPTlNUUkFJTlRfTElTVF9JVEVNPgogICAgICA8L1BSS
U1BUllfS0VZX0NPTlNUUkFJTlRfTElTVD4KICAgICAgPERFRkFVTFRfQ09MTEFUSU9OPlVTSU5HX05MU19DT01QPC9ERUZBVUxUX0NPTExBVElPTj4
KICAgICAgPFBIWVNJQ0FMX1BST1BFUlRJRVM+CiAgICAgICAgIDxIRUFQX1RBQkxFPgogICAgICAgICAgICA8U0VHTUVOVF9BVFRSSUJVVEVTPgogI
CAgICAgICAgICAgICA8U0VHTUVOVF9DUkVBVElPTl9ERUZFUlJFRC8+CiAgICAgICAgICAgICAgIDxQQ1RGUkVFPjEwPC9QQ1RGUkVFPgogICAgICA
gICAgICAgICA8UENUVVNFRD40MDwvUENUVVNFRD4KICAgICAgICAgICAgICAgPElOSVRSQU5TPjE8L0lOSVRSQU5TPgogICAgICAgICAgICAgICA8T
UFYVFJBTlM+MjU1PC9NQVhUUkFOUz4KICAgICAgICAgICAgICAgPFRBQkxFU1BBQ0U+VVNFUlM8L1RBQkxFU1BBQ0U+CiAgICAgICAgICAgICAgIDx
MT0dHSU5HPlk8L0xPR0dJTkc+CiAgICAgICAgICAgIDwvU0VHTUVOVF9BVFRSSUJVVEVTPgogICAgICAgICAgICA8Q09NUFJFU1M+TjwvQ09NUFJFU
1M+CiAgICAgICAgIDwvSEVBUF9UQUJMRT4KICAgICAgPC9QSFlTSUNBTF9QUk9QRVJUSUVTPgogICA8L1JFTEFUSU9OQUxfVEFCTEU+CjwvVEFCTEU+}')));
execute immediate insertlog using id,author,filename,action,sxml,dep returning into myrow;
end;
/
--;
INSERT INTO JDOE.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, DESCRIPTION,
COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID) VALUES ('3595dbfbc34086449c0a18ff38e090529999',
'Generated', 'zipcodes_tablev2.xml', SYSTIMESTAMP, 2, '8:5262bd1c3989655295b5641b82868158',
'createSxmlObject objectName=ZIPCODES, ownerName=JDOE, '', 'EXECUTED', NULL, NULL, '3.8.9', '1202945773');
-- Release Database Lock
UPDATE JDOE.DATABASECHANGELOGLOCK SET LOCKED = 0, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1;
3.4.6 LB ROLLBACK
構文
liquibase(lb) rollback -changelog CHANGELOG [-context CONTEXT]
[-label LABEL] [-emit_schema] [-fail] [-replace] [-runonchange] [-runalways] [-log]
[-debug] (-count COUNT | -date DATE)
入力変更ログを使用して適用された最後の変更から開始して、変更をロールバックします。カウントは変更ログ内の変更数よりも大きくなる場合があります。999は最大サイズであり、すべての変更をロールバックします。
名前付きパラメータ
パラメータ | 説明 |
---|---|
-changelog CHANGELOG |
使用する変更ログ・ファイルを指定します。 |
ロールバック・スタイル・オプション
次のオプションのいずれかを選択します。
オプション | 説明 |
---|---|
-count COUNT |
適用する変更の数 |
-date DATE |
ロールバック先の日付 |
共通更新パラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
-context CONTEXT |
実行する変更セット・コンテキストを指定します。 | - |
-label LABEL |
ラベルを使用して変更ログをフィルタします。 | - |
-emit_schema |
DDLの生成時にスキーマを含めます。 | False |
-fail |
変更セットにfailOnError値を設定します。 | False |
-replace |
変更セットにreplaceIfExists値を設定します。 | False |
-runonchange |
変更セットにrunOnChange値を設定します。 | False |
-runalways |
変更セットにrunAlways値を設定します。 | False |
-log |
実行した作業のログを生成します | False |
-debug |
追加のデバッグ出力を生成して表示します。 | False |
例
lb rollback -changelog zipcodes_tablev2.xml -count 100
ScriptRunner Executed:zipcodes_tablev2.xml::3595dbfbc34086449c0a18ff38e090529999::Generated
3.4.7 LB ROLLBACKSQL
構文
liquibase(lb) rollbacksql -changelog CHANGELOG [-context CONTEXT]
[-label LABEL] [-emit_schema] [-fail] [-replace] [-runonchange] [-runalways] [-debug]
(-count COUNT | -date DATE)
名前付きパラメータ
パラメータ | 説明 |
---|---|
-changelog CHANGELOG |
使用する変更ログ・ファイルを指定します。 |
ロールバック・スタイル・オプション
次のオプションのいずれかを選択します。
オプション | 説明 |
---|---|
-count COUNT |
適用する変更の数 |
-date DATE |
ロールバック先の日付 |
共通更新パラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
-label LABEL |
ラベルを使用して変更ログをフィルタします。 | - |
-context CONTEXT |
実行する変更セット・コンテキストを指定します。 | - |
-emit_schema |
DDLの生成時にスキーマを含めます。 | False |
-fail |
変更セットにfailOnError値を設定します。 | False |
-replace |
変更セットにreplaceIfExists値を設定します。 | False |
-runonchange |
変更セットにrunOnChange値を設定します。 | False |
-runalways |
変更セットにrunAlways値を設定します。 | False |
-debug |
追加のデバッグ出力を生成して表示します。 | - |
例
lb rollbacksql -changelog zipcodes_tablev2.xml -count 100
-- *********************************************************************
-- Rollback 100 Change(s) Script
-- *********************************************************************
-- Change Log: zipcodes_tablev2.xml
-- Ran at: 6/3/20 12:55 PM
-- Against: JDOE@jdbc:oracle:thin:@localhost:1521/ORCLPDB1
-- Liquibase version: 3.8.9
-- *********************************************************************
-- Lock Database
UPDATE JDOE.DATABASECHANGELOGLOCK SET LOCKED = 1, LOCKEDBY = '192.168.1.175 (192.168.1.175)',
LOCKGRANTED = TO_TIMESTAMP('2020-06-03 12:55:19.175', 'YYYY-MM-DD HH24:MI:SS.FF')
WHERE ID = 1 AND LOCKED = 0;
-- Rolling Back ChangeSet:
zipcodes_tablev2.xml::3595dbfbc34086449c0a18ff38e090529999::Generated
ALTER TABLE "JDOE"."ZIPCODES" DROP ("LON");
delete from DATABASECHANGELOG_actions where id = '3595dbfbc34086449c0a18ff38e090529999' and
filename = 'zipcodes_tablev2.xml' and author ='Generated' and sequence = (select Max(sequence)
from DATABASECHANGELOG_actions where id = '3595dbfbc34086449c0a18ff38e090529999' and
filename = 'zipcodes_tablev2.xml' and author ='Generated');
DELETE FROM JDOE.DATABASECHANGELOG WHERE ID = '3595dbfbc34086449c0a18ff38e090529999' AND
AUTHOR = 'Generated' AND FILENAME = 'zipcodes_tablev2.xml';
-- Release Database Lock
UPDATE JDOE.DATABASECHANGELOGLOCK SET LOCKED = 0, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1;
3.4.8 LB DIFF
構文
liquibase(lb) diff -url URL -user USER -pass PASS [-noreport]
現在の接続と指定されたデータベースの差異を表示します。reportがtrueの場合、出力はテキスト・レポートの形式になります。reportがfalse (デフォルト)の場合、出力は変更ログの形式になります。
宛先URLの形式は、HOST:PORT:SIDまたはHOST:PORT/SERVICEです。
名前付きパラメータ
パラメータ | 説明 | デフォルト |
---|---|---|
-url URL |
宛先データベースのJDBC URL | - |
-user USER |
宛先ユーザー | - |
-pass PASS |
宛先パスワード | - |
-noreport |
結果はテキスト・レポートではなく、変更ログとして出力されます | True |
例
lb diff -url localhost:1521/ORCLPDB1 -user hr -password hr
Action successfully completed please review created file diffResult.txt
!more diffResult.txt
Reference Database: JDOE @ jdbc:oracle:thin:@localhost:1521/ORCLPDB1 (Default Schema: JDOE)
Comparison Database: HR @ jdbc:oracle:thin:@localhost:1521/ORCLPDB1 (Default Schema: HR)
Compared Schemas: JDOE -> HR
Product Name: EQUAL
Product Version: EQUAL
Missing Catalog(s): NONE
Unexpected Catalog(s): NONE
Changed Catalog(s): NONE
Missing Column(s):
JDOE.ZIPCODES.AREA_CODE
JDOE.DATABASECHANGELOG.AUTHOR
JDOE.DATABASECHANGELOG_ACTIONS.AUTHOR
JDOE.DATABASECHANGELOG_DETAILS.AUTHOR
JDOE.ZIPCODES.CITY
JDOE.ZIPCODES.CODE
JDOE.DATABASECHANGELOG.COMMENTS
JDOE.DATABASECHANGELOG_DETAILS.COMMENTS
JDOE.DATABASECHANGELOG.CONTEXTS
JDOE.DATABASECHANGELOG_DETAILS.CONTEXTS
JDOE.ZIPCODES.COUNTY
JDOE.DATABASECHANGELOG.DATEEXECUTED
JDOE.DATABASECHANGELOG_DETAILS.DATEEXECUTED
JDOE.DATABASECHANGELOG.DEPLOYMENT_ID
JDOE.DATABASECHANGELOG_ACTIONS.DEPLOYMENT_ID
JDOE.DATABASECHANGELOG_DETAILS.DEPLOYMENT_ID
JDOE.DATABASECHANGELOG.DESCRIPTION
JDOE.DATABASECHANGELOG_DETAILS.DESCRIPTION
JDOE.DATABASECHANGELOG.EXECTYPE
JDOE.DATABASECHANGELOG_DETAILS.EXECTYPE
JDOE.DATABASECHANGELOG.FILENAME
JDOE.DATABASECHANGELOG_ACTIONS.FILENAME
JDOE.DATABASECHANGELOG_DETAILS.FILENAME
JDOE.DATABASECHANGELOG.ID
JDOE.DATABASECHANGELOGLOCK.ID
JDOE.DATABASECHANGELOG_ACTIONS.ID
JDOE.DATABASECHANGELOG_DETAILS.ID
JDOE.ZIPCODES.ID
JDOE.DATABASECHANGELOG.LABELS
JDOE.DATABASECHANGELOG_DETAILS.LABELS
JDOE.ZIPCODES.LAT
JDOE.DATABASECHANGELOG.LIQUIBASE
JDOE.DATABASECHANGELOG_DETAILS.LIQUIBASE
JDOE.DATABASECHANGELOGLOCK.LOCKED
JDOE.DATABASECHANGELOGLOCK.LOCKEDBY
JDOE.DATABASECHANGELOGLOCK.LOCKGRANTED
JDOE.ZIPCODES.LON
JDOE.DATABASECHANGELOG.MD5SUM
JDOE.DATABASECHANGELOG_DETAILS.MD5SUM
JDOE.DATABASECHANGELOG.ORDEREXECUTED
JDOE.DATABASECHANGELOG_ACTIONS.SEQUENCE
JDOE.DATABASECHANGELOG_ACTIONS.SQL
JDOE.DATABASECHANGELOG_DETAILS.SQL
JDOE.ZIPCODES.STATE
JDOE.DATABASECHANGELOG_ACTIONS.SXML
JDOE.DATABASECHANGELOG_DETAILS.SXML
JDOE.DATABASECHANGELOG.TAG
Unexpected Column(s): NONE
Changed Column(s): NONE
Missing Foreign Key(s): NONE
Unexpected Foreign Key(s): NONE
Changed Foreign Key(s): NONE
Missing Index(s):
PK_DATABASECHANGELOGLOCK UNIQUE ON JDOE.DATABASECHANGELOGLOCK(ID)
SYS_C00122620 UNIQUE ON JDOE.DATABASECHANGELOG_ACTIONS(ID, AUTHOR, FILENAME, SEQUENCE)
SYS_C00122637 UNIQUE ON JDOE.ZIPCODES(ID)
Unexpected Index(s): NONE
Changed Index(s): NONE
Missing Primary Key(s):
PK_DATABASECHANGELOGLOCK on JDOE.DATABASECHANGELOGLOCK(ID)
SYS_C00122620 on JDOE.DATABASECHANGELOG_ACTIONS(ID, AUTHOR, FILENAME, SEQUENCE)
SYS_C00122637 on JDOE.ZIPCODES(ID)
Unexpected Primary Key(s): NONE
Changed Primary Key(s): NONE
Missing Sequence(s): NONE
Unexpected Sequence(s): NONE
Changed Sequence(s): NONE
Missing Table(s):
DATABASECHANGELOG
DATABASECHANGELOGLOCK
DATABASECHANGELOG_ACTIONS
ZIPCODES
Unexpected Table(s): NONE
Changed Table(s): NONE
Missing Unique Constraint(s): NONE
Unexpected Unique Constraint(s): NONE
Changed Unique Constraint(s): NONE
Missing View(s):
DATABASECHANGELOG_DETAILS
Unexpected View(s): NONE
Changed View(s): NONE
SQL> lb diff -url localhost:1521/ORCLPDB1 -user hr -password hr -noreport
Action successfully completed please review created file diffResult.xml
diffResult.xml
!more diffResult.xml
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
<changeSet author="jdoe (generated)" id="1591203948991-1">
<createTable tableName="DATABASECHANGELOG_ACTIONS">
<column name="ID" type="VARCHAR2(255 BYTE)">
<constraints nullable="false"/>
</column>
<column name="SEQUENCE" type="NUMBER">
<constraints nullable="false"/>
</column>
<column name="SQL" type="CLOB"/>
<column name="SXML" type="CLOB"/>
<column name="AUTHOR" type="VARCHAR2(255 BYTE)">
<constraints nullable="false"/>
</column>
<column name="FILENAME" type="VARCHAR2(255 BYTE)">
<constraints nullable="false"/>
</column>
<column name="DEPLOYMENT_ID" type="VARCHAR2(10 BYTE)"/>
</createTable>
</changeSet>
<changeSet author="jdoe (generated)" id="1591203948991-2">
<createView fullDefinition="true" viewName="DATABASECHANGELOG_DETAILS">
CREATE OR REPLACE FORCE VIEW DATABASECHANGELOG_DETAILS (DEPLOYMENT_ID, ID, AUTHOR,
FILENAME, SQL, SXML, DATEEXECUTED, EXECTYPE, MD5SUM, DESCRIPTION, COMMENTS, LIQUIBASE,
CONTEXTS, LABELS) AS SELECT da.deployment_id, da.id, da.author,
da.filename, da.sql, da.sxml, d.dateexecuted, d.exectype, d.md5sum,
d.description, d.comments, d.liquibase, d.contexts, d.labels
FROM databasechangelog d LEFT JOIN databasechangelog_actions da ON d.id = da.id
AND d.author = da.author AND
d.filename = da.filename ORDER BY 1,7</createView>
</changeSet>
<changeSet author="jdoe (generated)" id="1591203948991-3">
<createTable tableName="ZIPCODES">
<column name="ID" type="NUMBER">
<constraints nullable="false" primaryKey="true" primaryKeyName="SYS_C00122637"/>
</column>
<column name="CODE" type="VARCHAR2(6 BYTE)"/>
<column name="CITY" type="VARCHAR2(50 BYTE)"/>
<column name="STATE" type="VARCHAR2(50 BYTE)"/>
<column name="COUNTY" type="VARCHAR2(50 BYTE)"/>
<column name="AREA_CODE" type="NUMBER(3, 0)"/>
<column name="LAT" type="NUMBER"/>
<column name="LON" type="NUMBER"/>
</createTable>
</changeSet>
<changeSet author="jdoe (generated)" id="1591203948991-4">
<createIndex indexName="SYS_C00122620" tableName="DATABASECHANGELOG_ACTIONS" unique="true">
<column name="ID"/>
<column name="AUTHOR"/>
<column name="FILENAME"/>
<column name="SEQUENCE"/>
</createIndex>
</changeSet>
<changeSet author="skutz (generated)" id="1591203948991-5">
<addPrimaryKey columnNames="ID, AUTHOR, FILENAME, SEQUENCE" constraintName="SYS_C00122620"
forIndexName="SYS_C00122620" tableName="DATABASECHANGELOG_ACTIONS"/>
</changeSet>
</databaseChangeLog>
3.4.9 LB DBDOC
構文
liquibase(lb) dbdoc -changelog CHANGELOG -dir DIR [-context CONTEXT] [-label LABEL]
名前付きパラメータ
パラメータ | 説明 |
---|---|
-changelog CHANGELOG |
使用する変更ログ・ファイルを指定します。 |
-dir DIR |
指定されたディレクトリ内のすべてのファイルを保存します(例: -dir some/sub/directory)。 |
共通更新パラメータ
パラメータ | 説明 |
---|---|
-context CONTEXT |
実行する変更セット・コンテキストを指定します。 |
-label LABEL |
ラベルを使用して変更ログをフィルタします。 |
例
SQL> lb dbdoc -changelog states_table.xml -dir ./doc
SQL> !ls -l ./doc
total 56
drwxr-xr-x 3 jdoe staff 96 Jun 3 13:25 authors
-rw-r--r-- 1 jdoe staff 449 Jun 3 13:25 authors.html
drwxr-xr-x 3 jdoe staff 96 Jun 3 13:25 changelogs
-rw-r--r-- 1 jdoe staff 474 Jun 3 13:25 changelogs.html
drwxr-xr-x 31 jdoe staff 992 Jun 3 13:25 columns
-rw-r--r-- 1 jdoe staff 555 Jun 3 13:25 currenttables.html
-rw-r--r-- 1 jdoe staff 899 Jun 3 13:25 globalnav.html
-rw-r--r-- 1 jdoe staff 769 Jun 3 13:25 index.html
-rw-r--r-- 1 jdoe staff 445 Jun 3 13:25 overview-summary.html
drwxr-xr-x 4 jdoe staff 128 Jun 3 13:25 pending
drwxr-xr-x 3 jdoe staff 96 Jun 3 13:25 recent
-rw-r--r-- 1 jdoe staff 1202 Jun 3 13:25 stylesheet.css
drwxr-xr-x 4 jdoe staff 128 Jun 3 13:25 tables
図3-1に、DBDOCコマンドで作成された索引ページを示します。これを使用して、ドキュメントの生成に使用された変更ログの様々な詳細間を移動できます。
3.4.10 LB CHANGELOGSYNC
構文
liquibase(lb) changelogsync -changelog CHANGELOG
名前付きパラメータ
パラメータ | 説明 |
---|---|
-changelog CHANGELOG |
使用する変更ログ・ファイルを指定します。 |
例
SQL> lb changelogsync -changelog zipcodes_table.xml
-- *********************************************************************
-- SQL to add all changesets to database history table
-- *********************************************************************
-- Change Log: zipcodes_table.xml
-- Ran at: 6/3/20 1:28 PM
-- Against: JDOE@jdbc:oracle:thin:@localhost:1521/ORCLPDB1
-- Liquibase version: 3.8.9
-- *********************************************************************
-- Lock Database
UPDATE JDOE.DATABASECHANGELOGLOCK SET LOCKED = 1, LOCKEDBY = '192.168.1.175 (192.168.1.175)',
LOCKGRANTED = TO_TIMESTAMP('2020-06-03 13:28:24.686', 'YYYY-MM-DD HH24:MI:SS.FF')
WHERE ID = 1 AND LOCKED = 0;
INSERT INTO JDOE.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED,
MD5SUM, DESCRIPTION, COMMENTS, EXECTYPE, CONTEXTS, LABELS, LIQUIBASE, DEPLOYMENT_ID)
VALUES ('e6568d24910039bf3d4241e7edff5ec82612c60f', 'Generated', 'zipcodes_table.xml',
SYSTIMESTAMP, 3, '8:e4fe731b3a40f479dec11e234e4a69ac', 'createSxmlObject objectName=ZIPCODES,
ownerName=JDOE', '', 'EXECUTED', NULL, NULL, '3.8.9', '1205304697');
-- Release Database Lock
UPDATE JDOE.DATABASECHANGELOGLOCK SET LOCKED = 0, LOCKEDBY = NULL, LOCKGRANTED = NULL WHERE ID = 1;
3.4.11 LB CLEARCHECKSUMS
構文
liquibase(lb) clearchecksums -changelog CHANGELOG
名前付きパラメータ
パラメータ | 説明 |
---|---|
-changelog CHANGELOG |
使用する変更ログ・ファイルを指定します。 |
例
SQL> lb clearchecksums -changelog zipcodes_table.xml
3.4.12 LB LISTLOCKS
構文
liquibase(lb) listlocks -changelog CHANGELOG
名前付きパラメータ
パラメータ | 説明 |
---|---|
-changelog CHANGELOG |
使用する変更ログ・ファイルを指定します。 |
例
SQL> lb listlocks -changelog zipcodes_table.xml
No locks currently in use
3.4.13 LB RELEASELOCKS
データベース変更ログのすべてのロックを解除します。
構文
liquibase(lb) releaselocks -changelog CHANGELOG
名前付きパラメータ
パラメータ | 説明 |
---|---|
-changelog CHANGELOG |
使用する変更ログ・ファイルを指定します。 |
例
SQL> lb releaselocks -changelog zipcodes_table.xml
3.4.14 LB STATUS
構文
liquibase(lb) status -changelog CHANGELOG
現在の接続を使用して変更ログのステータスを確認します。これは、変更ログが適用されたかどうか、および変更ログの結果を示します。
名前付きパラメータ
パラメータ | 説明 |
---|---|
-changelog CHANGELOG |
使用する変更ログ・ファイルを指定します。 |
例
SQL> lb status -changelog zipcodes_table.xml
1 change sets have not been applied to JDOE@jdbc:oracle:thin:@localhost:1521/ORCLPDB1
zipcodes_table.xml::e6568d24910039bf3d4241e7edff5ec82612c60f::Generated
3.4.15 LB VALIDATE
構文
liquibase(lb) validate -changelog CHANGELOG
名前付きパラメータ
パラメータ | 説明 |
---|---|
-changelog CHANGELOG |
使用する変更ログ・ファイルを指定します。 |
例
lb validate -changelog zipcodes_table.xml
No issues were found in file zipcodes _table.xml, validation passed
3.4.16 LB VERSION
製品バージョン情報を表示します。
構文
liquibase(lb) version
例
SQL> lb version
Liquibase version: 3.8.9
Extension Version: 2.0.0.0.0
3.4.17 LB HELP
構文
liquibase(lb) help command
特定のコマンドに関するヘルプを表示するには、オプションなしでコマンドを入力します。
例
SQL> lb help
usage: lb COMMAND ...
Commands:
The following commands are available within the liquibase feature.
lb help COMMAND for command specific help
COMMAND
genobject Generate change log for a specific database object
genschema Generate changelogs and controller for connected schema
gencontrolfile Remove locks held by changelog
update Updates database to current version
updatesql Generates SQL to update database to current version
rollback Rolls back the state requested
rollbacksql Writes SQL to roll back the database to the state requested
diff Writes description of differences between two databases to standard out.
dbdoc Generates Javadoc-like documentation based on current database and change log.
changelogsync Mark all changes as executed in the database.
clearchecksums Removes current checksums from database.
listlocks Lists who currently has locks on the database changelog.
releaselocks Releases all locks on the database changelog.
status Outputs list of unrun change sets.
validate Checks the changelog for errors.
version Display product version information
3.5 DATABASECHANGELOG_DETAILS VIEW
DATABASECHANGELOG_DETAILSビューには、DATABASECHANGELOG表およびDATABASECHANGELOG_ACTIONS表からの情報が統合されているため、レポート作成やトラブルシューティングを容易に実施できます。
このビューでは、データベースに適用された各変更のステータスと実行された操作を詳しく確認できます。SQL列には、データベースで実行された実際のSQLが表示されます。SXML列には、変更が適用される前のオブジェクトの状態が表示されます。
例
SQL> desc DATABASECHANGELOG_DETAILS
Name Null? Type
________________ ___________ ________________
DEPLOYMENT_ID VARCHAR2(10)
ID VARCHAR2(255)
AUTHOR VARCHAR2(255)
FILENAME VARCHAR2(255)
SQL CLOB
SXML CLOB
DATEEXECUTED NOT NULL TIMESTAMP(6)
EXECTYPE NOT NULL VARCHAR2(10)
MD5SUM VARCHAR2(35)
DESCRIPTION VARCHAR2(255)
COMMENTS VARCHAR2(255)
LIQUIBASE VARCHAR2(20)
CONTEXTS VARCHAR2(255)
LABELS VARCHAR2(255)
3.6 Liquibaseの変更セット
次の表に変更セットを示し、そのそれぞれについて説明します。変更セットについてさらに学習するには、<changeSet>タグを参照してください。
変更セット | 説明 |
---|---|
CreateOracleConstraint | SQLから制約を作成します。 |
CreateOracleDirectory | SQLからディレクトリを作成します。 |
CreateOracleFunction | SQLから関数を作成します。 |
CreateOracleGrant | SQLから権限を作成します。 |
CreateOraclePackageBody | SQLからパッケージ本体を作成します。 |
CreateOracleJob | SQLからDBMS_Schedulerジョブを作成します。 |
CreateOraclePackageSpec | SQLからパッケージ仕様部を作成します。 |
CreateOracleProcedure | SQLからプロシージャを作成します。 |
CreateOraclePublicSynonym | SQLからパブリック・シノニムを作成します。 |
CreateOracleRefConstraint | SQLから参照制約を作成します。 |
CreateOracleSynonym | SQLからシノニムを作成します。 |
CreateOracleTrigger | SQLからトリガーを作成します。 |
CreateOracleTypeBody | SQLから型本体を作成します。 |
CreateOracleTypeSpec | SQLから型指定を作成します。 |
CreateSxmlObject | SQLから関数を作成します。 |
DropOracleConstraint | 制約を削除します。 |
DropOracleFunction | 関数を削除します。 |
DropOracleGrant | 権限を削除します。 |
DropOraclePackageBody | パッケージ本体を削除します。 |
DropOraclePackageSpec | パッケージ仕様部を削除します。 |
DropOracleProcedure | プロシージャを削除します。 |
DropOracleRefConstraint | 参照制約を削除します。 |
DropOracleTrigger | トリガーを削除します。 |
DropOracleTypeBody | 型本体を削除します。 |
DropOracleTypeSpec | 型指定を削除します。 |
DropOracleSynonym | シノニムを削除します。 |
DropSxmlObject | SXMLオブジェクトを削除します。オブジェクトがcreateSxmlObjectを介して作成された場合、オブジェクトは最後の状態にロールバックされます。作成されていなかった場合は削除されます。これは主にSXMLオブジェクトの処理のために内部的に使用されます。 |
RunOracleScript | SQLclエンジンを使用してSQLスクリプトを実行します。すべてのSQLclコマンドがサポートされています。スクリプト、ファイルおよびURLソースがサポートされます。RunOracleScriptを使用したカスタムSQLの実行を参照してください。 |
3.7 Liquibaseを使用した例
Liquibase機能を使用して、データベース変更管理タスクを実行する例を示します。
- オブジェクトの取得とデプロイ
- スキーマの取得とデプロイ
- マスター制御ファイルの生成
- スキーマの取得とデプロイおよびその後のアップグレードと再デプロイ
- RunOracleScriptを使用したカスタムSQLの実行
SQLclおよびLiquibaseを使用した変更管理については、このLiveLabsワークショップを参照してください。
3.7.1 オブジェクトの取得とデプロイ
EMPLOYEES表をHRからHR2にデプロイする手順は、次のとおりです。
ノート:
GENOBJECTコマンドの構文が変更されました。LB GENOBJECTを参照してください
3.7.2 スキーマの取得とデプロイ
sql.exe hr/hr@pdb1
SQL> lb genschema
[Type - TYPE_SPEC]: 107 ms
[Type - TYPE_BODY]: 80 ms
[Type - SEQUENCE]: 26 ms
[Type - CLUSTER]: 25 ms
[Type - TABLE]: 721 ms
[Type - MATERIALIZED_VIEW_LOG]: 18 ms
[Type - MATERIALIZED_VIEW]: 9 ms
[Type - VIEW]: 81 ms
[Type - REF_CONSTRAINT]: 128 ms
[Type - DIMENSION]: 14 ms
[Type - FUNCTION]: 43 ms
[Type - PROCEDURE]: 47 ms
[Type - PACKAGE_SPEC]: 24 ms
[Type - DB_LINK]: 14 ms
[Type - SYNONYM]: 23 ms
[Type - INDEX]: 102 ms
[Type - TRIGGER]: 25 ms
[Type - PACKAGE_BODY]: 33 ms
[Type - JOB]: 14 ms
[Method loadCaptureTable]: 1534 ms
[Method parseCaptureTableRecords]: 5479 ms
[Method sortCaptureTable]: 37 ms
[Method createExportChangeLogs]: 0 ms
Export Flags Used:
Export Grants false
Export Synonyms false
SQL>
setup the hr2 user --
drop user hr2 cascade;
create user hr2 identified by hr2;
grant connect,resource, create view to hr2;
alter user hr2 quota unlimited on users;
alter user hr2 quota unlimited on sysaux;
SQL> drop user hr2 cascade;
User HR2 dropped.
SQL> create user hr2 identified by hr2;
User HR2 created.
SQL> grant connect,resource, create view to hr2;
Grant succeeded.
SQL> alter user hr2 quota unlimited on users;
User HR2 altered.
SQL> alter user hr2 quota unlimited on sysaux;
User HR2 altered.
SQL> connect hr2/hr2
Connected.
SQL> lb update -changelog controller.xml
ScriptRunner Executed:person_typ_type_spec.xml::32492b89db4b0e2a115caa3e7e6c3d29c11fa1db::Generated
ScriptRunner Executed:emp_person_typ_type_spec.xml::cb314e652bc79126fa0a2b5261720d15728c7e04::Generated
ScriptRunner Executed:people_typ_type_spec.xml::cc5c2298290e3ce2dc1563da82ddd9ea33a768c8::Generated
SQL> tables
TABLES
___________________________
DATABASECHANGELOG
DATABASECHANGELOGLOCK
DATABASECHANGELOG_ACTIONS
COUNTRIES
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
10 rows selected.
3.7.3 マスター制御ファイルの生成
SQL> lb gencontrolfile
Action successfully completed please review created file controller.xml
SQL> !more controller.xml
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<include file="{filename.xml}"/>
</databaseChangeLog>
3.7.5 RunOracleScriptを使用したカスタムSQLの実行
#### SCRIPT - STRING EXAMPLE ####
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:n0="http://www.oracle.com/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
<changeSet id="runScriptString" author="jdoe">
<n0:runOracleScript objectName="myScript" ownerName="JDOE" sourceType="STRING">
<n0:source><![CDATA[DEFINE table_name = RUNNERSTRING;create table &&table_name (id number);]]></n0:source>
</n0:runOracleScript>
</changeSet>
</databaseChangeLog>
----------------------------------------------------------------------------------------------------------------------------------------------------
SQL> tables
no rows selected
SQL> lb update -changelog stringscript.xml
ScriptRunner Executed:stringscript.xml::runScriptString::jdoe
SQL> tables
TABLES
____________________________
DATABASECHANGELOGLOCK
DATABASECHANGELOG
DATABASECHANGELOG_ACTIONS
RUNNERSTRING
#### SCRIPT - FILE EXAMPLE ####
filescript.xml
----------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:n0="http://www.oracle.com/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
<changeSet id="RunScriptFile" author="jdoe">
<n0:runOracleScript objectName="myScript" ownerName="JDOE" sourceType="FILE">
<n0:source><![CDATA[/Volumes/SSD/work/sqlcl/scriptFILE.sql]]></n0:source>
</n0:runOracleScript>
</changeSet>
</databaseChangeLog>
----------------------------------------------------------------------------------------------------------------------------------------------------
scriptFILE.sql
-------------------------------------------------------------------------------------------------------------------------------------------
CREATE TABLE RUNNERFILE (id number)
-------------------------------------------------------------------------------------------------------------------------------------------
SQL> tables
TABLES
____________________________
DATABASECHANGELOGLOCK
DATABASECHANGELOG
DATABASECHANGELOG_ACTIONS
RUNNERSTRING
SQL> lb update -changelog filescript.xml
ScriptRunner Executed:/Volumes/SSD/work/sqlcl/filescript.xml::RunScriptFile::jdoe
SQL> tables
TABLES
____________________________
DATABASECHANGELOGLOCK
DATABASECHANGELOG
DATABASECHANGELOG_ACTIONS
RUNNERSTRING
RUNNERFILE
#### SCRIPT - URL EXAMPLE ####
urlscript.xml
----------------------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:n0="http://www.oracle.com/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
<changeSet id="RunScriptUrl" author="jdoe">
<n0:runOracleScript objectName="myScript" ownerName="JDOE" sourceType="URL">
<n0:source><![CDATA[file:///Volumes/SSD/work/sqlcl/scriptURL.sql]]></n0:source>
</n0:runOracleScript>
</changeSet>
</databaseChangeLog>
----------------------------------------------------------------------------------------------------------------------------------------------------
scriptURL.sql
-------------------------------------------------------------------------------------------------------------------------------------------
CREATE TABLE RUNNERURL (id number)
-------------------------------------------------------------------------------------------------------------------------------------------
SQL> tables
TABLES
____________________________
DATABASECHANGELOGLOCK
DATABASECHANGELOG
DATABASECHANGELOG_ACTIONS
RUNNERSTRING
RUNNERFILE
SQL> lb update -changelog urlscript.xml
ScriptRunner Executed:/Volumes/SSD/work/sqlcl/urlscript.xml::RunScriptUrl::jdoe
SQL> tables
TABLES
____________________________
DATABASECHANGELOGLOCK
DATABASECHANGELOG
DATABASECHANGELOG_ACTIONS
RUNNERSTRING
RUNNERFILE
RUNNERURL