当我尝试从 DB2 数据库生成 SQL 数据时,遇到了 Java 堆空间问题。大约有 25 张表,大约有 1000 条记录。
我使用以下脚本生成变更集数据:
C:liquibase-3.0.2-bin>liquibase --driver=com.ibm.db2.jcc.DB2Driver
--classpath="C:db2jcc.jar"
--changeLogFile="C:Liquibase Releaseliqui_MYDB_MYSCHEMA_Data.xml"
--url="jdbc:db2://__ip__here__:9008/MYDB"
--username="user"
--password="12345"
--defaultSchemaName="MYSCHEMA"
--diffTypes=data
generateChangeLog
我试图通过在 liquibase .bat 文件中设置JAVA_OPTS来增加内存,但这并没有产生任何解决方案:
-
set JAVA_OPTS="-XX:MaxPermSize=1024m"
-
set JAVA_OPTS="-Xms512m -Xmx1024m"
你不应该遇到MaxPermSize,所以只需要设置一个更大的Xmx标志。
添加 --dataOutputDirectory=DIR_YOU_WANT
标志也可能有所帮助。这将导致Liquibase以CSV文件的形式输出数据,这将减少创建mmemory密集型。生成的 XML+CSV 通常也比大型 XML 文件更易于管理
像这样:
C:liquibase-3.0.2-bin>liquibase
--driver=com.ibm.db2.jcc.DB2Driver
--classpat h="C:db2jcc.jar"
--changeLogFile="C:Liquibase Releaseliqui_MYDB_MYSCHEMA_Data.xml"
--url="jdbc:db2://__ip__here__:9008/MYDB"
--username="user"
--password="12345"
--defaultSchemaName="MYSCHEMA"
--diffTypes=data
--dataOutputDirectory=C:Liquibase Releaseliqui_MYDB_MYSCHEMA_Data.out
generateChangeLog
此外,您可以直接调用 jar 文件,在这种情况下,您只需添加 -Xmx2g 属性即可。 -Xmx2g - 2千兆字节内存
换句话说:
C:liquibase-3.0.2-bin>java -Xmx2g -jar liquibase.jar
--classpath h="C:db2jcc.jar"
--changeLogFile="C:Liquibase Releaseliqui_MYDB_MYSCHEMA_Data.xml"
--url="jdbc:db2://__ip__here__:9008/MYDB"
--username="user"
--password="12345"
--defaultSchemaName="MYSCHEMA"
--diffTypes=data
--dataOutputDirectory=C:Liquibase Releaseliqui_MYDB_MYSCHEMA_Data.out
generateChangeLog
此外,您可能会收到有关数据库驱动程序的错误,因此您应该添加类似 --driver=com.ibm.db2.jcc.DB2Driver (用于 oracle)