You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Artifactory 6.23.42至7.41.14时Derby数据库v60迁移失败

Artifactory Pro 6.23.42 升级至7.41.14(Derby数据库)失败解决

环境信息

  • CentOS 7.9.2009
  • Derby数据库
  • 使用RPM包升级:
    • 原版本:jfrog-artifactory-pro-6.23.42.rpm
    • 目标版本:jfrog-artifactory-pro-7.41.14.rpm(为规避CentOS7对JDK17的兼容性问题,选择支持JDK11的最后一个版本)

升级操作步骤

  1. 停止Artifactory服务:
    systemctl stop artifactory
    
  2. 执行RPM升级:
    yum update jfrog-artifactory-pro-7.41.14.rpm
    
  3. 启动服务:
    systemctl start artifactory
    

报错现象

  • migration.log未记录错误信息
  • 数据库迁移执行到v60转换器时失败,核心错误:
    Failed to execute query: 'ALTER TABLE' cannot be performed on 'REPLICATION_ERRORS' because it does not exist.
    
  • artifactory-service.log中完整报错(翻译后):
    2023-04-06T17:18:15.512Z [jfrt ] [INFO ] [af075423d2f70fd8] [o.j.c.AbstractDbConverter:51  ] [Catalina-utility-2  ] - 转换器`v59`执行完成,状态为`SKIPPED`。
    2023-04-06T17:18:15.531Z [jfrt ] [INFO ] [af075423d2f70fd8] [o.j.c.AbstractDbConverter:36  ] [Catalina-utility-2  ] - 开始执行转换器v60,描述:"为表`replication_errors`添加列`event_category`。"
    2023-04-06T17:18:15.532Z [jfrt ] [INFO ] [af075423d2f70fd8] [j.c.u.PreDefinedConverters:398] [Catalina-utility-2  ] - 在/templates/default/add_column.tpl查找默认数据库转换模板
    2023-04-06T17:18:15.534Z [jfrt ] [INFO ] [af075423d2f70fd8] [j.c.u.PreDefinedConverters:404] [Catalina-utility-2  ] - 在/templates/derby/add_column.tpl查找Derby数据库专属转换模板
    2023-04-06T17:18:15.539Z [jfrt ] [WARN ] [af075423d2f70fd8] [o.j.s.u.DbStatementUtils:62   ] [Catalina-utility-2  ] - 执行查询失败:'ALTER TABLE'无法执行于'REPLICATION_ERRORS',因为该表不存在。
    ALTER TABLE replication_errors ADD COLUMN event_category VARCHAR(225)
    2023-04-06T17:18:15.540Z [jfrt ] [INFO ] [af075423d2f70fd8] [o.j.c.AbstractDbConverter:51  ] [Catalina-utility-2  ] - 转换器`v60`执行完成,状态为`FAILED`。
    2023-04-06T17:18:15.552Z [jfrt ] [ERROR] [af075423d2f70fd8] [d.c.m.ConverterManagerImpl:278] [Catalina-utility-2  ] - 转换失败。请分析错误后重新启动Artifactory。错误信息:Failed to convert v60 : Failed to convert v60
    2023-04-06T17:18:15.557Z [jfrt ] [ERROR] [af075423d2f70fd8] [tifactoryHomeConfigListener:55] [Catalina-utility-2  ] - 初始化Artifactory主目录失败,捕获异常:
    java.lang.IllegalStateException: Failed to convert v60 : Failed to convert v60
           at org.artifactory.storage.db.converter.markers.ConverterManagerImpl.handleException(ConverterManagerImpl.java:281)
           at org.artifactory.storage.db.converter.markers.ConverterManagerImpl.serviceConvert(ConverterManagerImpl.java:238)
           at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
           at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
           at org.artifactory.storage.db.converter.markers.ConverterManagerImpl.convertDatabase(ConverterManagerImpl.java:156)
           at org.artifactory.lifecycle.storage.db.init.PostDbSchemaInitializationManager.convertAndInit(PostDbSchemaInitializationManager.java:61)
           at org.artifactory.lifecycle.storage.db.init.HaInitLock.runInsideInitLockIfNeeded(HaInitLock.java:110)
           at org.artifactory.lifecycle.storage.db.init.PostDbSchemaInitializationManager.init(PostDbSchemaInitializationManager.java:50)
           at org.artifactory.lifecycle.webapp.servlet.BasicConfigurationManager.initArtifactoryInstallation(BasicConfigurationManager.java:154)
           at org.artifactory.lifecycle.webapp.servlet.BasicConfigurationManager.initialize(BasicConfigurationManager.java:126)
           at org.artifactory.lifecycle.webapp.servlet.ArtifactoryHomeConfigListener.initBasicConfigManager(ArtifactoryHomeConfigListener.java:61)
           at org.artifactory.lifecycle.webapp.servlet.ArtifactoryHomeConfigListener.contextInitialized(ArtifactoryHomeConfigListener.java:53)
           at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4768)
           at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5230)
           at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
           at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726)
           at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:698)
           at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:696)
           at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:690)
           at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1889)
           at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
           at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
           at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
           at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
           at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
           at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
           at java.base/java.lang.Thread.run(Thread.java:829)
    Caused by: org.jfrog.converter.DbConverterRuntimeException: Failed to convert v60
           at org.artifactory.storage.db.DatabaseConverterAdapter.convert(DatabaseConverterAdapter.java:49)
           at org.artifactory.storage.db.converter.markers.ConverterManagerImpl.serviceConvert(ConverterManagerImpl.java:234)
           ... 25 common frames omitted
    Caused by: org.jfrog.converter.DbConverterExecutionException: Failed to convert v60
           at org.jfrog.converter.util.DbConverterUtil.executeConverters(DbConverterUtil.java:79)
           at org.jfrog.converter.util.DbConverterUtil.calculateAndExecute(DbConverterUtil.java:114)
           at org.artifactory.storage.db.DatabaseConverterAdapter.convert(DatabaseConverterAdapter.java:44)
           ... 26 common frames omitted
    Caused by: org.jfrog.converter.DbConverterExecutionException: Failed to convert v60
           at org.jfrog.converter.predefined.PreDefinedDbConverter.executeConverter(PreDefinedDbConverter.java:37)
           at org.jfrog.converter.AbstractDbConverter.convert(AbstractDbConverter.java:39)
           at org.jfrog.converter.util.DbConverterUtil.executeConverters(DbConverterUtil.java:75)
           ... 28 common frames omitted
    Caused by: java.sql.SQLSyntaxErrorException: 'ALTER TABLE'无法执行于'REPLICATION_ERRORS',因为该表不存在。
           at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
           at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
           at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
           at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
           at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
           at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
           at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
           at org.apache.derby.impl.jdbc.EmbedStatement.executeLargeUpdate(Unknown Source)
           at org.apache.derby.impl.jdbc.EmbedStatement.executeUpdate(Unknown Source)
           at com.zaxxer.hikari.pool.ProxyStatement.executeUpdate(ProxyStatement.java:120)
           at com.zaxxer.hikari.pool.HikariProxyStatement.executeUpdate(HikariProxyStatement.java)
           at org.jfrog.storage.dbtype.DefaultDbTypeHelper.executeUpdateQuery(DefaultDbTypeHelper.java:68)
           at org.jfrog.storage.util.DbStatementUtils.executeSqlStream(DbStatementUtils.java:57)
           at org.jfrog.converter.predefined.PreDefinedDbConverter.executeConverter(PreDefinedDbConverter.java:35)
           ... 30 common frames omitted
    Caused by: org.apache.derby.iapi.error.StandardException: 'ALTER TABLE'无法执行于'REPLICATION_ERRORS',因为该表不存在。
           at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
           at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
           at org.apache.derby.impl.sql.compile.DDLStatementNode.justGetDescriptor(Unknown Source)
           at org.apache.derby.impl.sql.compile.DDLStatementNode.getTableDescriptor(Unknown Source)
           at org.apache.derby.impl.sql.compile.DDLStatementNode.getTableDescriptor(Unknown Source)
           at org.apache.derby.impl.sql.compile.AlterTableNode.bindStatement(Unknown Source)
           at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
           at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
           at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
           ... 38 common frames omitted
    2023-04-06T17:18:15.577Z [jfrt ] [ERROR] [af075423d2f70fd8] [actoryContextConfigListener:90] [Catalina-utility-2  ] - 初始化Artifactory上下文失败:Artifactory主目录未初始化。
    

