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)