Changes in 26.1.8

The following changes were made in Oracle NoSQL Database Release 26.1.8 Enterprise Edition.

New Features

  1. System Compatibility Version (SCV) Upgrade and Row Metadata Enhancements

    This release enhances upgrade safety and feature enablement through the System Compatibility Version (SCV) mechanism. New releases can introduce incompatible changes; SCV provides an explicit, post-upgrade step to ensure the store reaches a consistent compatibility state and to prevent partially-upgraded environments from using features that are not yet enabled.

    After upgrading all storage nodes and related components (SDK/direct drivers, multi-region agents, etc.), administrators must run plan upgrade-scv -version <major>.<minor> from the Admin CLI to enable features up to the specified version. Until the SCV upgrade completes, attempts to use newly introduced capabilities may fail with “incompatible client/service” or “feature requires version enabled” errors. The verify configuration, verify upgrade, and verify prerequisite commands will emit advisory notes when SCV has not been upgraded.

    In 26.1, we introduce server-generated Row Creation Time (Row#getCreationTime). Records written before SCV 26.1 is fully enabled may have a creation time of 0, and during the enablement transition you may observe a mix of zero and non-zero values. Applications must account for pre-enable records when using creation time in queries or logic.

    Also in 26.1, Last-Write Metadata can be written only after SCV 26.1 is enabled; older/outstanding drivers may fail if they encounter rows written with this feature.

    For multi-region tables, when replicating from a region with SCV 26.1 enabled to a region that is not enabled, last-write metadata is dropped to preserve compatibility and service availability.

  2. Support IF NOT EXISTS in CREATE REGION DDL, and IF EXISTS in DROP REGION DDL

    [KVSTORE-2935]

  3. Enhanced compatibility with recent Java releases that enforce TLS endpoint identification for RMI by updating the security tooling to generate Subject Alternative Name (SAN)-aware self-signed certificates. This ensures the Collector framework and JMX clients (such as jconsole) continue to work when using self-signed certificates generated by makebootconfig or securityconfig.

    Added a -certsan option to securityconfig create and makebootconfig to include DNS/IP Subject Alternative Name (SAN) in generated self-signed certificates.

    makebootconfig now issues a warning when secure JMX is enabled but the server certificate is missing required SAN coverage. KVLite derives and populates DNS/IP SAN entries from the configured host; if not provided, it uses the local host address.

    [KVSTORE-3133]

  4. Predicate Filtering on Streams

    Streams API now extends server-side filtering beyond table subscriptions by supporting application-supplied predicates. The kvstore Feeder continues to block writes to non-subscribed tables, and for subscribed tables it now streams only the writes that match the provided predicates. This significantly reduces network traffic and downstream processing, and simplifies applications by removing the need for complex client-side filtering logic.

    [KVSTORE-2881]

  5. Last Write Metadata (GA in 26.1)

    Last Write Metadata is now officially released (GA) in 26.1.

    This feature allows applications to attach user-supplied metadata to write operations, provided as a JSON object, and persist that information alongside the record. Records can later be filtered using the system-defined functionlast_write_metadata(). If you previously used the experimental "User-supplied record metadata" capability, note that it has been renamed to "Last Write Metadata".

    [KVSTORE-2627]

  6. Creation Time Metadata

    Added creation_time() row function to return a row’s original insertion timestamp (UTC, ms precision), complementing the existing modification_time() which returns the latest update time (or insertion time if never modified).

    [KVSTORE-2587]

  7. KVInsight Monitoring Framework (Experimental)

    Added an experimental version of KVInsight, a tool-agnostic monitoring framework for Oracle NoSQL Database. KVInsight provides a unified monitoring infrastructure to simplify how performance metrics are collected, aggregated, and exported, enabling integration with a variety of monitoring solutions.

    Today, Oracle NoSQL Database exposes performance monitoring through multiple mechanisms (for example, JMX MBeans, MonitorAgent StatsPacket, and the Collector Service) that differ in datasets, formats, and storage locations (CSV, JSON, JMX messages). This fragmentation makes it difficult for administrators to set up monitoring dashboards and pipelines, and it can limit flexibility in choosing monitoring backends. It can also make it harder for operations teams to interpret metrics consistently and take timely, actionable steps to keep clusters healthy.

    KVInsight addresses these challenges by offering a consistent configuration and export model for monitoring data. In this release, KVInsight supports exporting metrics via CSV and Prometheus.

    Before using this experimental feature, review the documentation for current limitations and deployment considerations. We appreciate your feedback on the usefulness of KVInsight and encourage you to post feedback in the Oracle NoSQL Database GitHub repository

    [KVSTORE-1721]

  8. Support for UNION ALL (Experimental)

    Added support for the UNION ALL operator to combine results from multiple SELECT statements into a single result set without de-duplication, preserving all rows returned by each query.

    [KVSTORE-3031]

  9. Support for SUBQUERY (Experimental)

    Added support for SUBQUERY expressions, enabling nested SELECT statements within a query (e.g., in WHERE, FROM, or SELECT clauses) to support more complex filtering and data shaping patterns.

    [KVSTORE-3032]

Bug Fixes and Performance Improvements

  1. Fixed a bug that Streams API application may see incorrect current stream position returned from NoSQLSubscription#getCurrentPosition()

    [KVSTORE-3144]

  2. Fixed a bug that application may encounter NullPointerException when executing a nest join query.

    [KVSTORE-3114]

  3. Fixed a bug when a subscription may encounter NullPointerException because of a race condition in internal buffer within Streams API

    [KVSTORE-3052]

  4. Fixed a bug when a subscription is configured to stream both parent and child table, unsubscribing parent table from subscription will incorrectly remove the child from the subscription as well, even the parent table is configured to stream single write, not transaction.

    [KVSTORE-2937]

  5. Improves an exception message in IllegalArgumentException when users configures the Streams API to subscribe a table to stream transactions.

    [KVSTORE-2819]

  6. Fixed an issue where bulk put operations could fail entirely if any stream reader encountered an error while reading its corresponding EntryStream. With this fix, a read failure in one stream no longer aborts the whole BulkPut; the failure is reported for the affected stream while other streams continue processing.

    [KVSTORE-2579]

  7. Move to java 17 runtime compatibility.

    [KVSTORE-2944]

  8. Disallow identity columns in multi-region child tables.

    [KVSTORE-3085]

  9. Fix two issues in UPDATE queries with IN or OR predicates on non-shard primary key fields that could result in incorrect updates or NullPointerException.

    For example,

    create table foo(sid integer, id integer, i integer, primary key(shard(sid), id));
    insert into foo values(1, 1, 10);
    insert into foo values(1, 2, 20);
    
    UPDATE foo SET i = i + 1 WHERE sid = 1 AND id IN (1, 2);
    -- Expected: 2 rows updated
    -- Actual:   1 row updated
    
    UPDATE foo SET i = i + 1 WHERE sid = 1 AND (id = 1 OR id = 2);
    -- Expected: 2 rows updated
    -- Actual:   fails with NullPointerException

    [KVSTORE-3087]

  10. Fixed an issue where async retries could surface an internal SessionAccessException. The Java direct driver now consistently returns AuthenticationRequiredException, prompting clients to reauthenticate.

    [KVSTORE-2933]

  11. Fixed a bug where clients observed incompatible tables from newer servers as missing. With the fix, clients receive an explicit compatibility error when attempting to access such tables. The old behavior yielded a message similar to the following:
    Error handling command agg table -name SYS$TableMetadata -count: Table not
    found: SYS$TableMetadata
    The new behavior produces an error like the following:
    Error handling command agg table -name SYS$TableMetadata -count: Unable to get
    table SYS$TableMetadata: oracle.kv.impl.fault.OperationFaultException:The
    table's minimum required version is greater than the serial version. The table's
    minimum required version is 33 but the serial version is 31 (25.4.0) (22.3.52)
    on [2025-08-26 00:00:00.000 UTC] (oracle.kv.FaultException)

    [KVSTORE-2751]