问题原因

在Artifactory 6.x版本中,若从未配置过仓库复制功能,系统不会自动创建REPLICATION_ERRORS表。但7.x版本的升级脚本默认认为该表存在,尝试执行ALTER TABLE添加字段时触发错误,导致迁移中断。

解决步骤

  1. 停止Artifactory服务(若当前处于启动失败状态,确保服务已停止):
    systemctl stop artifactory
    
  2. 连接到Derby数据库:
    cd /var/opt/jfrog/artifactory/bin
    ./ij
    
    在Derby的交互式工具中执行连接命令:
    connect 'jdbc:derby:/var/opt/jfrog/artifactory/data/db/artifactory';
    
  3. 创建REPLICATION_ERRORS表,使用6.x版本的标准表结构:
    CREATE TABLE REPLICATION_ERRORS (
      ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
      REPO_PATH VARCHAR(1024) NOT NULL,
      ERROR_TYPE VARCHAR(255) NOT NULL,
      ERROR_MESSAGE CLOB,
      CREATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
      NODE_ID VARCHAR(255),
      CONSTRAINT REPLICATION_ERRORS_PK PRIMARY KEY (ID)
    );
    
  4. 退出Derby交互式工具:
    exit;
    
  5. 启动Artifactory服务:
    systemctl start artifactory
    
  6. 检查/var/opt/jfrog/artifactory/logs/artifactory-service.log,确认数据库迁移完成,服务正常启动。

内容的提问来源于stack exchange,提问作者8None1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:22:03