2 SQLclでのLiquibaseの使用
この章では、SQLclのLiquibase機能について説明します。内容は次のとおりです。
2.1 Liquibaseについて
Liquibaseは、データベース・スキーマの変更を追跡、管理、および適用するための、データベースに依存しないオープンソースのライブラリです。Liquibaseの主要な概念の理解については、主要な概念を参照してください。
SQLclでは、コマンドを実行して、単一オブジェクトまたは完全なスキーマ(変更セットと変更ログ)の変更ログを生成できるようになりました。これらのオブジェクトは、SQLclを使用するか、従来のLiquibaseインタフェースを使用して手動で処理できます。
SQLclのLiquibase機能を使用すると、次のことができます。
- 単一オブジェクトの変更ログを生成して実行する
- オブジェクトの依存性を持つスキーマ変更セットを生成して実行する
- 作成中に、オブジェクトの依存性に基づいて変更セットを自動的にソートする
- 変更セットまたは変更ログの実行に関するすべてのSQL文を、生成時に記録する
- 変更セットおよび変更ログの完全なロールバック・サポートを自動的に提供する
2.2 Liquibaseを使用するための要件
Liquibaseを使用するための2つの重要な側面は、Oracleデータベースにおけるオブジェクトの取得とデプロイです。
オブジェクトの取得
オブジェクトまたはスキーマを取得するには、SQLcl 19.2以降がインストールされている必要があります。
このリリースでは、SQLclで接続しているスキーマからのみオブジェクトを取得できます。また、ファイルを保存するディレクトリに対する書込み権限も必要です。
スキーマ全体を取得する場合、接続先のユーザーに表を作成する権限が必要です。DATABASECHANGELOG_EXPORT表は、オブジェクトの詳細を収集して正しくソートするために内部的に作成されます。作成されたオブジェクトは、取得プロセスから自動的に除外され、取得の完了時に破棄されます。
オブジェクトのデプロイ
Liquibaseは、DATABASECHANGELOG表を使用して、実行された変更セットを追跡します。DATABASECHANGELOGLOCK表は、Liquibaseのインスタンスが確実に一度に1つのみ実行されているようにします。DATABASECHANGELOG_EXPORT表は、オブジェクトの状態とデプロイメント中に実行されたSQL文を追跡します。
-
SQLcl
SQLclを介してデータベースに変更をデプロイするには、19.2リリース以降および表を作成する権限が必要です。デプロイする変更を介して任意のオブジェクト型を作成するには、必要な権限を持っている必要があります。
-
Liquibase
Liquibaseを直接使用して変更セットをデプロイする場合、次のものが必要です。
- Liquibase環境にインストールされている拡張機能。
oracle-liquibase.jar
ファイルをliquibase/lib/ext
に追加します。 - 表を作成する権限。
- Liquibase環境にインストールされている拡張機能。
2.3 サポートされているタイプ
DDLタイプは作成または置換構文を使用しますが、変更を適用する前にオブジェクトのスナップショットが取得されるため、最後の既知の状態への自動ロールバックがサポートされます。SXMLタイプは、自動ロールバック・サポートによる自動変更生成をサポートします。
DDLタイプには、独自の変更タイプがあります。
- CONSTRAINT
- DIMENSION
- FUNCTION
- OBJECT_GRANT
- PACKAGE_BODY
- PACKAGE_SPEC
- PROCEDURE
- PUBLIC_SYNONYM
- REF_CONSTRAINT
- SYNONYM
- TYPE BODY
- TYPE SPEC
SXMLタイプは、SXML変更タイプを共有します。
- AQ_QUEUE
- AQ_QUEUE_TABLE
- AQ_TRANSFORM MATERIALIZED_VIEW
- ASSOCIATION
- AUDIT
- AUDIT_OBJ
- CLUSTER
- CONTEXT
- DB_LINK
- DEFAULT_ROLE
- FGA_POLICY
- JOB
- LIBRARY
- 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
2.4 SQLclでサポートされているLiquibaseコマンド
SQLclのLiquibaseコマンドは、liquibase
またはlb
を使用して起動できます。使用可能なすべてのコマンドのリストを表示するには、引数なしでliquibase
またはlb
を実行します。
様々なコマンドを次に示します。
liquibase(lb) genobject <object_type> <object_name>
SQLclの現在の接続を使用して単一のオブジェクトを取得します。現在の作業ディレクトリに、<object name>_<object type>.xmlという名前のxmlファイルが作成されます。
使用可能なパラメータ:
名前 | 説明 | 必須 |
---|---|---|
オブジェクト型 | オブジェクトの型(これはOracleタイプです) | はい |
オブジェクト名 | オブジェクトの名前 | はい |
例:
SQL> lb genobject table employees
lb genobject table employees
Action successfully completed please review created file EMPLOYEES_TABLE.xml
liquibase(lb) genschema
ユーザーがSQLclで接続しているスキーマ全体を取得します。スキーマ内の各オブジェクトの現在の作業ディレクトリにxmlファイルを作成し、controller.xmlファイルを作成します。コントローラ・ファイルは、スキーマを正しくデプロイできるように、すべてのファイルを適切な順序で含んだ変更ログです。
使用可能なパラメータ:
名前 | 説明 | 必須 |
---|---|---|
Public synonym | パブリック・シノニムを取得します。デフォルトはfalseです。 | いいえ |
Grants | 権限を取得します。デフォルトは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
liquibase(lb) gencontrolfile
現在の作業ディレクトリにファイルを含めるためのプレースホルダを指定して、空の変更ログmaster.xml
を作成します。このコマンドは、カスタム変更セットを含む変更ログを作成するときに使用できます。
SQL> lb gencontrolfile
lb gencontrolfile
Action successfully completed please review created file controller.xml
liquibase(lb) update <CHANGE LOG> {include schema}
現在の接続を使用して、指定した変更ログを適用します。include schemaにTRUE
を渡すことにより、スキーマをDDLに含めることを選択できます。デフォルト値はFALSE
です。
SQL> lb update foo_table.xml
lb update foo_table.xml
Table "FOO" created.
liquibase(lb) updatesql <CHANGE LOG> {include schema}
特定の変更ログに適用されるSQL文を生成し、画面にレンダリングします。include schemaにTRUE
を渡すことにより、スキーマをDDLに含めることを選択できます。デフォルト値はFALSE
です。
SQL> lb updatesql syme_table.xml
lb updatesql syme_table.xml
CREATE TABLE "Syme"
( "ID" NUMBER
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 NOCOMPRESS LOGGING
TABLESPACE "SYSAUX"
liquibase(lb) rollback <CHANGE LOG> <COUNT>
入力変更ログを使用して適用された最後の変更から開始して、変更をロールバックします。カウントは変更ログ内の変更数よりも大きくなる場合があります。999は最大サイズであり、すべての変更をロールバックします。
SQL> lb rollback syme_table.xml 999
lb rollback syme_table.xml 999
Table "Syme" dropped.
liquibase(lb) diff <DEST URL> <DEST USER> <DEST PASS> {report}
現在の接続と指定されたデータベースの差異を表示します。reportがtrueの場合、出力はテキスト・レポートの形式になります。reportがfalse (デフォルト)の場合、出力は変更ログの形式になります。
宛先URLの形式は、HOST:PORT:SIDまたはHOST:PORT/SERVICEです。
SQL> lb diff localhost:1521/pdb1 hr2 hr2
lb diff localhost:1521/pdb1 hr2 hr2
Action successfully completed please review created file diffResult.xml
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.6.xsd">
<changeSet author="SKUTZ (generated)" id="1560183964715-1">
<createTable tableName="DATABASECHANGELOG_EXPORT">
<column name="RANK" type="NUMBER">
<constraints nullable="false"/>
</column>
<column name="TYPE" type="VARCHAR2(100 BYTE)">
<constraints primaryKey="true"
primaryKeyName="DATABASECHANGELOG_EXPORT_PK"/>
</column>
<column name="SEQ" type="NUMBER">
<constraints primaryKey="true"
primaryKeyName="DATABASECHANGELOG_EXPORT_PK"/>
</column>
<column name="META" type="CLOB">
<constraints nullable="false"/>
</column>
<column name="OBJECT_NAME" type="VARCHAR2(200 BYTE)"/>
<column name="FILE_NAME" type="VARCHAR2(200 BYTE)"/>
<column name="DEP_NAME" type="VARCHAR2(200 BYTE)"/>
<column name="DEP_COUNT" type="NUMBER"/>
</createTable>
</changeSet>
<changeSet author="SKUTZ (generated)" id="1560183964715-2">
<addColumn tableName="EMPLOYEES">
<column name="FOOBAR" type="NUMBER"/>
</addColumn>
</changeSet>
<changeSet author="SKUTZ (generated)" id="1560183964715-3">
<createIndex indexName="ORDERED_ROWS" tableName="DATABASECHANGELOG_EXPORT">
<column name="RANK"/>
<column name="SEQ"/>
</createIndex>
</changeSet>
<changeSet author="SKUTZ (generated)" id="1560183964715-4">
<createIndex indexName="TYPE_INDEX" tableName="DATABASECHANGELOG_EXPORT">
<column name="TYPE"/>
</createIndex>
</changeSet>
</databaseChangeLog>
SQL> lb diff localhost:1521/pdb1 hr2 hr2 true
lb diff localhost:1521/pdb1 hr2 hr2
Action successfully completed please review created file diffResult.txt
diffResult.txt
Reference Database: HR @ jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) ) (CONNECT_DATA =
(SERVICE_NAME = pdb1) ) ) (Default Schema: HR)
Comparison Database: HR2 @ jdbc:oracle:thin:@localhost:1521/pdb1 (Default Schema: HR2)
Compared Schemas: HR -> HR2
Product Name: EQUAL
Product Version: EQUAL
Missing Catalog(s): NONE
Unexpected Catalog(s): NONE
Changed Catalog(s): NONE
Missing Column(s):
HR.DATABASECHANGELOG_EXPORT.DEP_COUNT
HR.DATABASECHANGELOG_EXPORT.DEP_NAME
HR.DATABASECHANGELOG_EXPORT.FILE_NAME
HR.EMPLOYEES.FOOBAR
HR.DATABASECHANGELOG_EXPORT.META
HR.DATABASECHANGELOG_EXPORT.OBJECT_NAME
HR.DATABASECHANGELOG_EXPORT.RANK
HR.DATABASECHANGELOG_EXPORT.SEQ
HR.DATABASECHANGELOG_EXPORT.TYPE
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):
DATABASECHANGELOG_EXPORT_PK UNIQUE ON HR.DATABASECHANGELOG_EXPORT(SEQ, TYPE)
ORDERED_ROWS ON HR.DATABASECHANGELOG_EXPORT(RANK, SEQ)
TYPE_INDEX ON HR.DATABASECHANGELOG_EXPORT(TYPE)
Unexpected Index(s): NONE
Changed Index(s): NONE
Missing Primary Key(s):
DATABASECHANGELOG_EXPORT_PK on HR.DATABASECHANGELOG_EXPORT(SEQ, TYPE)
Unexpected Primary Key(s): NONE
Changed Primary Key(s): NONE
Missing Sequence(s): NONE
Unexpected Sequence(s): NONE
Changed Sequence(s): NONE
Missing Stored Procedure(s): NONE
Unexpected Stored Procedure(s): NONE
Changed Stored Procedure(s): NONE
Missing Table(s):
DATABASECHANGELOG_EXPORT
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): NONE
Unexpected View(s): NONE
Changed View(s): NONE
liquibase(lb) status <CHANGE LOG>
現在の接続を使用して変更ログのステータスを確認します。これは、変更ログが適用されたかどうか、および変更ログの結果を示します。
SQL> lb status syme_table.xmllb status syme_table.xml1 change
sets have not been applied to HR@jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS =
(PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = pdb1) )
) syme_table.xml::f3d9d927-3c5a-415c-a6fa-1dbc35a9da17::Generated
liquibase(lb) validate <CHANGE LOG>
変更ログが構文的に正しいかどうかを検証します。
SQL> lb validate syme_table.xml
lb validate syme_table.xml
No issues were found in file syme_table.xml, validation passed.
liquibase(lb) changelogsync <CHANGE LOG>
データベースで実行された変更ログ内のすべての変更をファイルにマークするSQL文を書き込みます。
SQL> lb changelogsync syme_table.xml
lb changelogsync syme_table.xml
Action successfully completed please review created file changelogsync_syme_table.xml
liquibase(lb) listlocks <CHANGE LOG>
データベース変更ログを現在ロックしているユーザーがリストされます。
SQL> lb listlocks syme_tbales.xml
lb listlocks syme_tbales.xml
ID USER
!1 Skutz-laptop (10.39.200.228)
liquibase(lb) releaselocks <CHANGE LOG>
データベース変更ログのすべてのロックを解除します。
SQL> lb releaselocks syme_table.xml
lb releaselocks syme_table.xml
Operation completed successfully all locks on syme_table.xml released
liquibase(lb) clearchecksums <CHANGE LOG>
現在のチェックサムをデータベースから削除します。次回の実行では、チェックサムが再計算されます。
SQL> lb clearchecksums syme_table.xml
lb clearchecksums syme_table.xml
Operation completed successfully all checksums cleared for syme_table.xml
liquibase(lb) help <COMMAND>
使用可能なLiquibaseコマンドをリストします。特定のコマンドに関するヘルプを表示するには、オプションなしでコマンドを入力します。
SQL> lb help
lb help
Provides a command line interface to Liquibase change management features from within SQLcl!
Available commands are
liquibase(lb) genobject <object_type> <object_name>
liquibase(lb) genschema
liquibase(lb) gencontrolfile
liquibase(lb) update <CHANGE LOG> {include schema}
liquibase(lb) updatesql <CHANGE LOG> {include schema}
liquibase(lb) rollback <CHANGE LOG> <COUNT>
liquibase(lb) diff <DEST URL> <DEST USER> <DEST PASS> {report}
liquibase(lb) status <CHANGE LOG>
liquibase(lb) validate <CHANGE LOG>
liquibase(lb) changelogsync <CHANGE LOG>
liquibase(lb) listlocks <CHANGE LOG>
liquibase(lb) releaseLocks <CHANGE LOG>
liquibase(lb) clearchecksums <CHANGE LOG>
liquibase(lb) help <COMMAND>
2.5 変更セット
次の表に変更セットを示し、そのそれぞれについて説明します。変更セットの詳細は、<changeSet>タグを参照してください。
変更セット | 説明 |
---|---|
CreateOracleConstraint | SQLから制約を作成します。 |
CreateOracleFunction | SQLから関数を作成します。 |
CreateOracleGrant | SQLから権限を作成します。 |
CreateOraclePackageBody | SQLからパッケージ本体を作成します。 |
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 | Oracleスクリプトを実行します。 |
2.6 Liquibaseを使用した例
SQLclでのLiquibase機能の使用例を次に示します。
オブジェクトの取得とデプロイ
emp表をhrからhr2にデプロイする手順は次のとおりです。:
- hrに接続します。
SQL> connect hr/hr connect hr/hr Connected.
- オブジェクトを取得します。
SQL> lb genobject table emp lb genobject table emp Action successfully completed please review created file emp_table.xml
- 他のユーザーに接続します。
SQL> connect hr2/hr2 connect hr2/hr2 Connected.
- オブジェクトがまだ存在していないことを確認します。
SQL> drop table emp drop table emp Table EMP dropped.
- 現在のスキーマにオブジェクトを作成します。
注意:
スキーマ名が変更されたため、include schemaをfalse
に設定する必要があります。そうしないと、HRスキーマにオブジェクトを作成しようとします。SQL> lb update emp_table.xml false lb update emp_table.xml false Table "EMP" created.
- オブジェクトが作成されたことを検証します。
SQL> desc emp desc emp Name Null? Type ---- ----- ------ ID NUMBER
スキーマの取得とデプロイ
HRスキーマを取得してHR2スキーマで再生成する手順は、次のとおりです。
sql.exe hr/hr@pdb1
SQL> lb genschema lb genschema [Type - TYPE_SPEC]: 142 ms [Type - TYPE_BODY]: 27 ms [Type - SEQUENCE]: 61 ms [Type - CLUSTER]: 25 ms [Type - TABLE]: 447 ms [Type - MATERIALIZED_VIEW_LOG]: 18 ms [Type - MATERIALIZED_VIEW]: 6 ms [Type - VIEW]: 143 ms [Type - REF_CONSTRAINT]: 261 ms [Type - DIMENSION]: 17 ms [Type - FUNCTION]: 63 ms [Type - PROCEDURE]: 66 ms [Type - PACKAGE_SPEC]: 29 ms [Type - DB_LINK]: 19 ms [Type - SYNONYM]: 19 ms [Type - INDEX]: 199 ms [Type - TRIGGER]: 39 ms [Type - PACKAGE_BODY]: 39 ms [Method loadCaptureTable]: 1620 ms [Method parseCaptureTableRecords]: 6433 ms [Method sortCaptureTable]: 25 ms [Method createExportChangeLogs]: 3 ms Export Flags Used: Export Grants false Export Synonyms false SQL> connect system/sparrow connect system/sparrow Connected. 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> connect hr2/hr2 connect hr2/hr2 Connected. SQL> lb update controller.xml lb update controller.xml Sequence "DEPARTMENTS_SEQ" created. Sequence "LOCATIONS_SEQ" created. Sequence "EMPLOYEES_SEQ" created. Table "COUNTRIES" created. Table "REGIONS" created. Table "LOCATIONS" created. Table "DEPARTMENTS" created. Table "JOBS" created. Table "EMPLOYEES" created. Table "JOB_HISTORY" created. Table "Syme" created. Table "FOO" created. View "EMP_DETAILS_VIEW" created. Table "COUNTRIES" altered. Table "LOCATIONS" altered. Table "DEPARTMENTS" altered. Table "EMPLOYEES" altered. Table "EMPLOYEES" altered. Table "EMPLOYEES" altered. Table "DEPARTMENTS" altered. Table "JOB_HISTORY" altered. Table "JOB_HISTORY" altered. Table "JOB_HISTORY" altered. Function FUNCTION1 compiled Procedure SECURE_DML compiled Procedure ADD_JOB_HISTORY compiled Procedure PROCEDURE1 compiled Index "LOC_COUNTRY_IX" created. Index "JHIST_JOB_IX" created. Index "LOC_STATE_PROVINCE_IX" create. Index "EMP_DEPARTMENT_IX" created. Index "JHIST_EMPLOYEE_IX" created. Index "LOC_CITY_IX" created. Index "JHIST_DEPARTMENT_IX" created. Index "EMP_JOB_IX" created. Index "EMP_MANAGER_IX" created. Index "EMP_NAME_IX" created. Index "DEPT_LOCATION_IX" created. Trigger SECURE_EMPLOYEES compiled Trigger "SECURE_EMPLOYEES" altered. Trigger UPDATE_JOB_HISTORY compiled
マスター制御ファイルの生成
SQL> lb gencontrolfile lb gencontrolfile Action successfully completed please review created file controller.xml SQL> !type controller.xml !type 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>
スキーマの取得とデプロイおよびその後のアップグレードと再デプロイ
- HRスキーマをHR2スキーマに移行し、HRスキーマを変更してHR2を更新します。
Drop/create HR2 user as system SQL> connect system/sparrow connect system/sparrow Connected. 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> !mkdir v1 !mkdir v1 SQL> cd v1 cd v1
SQL> connect hr/hr connect hr/hr Connected. SQL> lb genschema lb genschema [Type - TYPE_SPEC]: 163 ms [Type - TYPE_BODY]: 30 ms [Type - SEQUENCE]: 57 ms [Type - CLUSTER]: 27 ms [Type - TABLE]: 311 ms [Type - MATERIALIZED_VIEW_LOG]: 19 ms [Type - MATERIALIZED_VIEW]: 8 ms [Type - VIEW]: 155 ms [Type - REF_CONSTRAINT]: 293 ms [Type - DIMENSION]: 29 ms [Type - FUNCTION]: 77 ms [Type - PROCEDURE]: 65 ms [Type - PACKAGE_SPEC]: 31 ms [Type - DB_LINK]: 13 ms [Type - SYNONYM]: 18 ms [Type - INDEX]: 188 ms [Type - TRIGGER]: 41 ms [Type - PACKAGE_BODY]: 37 ms [Method loadCaptureTable]: 1562 ms [Method parseCaptureTableRecords]: 8437 ms [Method sortCaptureTable]: 37 ms [Method createExportChangeLogs]: 4 ms Export Flags Used: Export Grants false Export Synonyms false
- HRスキーマを変更します。
SQL> ALTER TABLE COUNTRIES ADD (COLUMN1 VARCHAR2(20) ); Table COUNTRIES altered. SQL> ALTER TABLE "Syme" ADD (COLUMN1 VARCHAR2(20) ); Table "Syme" altered. SQL> ALTER TABLE "Syme" ADD (COLUMN2 VARCHAR2(20) ); Table "Syme" altered. SQL> ALTER TABLE "Syme" ADD (COLUMN3 VARCHAR2(20) ); Table "Syme" altered. SQL> CREATE VIEW VIEW1 AS SELECT * FROM "Syme"; View VIEW1 created. SQL> CREATE OR REPLACE PROCEDURE PROCEDURE2 (PARAM1 IN VARCHAR2,PARAM2 IN VARCHAR2,PARAM3 IN VARCHAR2, PARAM4 IN VARCHAR 2) AS BEGIN NULL; END PROCEDURE2; Procedure PROCEDURE2 compiled
- v2ディレクトリに変更を加えます。
SQL> cd .. cd .. SQL> !mkdir v2 !mkdir v2 SQL> cd v2 cd v2 S
- HRスキーマのv2をエクスポートします。
SQL> lb genschema lb genschema [Type - TYPE_SPEC]: 44 ms [Type - TYPE_BODY]: 30 ms [Type - SEQUENCE]: 51 ms [Type - CLUSTER]: 26 ms [Type - TABLE]: 447 ms [Type - MATERIALIZED_VIEW_LOG]: 13 ms [Type - MATERIALIZED_VIEW]: 6 ms [Type - VIEW]: 110 ms [Type - REF_CONSTRAINT]: 258 ms [Type - DIMENSION]: 16 ms [Type - FUNCTION]: 56 ms [Type - PROCEDURE]: 62 ms [Type - PACKAGE_SPEC]: 29 ms [Type - DB_LINK]: 12 ms [Type - SYNONYM]: 13 ms [Type - INDEX]: 205 ms [Type - TRIGGER]: 39 ms [Type - PACKAGE_BODY]: 34 ms [Method loadCaptureTable]: 1451 ms [Method parseCaptureTableRecords]: 7015 ms [Method sortCaptureTable]: 23 ms [Method createExportChangeLogs]: 4 ms Export Flags Used: Export Grants false Export Synonyms false
- v1をインポートするには、v1ディレクトリに戻ってHR2として接続します。
SQL> cd ../v1 cd ../v1 SQL> connect hr2/hr2 connect hr2/hr2 Connected.
- 次に、HR2スキーマに取得をインポートします。
SQL> lb update controller.xml lb update controller.xml Sequence "DEPARTMENTS_SEQ" created. Sequence "LOCATIONS_SEQ" created. Sequence "EMPLOYEES_SEQ" created. Table "COUNTRIES" created. Comment created. Comment created. Comment created. Comment created. Table "REGIONS" created. Table "LOCATIONS" created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Table "DEPARTMENTS" created. Comment created. Comment created. Comment created. Comment created. Comment created. Table "JOBS" created. Comment created. Comment created. Comment created. Comment created. Comment created. Table "EMPLOYEES" created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Table "JOB_HISTORY" created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Table "Syme" created. Table "FOO" created. View "EMP_DETAILS_VIEW" created. Table "COUNTRIES" altered. Table "LOCATIONS" altered. Table "DEPARTMENTS" altered. Table "EMPLOYEES" altered. Table "EMPLOYEES" altered. Table "EMPLOYEES" altered. Table "DEPARTMENTS" altered. Table "JOB_HISTORY" altered. Table "JOB_HISTORY" altered. Table "JOB_HISTORY" altered. Function FUNCTION1 compiled Procedure SECURE_DML compiled Procedure ADD_JOB_HISTORY compiled Procedure PROCEDURE1 compiled Index "LOC_COUNTRY_IX" created. Index "JHIST_JOB_IX" created. Index "LOC_STATE_PROVINCE_IX" created. Index "EMP_DEPARTMENT_IX" created. Index "JHIST_EMPLOYEE_IX" created. Index "LOC_CITY_IX" created. Index "JHIST_DEPARTMENT_IX" created. Index "EMP_JOB_IX" created. Index "EMP_MANAGER_IX" created. Index "EMP_NAME_IX" created. Index "DEPT_LOCATION_IX" created. Trigger SECURE_EMPLOYEES compiled Trigger "SECURE_EMPLOYEES" altered. Trigger UPDATE_JOB_HISTORY compiled
- 表を確認して検証します。
SQL> desc "Syme" desc "Syme" Name Null? Type ---- ----- ------ ID NUMBER SQL> desc countries desc countries Name Null? Type ------------ -------- ------------ COUNTRY_ID NOT NULL CHAR(2) COUNTRY_NAME VARCHAR2(40) REGION_ID NUMBER
- v2に切り替えて、取得をインポートします。
SQL> cd ../v2 cd ../v2 SQL> lb update controller.xml lb update controller.xml Table "HR2"."COUNTRIES" altered. Table "HR2"."COUNTRIES" altered. Comment created. Comment created. Comment created. Comment created. Table "HR2"."LOCATIONS" altered. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Table "HR2"."DEPARTMENTS" altered. Table "HR2"."DEPARTMENTS" altered. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Table "HR2"."EMPLOYEES" altered. Table "HR2"."EMPLOYEES" altered. Table "HR2"."EMPLOYEES" altered. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Table "HR2"."JOB_HISTORY" altered. Table "HR2"."JOB_HISTORY" altered. Table "HR2"."JOB_HISTORY" altered. Comment created. Comment created. Comment created. Comment created. Comment created. Comment created. Table "HR2"."Syme" altered. Table "HR2"."Syme" altered. Table "HR2"."Syme" altered. View "VIEW1" created. Table "COUNTRIES" altered. Table "LOCATIONS" altered. Table "DEPARTMENTS" altered. Table "EMPLOYEES" altered. Table "EMPLOYEES" altered. Table "EMPLOYEES" altered. Table "DEPARTMENTS" altered. Table "JOB_HISTORY" altered. Table "JOB_HISTORY" altered. Table "JOB_HISTORY" altered. Function FUNCTION1 compiled Procedure SECURE_DML compiled Procedure ADD_JOB_HISTORY compiled Procedure PROCEDURE1 compiled Procedure PROCEDURE2 compiled Trigger SECURE_EMPLOYEES compiled Trigger UPDATE_JOB_HISTORY compiled
- v2にいることを確認します。
SQL> desc "Syme" desc "Syme" Name Null? Type ------- ----- ------------ ID NUMBER COLUMN1 VARCHAR2(20) COLUMN2 VARCHAR2(20) COLUMN3 VARCHAR2(20) SQL> desc countries desc countries Name Null? Type ------------ -------- ------------ COUNTRY_ID NOT NULL CHAR(2) COUNTRY_NAME VARCHAR2(40) REGION_ID NUMBER COLUMN1 VARCHAR2(20)