Liquibase Db2 配置
Liquibase Db2 configruation
我正在尝试让 liquibase 3.10.2 在 ubuntu 上首次与 Db2 仓库一起工作。
按照教程示例,H2“liquibase 更新”示例工作正常。
使用指定的 jars 和下面的 url 字符串,与 dbeaver 一起工作正常,但将其转换为 liquibase 会出现以下错误。
driver: com.ibm.db2.jcc.DB2Driver
#jars in /test1/sql
classpath: db2jcc4.jar:db2jcc_license_cu.jar
databaseClass: com.ibm.db2.jcc.DB2Driver
# Enter the path for your changelog file.
changeLogFile: samplechangelog.h2.sql
#### Enter the Target database 'url' information ####
url: jdbc:db2://192.168.72.143:50000/bludb
# Enter the username for your Target database.
username: bluadmin
# Enter the password for your Target database.
password: bluadmin
#### Enter the Source Database 'referenceUrl' information ####
## The source database is the baseline or reference against which your target database is compared for diff/diffchangelog commands.
# Enter URL for the source database
referenceUrl: jdbc:db2://192.168.72.143:50000/bludb
# Enter the username for your source database
referenceUsername: bluadmin
# Enter the password for your source database
referencePassword: bluadmin
09:23:16.261 ERROR [liquibase.integration.commandline.Main]: Unexpected error running Liquibase: java.lang.ClassCastException: class com.ibm.db2.jcc.DB2Driver cannot be cast to class liquibase.database.Database (com.ibm.db2.jcc.DB2Driver is in unnamed module of loader java.net.URLClassLoader @242aa8d9; liquibase.database.Database is in unnamed module of loader 'app')
liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: java.lang.ClassCastException: class com.ibm.db2.jcc.DB2Driver cannot be cast to class liquibase.database.Database (com.ibm.db2.jcc.DB2Driver is in unnamed module of loader java.net.URLClassLoader @242aa8d9; liquibase.database.Database is in unnamed module of loader 'app')
at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:125)
at liquibase.integration.commandline.Main.doMigration(Main.java:1341)
at liquibase.integration.commandline.Main.run(Main.java:303)
at liquibase.integration.commandline.Main.main(Main.java:159)
Caused by: liquibase.exception.DatabaseException: java.lang.ClassCastException: class com.ibm.db2.jcc.DB2Driver cannot be cast to class liquibase.database.Database (com.ibm.db2.jcc.DB2Driver is in unnamed module of loader java.net.URLClassLoader @242aa8d9; liquibase.database.Database is in unnamed module of loader 'app')
at liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:259)
at liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:149)
at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:90)
... 3 common frames omitted
Caused by: java.lang.ClassCastException: class com.ibm.db2.jcc.DB2Driver cannot be cast to class liquibase.database.Database (com.ibm.db2.jcc.DB2Driver is in unnamed module of loader java.net.URLClassLoader @242aa8d9; liquibase.database.Database is in unnamed module of loader 'app')
at liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:187)
... 5 common frames omitted
更新的附加信息:
(1) 导致所示错误的完整命令行是什么?
我正在发布 h2 教程中引用的简单示例
jarrod@ubuntu:~/liquibase3.10.2/test1/sql$ ls -al
total 6424
drwxrwxr-x 2 jarrod jarrod 4096 Aug 1 08:50 .
drwxrwxr-x 4 jarrod jarrod 4096 Aug 1 08:50 ..
-rw-r--r-- 1 jarrod jarrod 218 Jul 14 05:49 blankchangelog.h2.sql
-r--r--r-- 1 jarrod jarrod 6550443 Jun 11 2019 db2jcc4.jar
-r--r--r-- 1 jarrod jarrod 1529 Jun 11 2019 db2jcc_license_cu.jar
-rw-r--r-- 1 jarrod jarrod 2678 Aug 1 09:23 liquibase.properties
-rw-r--r-- 1 jarrod jarrod 456 Jul 14 05:49 samplechangelog.h2.sql
jarrod@ubuntu:~/liquibase3.10.2/test1/sql$ liquibase update
15:05:37.848 DEBUG [liquibase.resource.ClassLoaderResourceAccessor]: Opening jar:file:/home/jarrod/liquibase3.10.2/liquibase.jar!/liquibase.build.properties as liquibase.build.properties
15:05:37.868 INFO [liquibase.integration.commandline.Main]: ####################################################
## _ _ _ _ ##
....
(2) 更改日志文件内容是什么
这与示例 h2 更改日志相同;没有变化。
jarrod@ubuntu:~/liquibase3.10.2/test1/sql$ cat samplechangelog.h2.sql
--liquibase formatted sql
--changeset your.name:1
create table person (
id int primary key,
name varchar(50) not null,
address1 varchar(50),
address2 varchar(50),
city varchar(30)
)
--changeset your.name:2
create table company (
id int primary key,
name varchar(50) not null,
address1 varchar(50),
address2 varchar(50),
city varchar(30)
)
--changeset other.dev:3
alter table person add column country varchar(2)
jarrod@ubuntu:~/liquibase3.10.2/test1/sql$
(3) 您使用的是哪个 Db2 驱动程序版本?
捆绑包名称:IBM JCC JDBC 4 驱动程序
(4) 什么确切的查询在 dbeaver 中有效但在 liquibase 中失败?
None 目前,只是试图让连接正常工作。
我在 Dbeaver 中有一个工作连接,使用相同的 jdbc 驱动程序、相同的 class 名称、相同的服务器、数据库、用户名、密码和 URL 模板。
我真的很高兴收到 SQL 错误!
liquibase 3.10.2 对我来说似乎可以与 Db2-LUW 一起使用。
尝试进行这些更改,这些更改记录在文本文件 GETTING_STARTED.txt
.
要么将 Db2 jar 文件移动到 liquibase 的 lib
子目录中,要么更改 liquibase 使用的 CLASSPATH。对于 Db2-LUW,这些文件是:lib/db2jcc4.jar , lib/db2jcc.jar , lib/db2jcc_license_cu.jar
。你的问题表明你将这些文件复制到 liquibase 目录而不是 liquibase lib 子目录。
Db2-LUW 将拒绝 H2 示例 changeLogFile 中的语法,因为 Db2-LUW 要求主键列不为空。在示例文件中,您可以将所有表的 id int primary key
更改为 id int not null primary key
,以避免 SQLCODE -542.
我正在尝试让 liquibase 3.10.2 在 ubuntu 上首次与 Db2 仓库一起工作。 按照教程示例,H2“liquibase 更新”示例工作正常。
使用指定的 jars 和下面的 url 字符串,与 dbeaver 一起工作正常,但将其转换为 liquibase 会出现以下错误。
driver: com.ibm.db2.jcc.DB2Driver
#jars in /test1/sql
classpath: db2jcc4.jar:db2jcc_license_cu.jar
databaseClass: com.ibm.db2.jcc.DB2Driver
# Enter the path for your changelog file.
changeLogFile: samplechangelog.h2.sql
#### Enter the Target database 'url' information ####
url: jdbc:db2://192.168.72.143:50000/bludb
# Enter the username for your Target database.
username: bluadmin
# Enter the password for your Target database.
password: bluadmin
#### Enter the Source Database 'referenceUrl' information ####
## The source database is the baseline or reference against which your target database is compared for diff/diffchangelog commands.
# Enter URL for the source database
referenceUrl: jdbc:db2://192.168.72.143:50000/bludb
# Enter the username for your source database
referenceUsername: bluadmin
# Enter the password for your source database
referencePassword: bluadmin
09:23:16.261 ERROR [liquibase.integration.commandline.Main]: Unexpected error running Liquibase: java.lang.ClassCastException: class com.ibm.db2.jcc.DB2Driver cannot be cast to class liquibase.database.Database (com.ibm.db2.jcc.DB2Driver is in unnamed module of loader java.net.URLClassLoader @242aa8d9; liquibase.database.Database is in unnamed module of loader 'app')
liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: java.lang.ClassCastException: class com.ibm.db2.jcc.DB2Driver cannot be cast to class liquibase.database.Database (com.ibm.db2.jcc.DB2Driver is in unnamed module of loader java.net.URLClassLoader @242aa8d9; liquibase.database.Database is in unnamed module of loader 'app')
at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:125)
at liquibase.integration.commandline.Main.doMigration(Main.java:1341)
at liquibase.integration.commandline.Main.run(Main.java:303)
at liquibase.integration.commandline.Main.main(Main.java:159)
Caused by: liquibase.exception.DatabaseException: java.lang.ClassCastException: class com.ibm.db2.jcc.DB2Driver cannot be cast to class liquibase.database.Database (com.ibm.db2.jcc.DB2Driver is in unnamed module of loader java.net.URLClassLoader @242aa8d9; liquibase.database.Database is in unnamed module of loader 'app')
at liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:259)
at liquibase.database.DatabaseFactory.openDatabase(DatabaseFactory.java:149)
at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:90)
... 3 common frames omitted
Caused by: java.lang.ClassCastException: class com.ibm.db2.jcc.DB2Driver cannot be cast to class liquibase.database.Database (com.ibm.db2.jcc.DB2Driver is in unnamed module of loader java.net.URLClassLoader @242aa8d9; liquibase.database.Database is in unnamed module of loader 'app')
at liquibase.database.DatabaseFactory.openConnection(DatabaseFactory.java:187)
... 5 common frames omitted
更新的附加信息:
(1) 导致所示错误的完整命令行是什么? 我正在发布 h2 教程中引用的简单示例
jarrod@ubuntu:~/liquibase3.10.2/test1/sql$ ls -al
total 6424
drwxrwxr-x 2 jarrod jarrod 4096 Aug 1 08:50 .
drwxrwxr-x 4 jarrod jarrod 4096 Aug 1 08:50 ..
-rw-r--r-- 1 jarrod jarrod 218 Jul 14 05:49 blankchangelog.h2.sql
-r--r--r-- 1 jarrod jarrod 6550443 Jun 11 2019 db2jcc4.jar
-r--r--r-- 1 jarrod jarrod 1529 Jun 11 2019 db2jcc_license_cu.jar
-rw-r--r-- 1 jarrod jarrod 2678 Aug 1 09:23 liquibase.properties
-rw-r--r-- 1 jarrod jarrod 456 Jul 14 05:49 samplechangelog.h2.sql
jarrod@ubuntu:~/liquibase3.10.2/test1/sql$ liquibase update
15:05:37.848 DEBUG [liquibase.resource.ClassLoaderResourceAccessor]: Opening jar:file:/home/jarrod/liquibase3.10.2/liquibase.jar!/liquibase.build.properties as liquibase.build.properties
15:05:37.868 INFO [liquibase.integration.commandline.Main]: ####################################################
## _ _ _ _ ##
....
(2) 更改日志文件内容是什么 这与示例 h2 更改日志相同;没有变化。
jarrod@ubuntu:~/liquibase3.10.2/test1/sql$ cat samplechangelog.h2.sql
--liquibase formatted sql
--changeset your.name:1
create table person (
id int primary key,
name varchar(50) not null,
address1 varchar(50),
address2 varchar(50),
city varchar(30)
)
--changeset your.name:2
create table company (
id int primary key,
name varchar(50) not null,
address1 varchar(50),
address2 varchar(50),
city varchar(30)
)
--changeset other.dev:3
alter table person add column country varchar(2)
jarrod@ubuntu:~/liquibase3.10.2/test1/sql$
(3) 您使用的是哪个 Db2 驱动程序版本?
捆绑包名称:IBM JCC JDBC 4 驱动程序
(4) 什么确切的查询在 dbeaver 中有效但在 liquibase 中失败?
None 目前,只是试图让连接正常工作。 我在 Dbeaver 中有一个工作连接,使用相同的 jdbc 驱动程序、相同的 class 名称、相同的服务器、数据库、用户名、密码和 URL 模板。
我真的很高兴收到 SQL 错误!
liquibase 3.10.2 对我来说似乎可以与 Db2-LUW 一起使用。
尝试进行这些更改,这些更改记录在文本文件 GETTING_STARTED.txt
.
要么将 Db2 jar 文件移动到 liquibase 的 lib
子目录中,要么更改 liquibase 使用的 CLASSPATH。对于 Db2-LUW,这些文件是:lib/db2jcc4.jar , lib/db2jcc.jar , lib/db2jcc_license_cu.jar
。你的问题表明你将这些文件复制到 liquibase 目录而不是 liquibase lib 子目录。
Db2-LUW 将拒绝 H2 示例 changeLogFile 中的语法,因为 Db2-LUW 要求主键列不为空。在示例文件中,您可以将所有表的 id int primary key
更改为 id int not null primary key
,以避免 SQLCODE -542.