# Sonatype Nexus Repository 3.98.0 Released

**URL:** <https://community.sonatype.com/t/sonatype-nexus-repository-3-98-0-released/16752>\
**Category:** Sonatype Nexus Repository\
**Created:** [November 3, 2026, 5:33pm UTC](https://community.sonatype.com/t/sonatype-nexus-repository-3-98-0-released/16752 "2026-11-03T17:33:34Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jeevan\_Padavala](https://avatars.discourse-cdn.com/v4/letter/j/c89c15/32.png) [@Jeevan\_Padavala](https://community.sonatype.com/u/Jeevan_Padavala)\
**Post date:** [November 3, 2026, 5:33pm UTC](https://community.sonatype.com/t/sonatype-nexus-repository-3-98-0-released/16752/1 "2026-11-03T17:33:34Z")

</div>

Sonatype Nexus Repository 3.98.0 is nowavailable.

This release introduces the Nexus One UI as the default experience for all users, with streamlined navigation and system health status in the global header. It also extends the Community Edition telemetry grace period and improves Repository Firewall’s component identification and container scanning accuracy.

See the [Sonatype Nexus Repository 3.98.0 Release Notes](https://help.sonatype.com/en/sonatype-nexus-repository-3-98-0-release-notes.html) for full details.

---

<div class="post-metadata">

**Author:** ![Lenny\_Primak](https://avatars.discourse-cdn.com/v4/letter/l/3da27b/32.png) [@Lenny\_Primak](https://community.sonatype.com/u/Lenny_Primak)\
**Post date:** [November 4, 2026, 2:35pm UTC](https://community.sonatype.com/t/sonatype-nexus-repository-3-98-0-released/16752/2 "2026-11-04T14:35:43Z")

</div>

Hi,

Upgrade to 3.98.0 failed from 3.97.x

I am running on Postgres, and migration either did not run.

```auto
2026-11-03 18:29:56,994-0600 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.extender.NexusLifecycleManager - Start RESTORE

2026-11-03 18:29:56,995-0600 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.extender.NexusLifecycleManager - Start UPGRADE

2026-11-03 18:29:57,450-0600 INFO [jetty-main-1] *SYSTEM com.sonatype.nexus.blobstore.gcloud.internal.migration.GoogleCloudAccountKeyMigrationStep_2_173 - Migrated 0 of 0 Google Cloud Storage account key(s) to the secrets service

2026-11-03 18:29:57,475-0600 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.repository.content.upgrades.AssetSoftDeleteRepeatableMigrationStep - No asset tables found, skipping trash index creation

2026-11-03 18:29:57,484-0600 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.repository.content.upgrades.ComponentNormalizedVersionMigrationStep - validating openvsx component table

2026-11-03 18:29:57,592-0600 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.repository.content.upgrades.ComponentSoftDeleteRepeatableMigrationStep - No component tables found, skipping trash index creation

2026-11-03 18:29:57,598-0600 INFO [jetty-main-1] *SYSTEM com.sonatype.nexus.repository.content.upgrade.CopyAssetBlobSizeMigrationStep - Starting asset blob size migration

2026-11-03 18:29:57,605-0600 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.repository.content.internal.ComponentNormalizationIntegrityChecker - validating normalized_version columns

2026-11-03 18:29:57,633-0600 ERROR [jetty-main-1] *SYSTEM org.sonatype.nexus.repository.content.internal.DatabaseIntegrityCheckService - Lifecycle operation start failed

org.sonatype.nexus.datastore.api.DataAccessException:

### Error querying database. Cause: org.postgresql.util.PSQLException: ERROR: column "deleted_on" does not exist

  Position: 260

### The error may exist in org.sonatype.nexus.repository.apt.datastore.internal.store.AptComponentDAO

### The error may involve defaultParameterMap

### The error occurred while setting parameters

### SQL: SELECT component_id, repository_id, namespace, name, kind, version, normalized_version, attributes, created, last_updated, entity_version FROM apt_component WHERE (normalized_version IS NULL OR normalized_version = '') AND deleted_on IS NULL ORDER BY component_id LIMIT ?;

### Cause: org.postgresql.util.PSQLException: ERROR: column "deleted_on" does not exist

  Position: 260

        at org.sonatype.nexus.datastore.mybatis.DataAccessSqlSession.unwrapMyBatisException(DataAccessSqlSession.java:120)

        at org.sonatype.nexus.datastore.mybatis.DataAccessSqlSession.selectList(DataAccessSqlSession.java:74)

        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142)

        at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:147)

        at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80)

        at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141)

        at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)

        at jdk.proxy2/jdk.proxy2.$Proxy350.browseUnnormalized(Unknown Source)

        at org.sonatype.nexus.repository.content.store.ComponentStore.browseUnnormalized_aroundBody10(ComponentStore.java:208)

        at org.sonatype.nexus.repository.content.store.ComponentStore$AjcClosure11.run(ComponentStore.java:1)

        at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:164)

        at org.sonatype.nexus.transaction.TransactionalWrapper.proceedWithTransaction(TransactionalWrapper.java:58)

        at org.sonatype.nexus.transaction.TransactionAspect.proceedWithTransaction(TransactionAspect.java:58)

        at org.sonatype.nexus.transaction.TransactionAspect.invoke(TransactionAspect.java:49)

        at org.sonatype.nexus.repository.content.store.ComponentStore.browseUnnormalized(ComponentStore.java:204)

        at org.sonatype.nexus.repository.content.internal.ComponentNormalizationIntegrityChecker.lambda$1(ComponentNormalizationIntegrityChecker.java:102)

        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)

        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)

        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)

        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)

        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)

        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)

        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)

        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)

        at org.sonatype.nexus.repository.content.internal.ComponentNormalizationIntegrityChecker.checkAndRepair(ComponentNormalizationIntegrityChecker.java:104)

        at org.sonatype.nexus.repository.content.internal.DatabaseIntegrityCheckService.doStart(DatabaseIntegrityCheckService.java:52)

        at org.sonatype.nexus.common.lifecycle.LifecycleSupport.start(LifecycleSupport.java:117)

        at org.sonatype.nexus.extender.NexusLifecycleManager.startComponent(NexusLifecycleManager.java:157)

        at org.sonatype.nexus.extender.NexusLifecycleManager.to(NexusLifecycleManager.java:113)

        at org.sonatype.nexus.extender.internal.NexusServletContextListener.moveToPhase(NexusServletContextListener.java:123)

        at org.sonatype.nexus.extender.internal.NexusServletContextListener.contextInitialized(NexusServletContextListener.java:78)

        at org.eclipse.jetty.ee10.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:1622)

        at org.eclipse.jetty.ee10.servlet.ServletContextHandler.contextInitialized(ServletContextHandler.java:501)

        at org.eclipse.jetty.ee10.servlet.ServletHandler.initialize(ServletHandler.java:677)

        at org.eclipse.jetty.ee10.servlet.ServletContextHandler.startContext(ServletContextHandler.java:1356)

        at org.eclipse.jetty.ee10.webapp.WebAppContext.startWebapp(WebAppContext.java:1435)

        at org.eclipse.jetty.ee10.webapp.WebAppContext.startContext(WebAppContext.java:1394)

        at org.eclipse.jetty.ee10.servlet.ServletContextHandler.lambda$doStart$0(ServletContextHandler.java:1074)

```

---

<div class="post-metadata">

**Author:** ![jzora](https://yyz1.discourse-cdn.com/flex047/user_avatar/community.sonatype.com/jzora/32/4197_2.png) [@jzora](https://community.sonatype.com/u/jzora)\
**Post date:** [November 4, 2026, 2:56pm UTC](https://community.sonatype.com/t/sonatype-nexus-repository-3-98-0-released/16752/3 "2026-11-04T14:56:14Z")

</div>

Hi, Lenny.

I did some searching through our internal comms for an answer. I’m not part of Sonatype’s Support team, but this may solve your issue.

> 1. Stop Nexus.  
> 2. Run the following SQL on the Nexus Postgres database.
> 
> ALTER TABLE repository  
> ADD COLUMN IF NOT EXISTS deleted\_on TIMESTAMP WITH TIME ZONE NULL,  
> ADD COLUMN IF NOT EXISTS deleted\_by VARCHAR(200) NULL;
> 
> 1. Start Nexus 3.98.0.

---

<div class="post-metadata">

**Author:** ![Lenny\_Primak](https://avatars.discourse-cdn.com/v4/letter/l/3da27b/32.png) [@Lenny\_Primak](https://community.sonatype.com/u/Lenny_Primak)\
**Post date:** [November 6, 2026, 2:25pm UTC](https://community.sonatype.com/t/sonatype-nexus-repository-3-98-0-released/16752/4 "2026-11-06T14:25:57Z")

</div>

Thank you. I wound up having to manually update many tables with these columns. It took me a while and I am not sure that I got them all, but this update is definitely missed the database upgrade 🙂
