What's New

Feature Matrix

This chapter briefly describes the features added to each major version.

Architecture

System Architecture

The following is a feature matrix for system architecture.

Feature matrix for system architecture

Feature

2.x

3.x

20c.1

21c.1

22c.1

Shared Nothing Cluster

X

O

O

O

O

DA (Direct Attach)

O

O

O

O

O

JDBC DA (Direct Attach)

X

O

O

O

O

C/S (Client/Server) Dedicated

O

O

O

O

O

C/S (Client/Server) Shared

O

O

O

O

O

multi-process applications

O

O

O

O

O

multi-threaded applications

O

O

O

O

O

Linux platform

O

O

O

O

O

HP platform

O

O

O

O

O

AIX platform

O

O

O

O

O

Windows Client Platform

O

O

O

O

O

CDC(Change Data Capture) replication

O

O

O

O

O

CDC replication with log mirror

O

O

O

O

O

multi-level start up

O

O

O

O

O

parallel database loading

O

O

O

O

O

parallel index build

O

O

O

O

O

SQL plan cache

O

O

O

O

O

IPC

X

X

X

O

O

Storage Internal

The following is a feature matrix for storage internal.

Feature matrix for storage internal

Feature

2.x

3.x

20c.1

21c.1

22c.1

memory dictionary tablespace

O

O

O

O

O

memory data tablespace

O

O

O

O

O

memory undo tablespace

O

O

O

O

O

memory temporary tablespace

O

O

O

O

O

memory bitmap data segment

O

O

O

O

O

memory bitmap undo segment

O

O

O

O

O

memory bitmap instant segment

O

O

O

O

O

memory heap table

O

O

O

O

O

memory instant table

O

O

O

O

O

memory B-tree index

O

O

O

O

O

memory instant B-tree

O

O

O

O

O

memory instant hash

O

O

O

O

O

global secondary index

X

O

O

O

O

disk data tablespace

X

X

O

O

O

disk bitmap data segment

X

X

O

O

O

disk B-tree index

X

X

O

O

O

disk global secondary index

X

X

O

O

O

Transaction Control

The following is a feature matrix for transaction control.

Feature matrix for transaction control

Feature

2.x

3.x

20c.1

21c.1

22c.1

CDS(Concurrency Data Store) database mode

O

O

O

O

O

TDS(Transactional Data Store) database mode

O

O

O

O

O

read-only database

O

O

O

O

O

read/write database

O

O

O

O

O

flat transaction

O

O

O

O

O

distributed transaction

O

O

O

O

O

read-only transaction

O

O

O

O

O

read/write transaction

O

O

O

O

O

READ COMMITTED isolation level

O

O

O

O

O

SERIALIZABLE isolation level with SELECT FOR UPDATE

O

O

O

O

O

MVCC(Multi Version Concurrency Control)

O

O

O

O

O

multi-version read consistency

O

O

O

O

O

multi-statement consistent read

O

O

O

O

O

implicit lock for DML

O

O

O

O

O

writer don't blocks readers

O

O

O

O

O

row-level locking

O

O

O

O

O

deadlock detection

O

O

O

O

O

deadlock resolution

O

O

O

O

O

lock granularity

O

O

O

O

O

read lock

O

O

O

O

O

write lock

O

O

O

O

O

intention lock

O

O

O

O

O

WAL(Write Ahead Logging)

O

O

O

O

O

repeat history

O

O

O

O

O

restart recovery

O

O

O

O

O

circular logging

O

O

O

O

O

buffered logging

O

O

O

O

O

logging group

O

O

O

O

O

supplemental logging

O

O

O

O

O

mirrored logging

O

O

O

O

O

synchronous commit

O

O

O

O

O

asynchronous commit

O

O

O

O

O

grouped commit

O

O

O

O

O

total rollback

O

O

O

O

O

implicit statement rollback

O

O

O

O

O

savepoint management

O

O

O

O

O

Backup & Recovery

The following is a feature matrix for backup & recovery.

Feature matrix for backup & recovery

Feature

2.x

3.x

20c.1

21c.1

22c.1

off-line backup

O

O

O

O

O

on-line backup

O

O

O

O

O

full backup

O

O

O

O

O

incremental backup

O

O

O

O

O

complete recovery

O

O

O

O

O

incomplete recovery

O

O

O

O

O

auto instance recovery

O

O

O

O

O

tablespace recovery

O

O

O

O

O

file recovery

O

O

O

O

O

change tracking

X

X

O

O

O

Database Information

DICTIONARY_SCHEMA Schema

The following is a feature matrix for DICTIONARY_SCHEMA schema.

Feature matrix for DICTIONARY_SCHEMA schema

Family

Feature

2.x

3.x

20c.1

21c.1

22c.1

Views of ALL_family

ALL_ALL_TABLES

O

O

O

O

O

ALL_ARGUMENTS

X

O

O

O

O

ALL_CATALOG

O

O

O

O

O

ALL_CLUSTER_TABLES

X

O

O

O

O

ALL_COL_COMMENTS

O

O

O

O

O

ALL_COL_PLACE

X

X

X

X

X

ALL_COL_PRIVS

O

O

O

O

O

ALL_COL_PRIVS_MADE

O

O

O

O

O

ALL_COL_PRIVS_RECD

O

O

O

O

O

ALL_CONSTRAINTS

O

O

O

O

O

ALL_CONS_COLUMNS

O

O

O

O

O

ALL_DB_PRIVS

O

O

O

O

O

ALL_DB_PRIVS_MADE

O

O

O

O

O

ALL_DB_PRIVS_RECD

O

O

O

O

O

ALL_DEPENDENCIES

X

O

O

O

O

ALL_GLOBAL_SECONDARY_INDEXES

X

O

O

O

O

ALL_GSI_PLACE

X

O

O

O

O

ALL_INDEXES

O

O

O

O

O

ALL_IND_COLUMNS

O

O

O

O

O

ALL_IND_PLACE

X

O

O

O

O

ALL_NONSCHEMA_COMMENTS

O

O

O

O

O

ALL_OBJECTS

O

O

O

O

O

ALL_PACKAGE_PRIVS

X

X

O

O

O

ALL_PACKAGE_PRIV_MADE

X

X

O

O

O

ALL_PACKAGE_PRIV_RECD

X

X

O

O

O

ALL_PROCEDURES

X

O

O

O

O

ALL_PROC_PRIVS

X

O

O

O

O

ALL_PROC_PRIV_MADE

X

O

O

O

O

ALL_PROC_PRIV_RECD

X

O

O

O

O

ALL_SCHEMAS

O

O

O

O

O

ALL_SCHEMA_PATH

O

O

O

O

O

ALL_SCHEMA_PRIVS

O

O

O

O

O

ALL_SCHEMA_PRIVS_MADE

O

O

O

O

O

ALL_SCHEMA_PRIVS_RECD

O

O

O

O

O

ALL_SEQUENCES

O

O

O

O

O

ALL_SEQ_PRIVS

O

O

O

O

O

ALL_SEQ_PRIVS_MADE

O

O

O

O

O

ALL_SEQ_PRIVS_RECD

O

O

O

O

O

ALL_SHARD_KEY_COLUMNS

X

O

O

O

O

ALL_SOURCE

X

O

O

O

O

ALL_SYNONYMS

O

O

O

O

O

ALL_TABLES

O

O

O

O

O

ALL_TAB_COLS

O

O

O

O

O

ALL_TAB_COLUMNS

O

O

O

O

O

ALL_TAB_COMMENTS

O

O

O

O

O

ALL_TAB_IDENTITY_COLS

O

O

O

O

O

ALL_TAB_PLACE

X

O

O

O

O

ALL_TAB_SHARDS

X

O

O

O

O

ALL_TAB_PRIVS

O

O

O

O

O

ALL_TAB_PRIVS_MADE

O

O

O

O

O

ALL_TAB_PRIVS_RECD

O

O

O

O

O

ALL_TBS_PRIVS

O

O

O

O

O

ALL_TBS_PRIVS_MADE

O

O

O

O

O

ALL_TBS_PRIVS_RECD

O

O

O

O

O

ALL_USERS

O

O

O

O

O

ALL_VIEWS

O

O

O

O

O

Views of DBA_family

DBA_ALL_TABLES

O

O

O

O

O

DBA_ARGUMENTS

X

O

O

O

O

DBA_CATALOG

O

O

O

O

O

DBA_CLUSTER

X

O

O

O

O

DBA_CLUSTER_COMMENTS

X

O

O

O

O

DBA_CLUSTER_TABLES

X

O

O

O

O

DBA_COL_COMMENTS

O

O

O

O

O

DBA_COL_PLACE

X

X

X

X

X

DBA_COL_PRIVS

O

O

O

O

O

DBA_CONSTRAINTS

O

O

O

O

O

DBA_CONS_COLUMNS

O

O

O

O

O

DBA_DB_PRIVS

O

O

O

O

O

DBA_DEPENDENCIES

X

O

O

O

O

DBA_EXTENTS

O

O

O

O

O

DBA_GLOBAL_SECONDARY_INDEXES

X

O

O

O

O

DBA_GSI_PLACE

X

O

O

O

O

DBA_INDEXES

O

O

O

O

O

DBA_IND_COLUMNS

O

O

O

O

O

DBA_IND_PLACE

X

O

O

O

O

DBA_NONSCHEMA_COMMENTS

O

O

O

O

O

DBA_OBJECTS

O

O

O

O

O

DBA_PACKAGE_PRIVS

X

X

O

O

O

DBA_PROCEDURES

X

O

O

O

O

DBA_PROC_PRIVS

X

O

O

O

O

DBA_PROFILES

O

O

O

O

O

DBA_RECYCLEBIN

X

X

O

O

O

DBA_SCHEMAS

O

O

O

O

O

DBA_SCHEMA_PATH

O

O

O

O

O

DBA_SCHEMA_PRIVS

O

O

O

O

O

DBA_SEQUENCES

O

O

O

O

O

DBA_SEQ_PRIVS

O

O

O

O

O

DBA_SHARD_KEY_COLUMNS

X

O

O

O

O

DBA_SOURCE

X

O

O

O

O

DBA_STAT_SYSTEM

X

O

O

O

O

DBA_SYNONYMS

O

O

O

O

O

DBA_SYS_PRIVS

O

O

O

O

O

DBA_TABLES

O

O

O

O

O

DBA_TABLESPACES

O

O

O

O

O

DBA_TAB_COLS

O

O

O

O

O

DBA_TAB_COLUMNS

O

O

O

O

O

DBA_TAB_COMMENTS

O

O

O

O

O

DBA_TAB_IDENTITY_COLS

O

O

O

O

O

DBA_TAB_PLACE

X

O

O

O

O

DBA_TAB_PRIVS

O

O

O

O

O

DBA_TAB_SHARDS

X

O

O

O

O

DBA_TBS_PRIVS

O

O

O

O

O

DBA_USERS

O

O

O

O

O

DBA_VIEWS

O

O

O

O

O

Views of USER_family

USER_ALL_TABLES

O

O

O

O

O

USER_ARGUMENTS

X

O

O

O

O

USER_CATALOG

O

O

O

O

O

USER_CLUSTER_TABLES

X

O

O

O

O

USER_COL_COMMENTS

O

O

O

O

O

USER_COL_PLACE

X

X

X

X

X

USER_COL_PRIVS

O

O

O

O

O

USER_COL_PRIVS_MADE

O

O

O

O

O

USER_COL_PRIVS_RECD

O

O

O

O

O

USER_CONSTRAINTS

O

O

O

O

O

USER_CONS_COLUMNS

O

O

O

O

O

USER_DEPENDENCIES

X

O

O

O

O

USER_EXTENTS

O

O

O

O

O

USER_GLOBAL_SECONDARY_INDEXES

X

O

O

O

O

USER_GSI_PLACE

X

O

O

O

O

USER_INDEXES

O

O

O

O

O

USER_IND_COLUMNS

O

O

O

O

O

USER_IND_PLACE

X

O

O

O

O

USER_OBJECTS

O

O

O

O

O

USER_PACKAGE_PRIVS

X

X

O

O

O

USER_PACKAGE_PRIVS_MADE

X

X

O

O

O

USER_PACKAGE_PRIVS_RECD

X

X

O

O

O

USER_PROCEDURES

X

O

O

O

O

USER_PROC_PRIVS

X

O

O

O

O

USER_PROC_PRIVS_MADE

X

O

O

O

O

USER_PROC_PRIVS_RECD

X

O

O

O

O

USER_RECYCLEBIN

X

X

O

O

O

USER_SCHEMAS

O

O

O

O

O

USER_SCHEMA_PATH

O

O

O

O

O

USER_SCHEMA_PRIVS

O

O

O

O

O

USER_SCHEMA_PRIVS_MADE

O

O

O

O

O

USER_SCHEMA_PRIVS_RECD

O

O

O

O

O

USER_SEQUENCES

O

O

O

O

O

USER_SEQ_PRIVS

O

O

O

O

O

USER_SEQ_PRIVS_MADE

O

O

O

O

O

USER_SEQ_PRIVS_RECD

O

O

O

O

O

USER_SHARD_KEY_COLUMNS

X

O

O

O

O

USER_SOURCE

X

O

O

O

O

USER_SYNONYMS

O

O

O

O

O

USER_SYS_PRIVS

O

O

O

O

O

USER_TABLES

O

O

O

O

O

USER_TABLESPACES

O

O

O

O

O

USER_TAB_COLS

O

O

O

O

O

USER_TAB_COLUMNS

O

O

O

O

O

USER_TAB_COMMENTS

O

O

O

O

O

USER_TAB_IDENTITY_COLS

O

O

O

O

O

USER_TAB_PLACE

X

O

O

O

O

USER_TAB_PRIVS

O

O

O

O

O

USER_TAB_PRIVS_MADE

O

O

O

O

O

USER_TAB_PRIVS_RECD

O

O

O

O

O

USER_TAB_SHARDS

X

O

O

O

O

USER_USERS

O

O

O

O

O

USER_VIEWS

O

O

O

O

O

Other views

AUDIT_POLICIES

X

O

O

O

O

AUDIT_POLICY_ENABLED

X

O

O

O

O

AUDIT_POLICY_OPTIONS

X

O

O

O

O

AUDIT_TRAIL

X

O

O

O

O

DATABASE_PROPERTIES

O

O

O

O

O

DBC_TABLE_TYPE_INFO

O

O

O

O

O

DICTIONARY

O

O

O

O

O

DICT_COLUMNS

O

O

O

O

O

DUAL

O

O

O

O

O

IMPLEMENTATION_INFO

O

O

O

O

O

IMPLEMENTATION_INFO_BASE

O

O

O

O

O

JDBC_CLIENT_PROPS

O

O

O

O

O

PRODUCT

O

O

O

O

O

SESSION_PRIVS

O

O

O

O

O

SUPPLEMENTAL_LOG_TABLE_INFO

O

O

O

O

O

Aliased synonym

COLS

O

O

O

O

O

DICT

O

O

O

O

O

IND

O

O

O

O

O

OBJ

O

O

O

O

O

RECYCLEBIN

X

X

O

O

O

SEQ

O

O

O

O

O

TABS

O

O

O

O

O

INFORMATION_SCHEMA Schema

The following is a feature matrix for INFORMATION_SCHEMA schema.

Feature matrix for INFORMATION_SCHEMA schema

Feature

2.x

3.x

20c.1

21c.1

22c.1

COLUMNS

O

O

O

O

O

COLUMN_PRIVILEGES

O

O

O

O

O

CONSTRAINT_COLUMN_USAGE

O

O

O

O

O

CONSTRAINT_TABLE_USAGE

O

O

O

O

O

INFORMATION_SCHEMA_CATALOG_NAME

O

O

O

O

O

KEY_COLUMN_USAGE

O

O

O

O

O

MODULES

X

X

O

O

O

MODULE_BODY

X

X

O

O

O

MODULE_BODY_MODULE_USAGE

X

X

O

O

O

MODULE_BODY_ROUTINE_USAGE

X

X

O

O

O

MODULE_BODY_SEQUENCE_USAGE

X

X

O

O

O

MODULEBODY_TABLE_USAGE

X

X

O

O

O

MODULE_MODULE_USAGE

X

X

O

O

O

MODULE_PRIVILEGES

X

X

O

O

O

MODULE_ROUTINE_USAGE

X

X

O

O

O

MODULE_SEQUENCE_USAGE

X

X

O

O

O

MODULE_TABLE_USAGE

X

X

O

O

O

PARAMETERS

X

O

O

O

O

REFERENTIAL_CONSTRAINTS

O

O

O

O

O

ROUTINES

X

O

O

O

O

ROUTINE_MODULE_USAGE

X

X

O

O

O

ROUTINE_PRIVILEGES

X

O

O

O

O

ROUTINE_ROUTINE_USAGE

X

O

O

O

O

ROUTINE_SEQUENCE_USAGE

X

O

O

O

O

ROUTINE_TABLE_USAGE

X

O

O

O

O

SCHEMATA

O

O

O

O

O

SEQUENCES

O

O

O

O

O

SQL_FEATURES

O

O

O

O

O

SQL_IMPLEMENTATION_INFO

O

O

O

O

O

SQL_PACKAGES

O

O

O

O

O

SQL_PARTS

O

O

O

O

O

SQL_SIZING

O

O

O

O

O

STATISTICS

O

O

O

O

O

TABLES

O

O

O

O

O

TABLE_CONSTRAINTS

O

O

O

O

O

TABLE_PRIVILEGES

O

O

O

O

O

USAGE_PRIVILEGES

O

O

O

O

O

VIEWS

O

O

O

O

O

VIEW_MODULE_USAGE

X

X

O

O

O

VIEW_ROUTINE_USAGE

X

O

O

O

O

VIEW_TABLE_USAGE

O

O

O

O

O

PERFORMANCE_VIEW_SCHEMA Schema

The following is a feature matrix for PERFORMANCE_VIEW_SCHEMA schema.

Feature matrix for PERFORMANCE_VIEW_SCHEMA schema

Feature

2.x

3.x

20c.1

21c.1

22c.1

GV$____

X

O

O

O

O

V$AGABLE_INFO

X

O

O

O

O

V$ARCHIVELOG

O

O

O

O

O

V$AUDITABLE_DB_PRIVILEGES

X

O

O

O

O

V$AUDITABLE_SYSTEM_ACTIONS

X

O

O

O

O

V$BACKUP

O

O

O

O

O

V$BALANCER

O

O

O

O

O

V$BCH

X

X

O

O

O

V$BUFFER_STAT

X

X

O

O

O

V$CLUSTER_DISPATCHER

X

O

O

O

O

V$CLUSTER_LOCATION

X

O

O

O

O

V$CLUSTER_MEMBER

X

O

O

O

O

V$COLUMNS

O

O

O

O

O

V$CONTROLFILE

O

O

O

O

O

V$DATAFILE

O

O

O

O

O

V$DB_CHANGE_TRACKING

X

X

O

O

O

V$DB_FILE

O

O

O

O

O

V$DB_PROPERTY

X

X

X

X

O

V$DISPATCHER

O

O

O

O

O

V$ERROR_CODE

O

O

O

O

O

V$GLOBAL_TRANSACTION

O

O

O

O

O

V$JOURNALING

X

O

O

O

O

V$INCREMENTAL_BACKUP

O

O

O

O

O

V$INSTANCE

O

O

O

O

O

V$KEYWORDS

O

O

O

O

O

V$LATCH

O

O

O

O

O

V$LICENSE

X

X

X

X

O

V$LOCK_WAIT

O

O

O

O

O

V$LOCKED_OBJECT

X

X

O

O

O

V$LOGFILE

O

O

O

O

O

V$OPEN_CURSOR

X

X

X

X

O

V$PLAN_HISTORY

X

X

X

O

O

V$PLAN_HISTORY_LATEST

X

X

X

O

O

V$PROCESS_MEM_STAT

O

O

O

O

O

V$PROCESS_SQL_STAT

O

O

O

O

O

V$PROCESS_STAT

O

O

O

O

O

V$PROPERTY

O

O

O

O

O

V$PROPERTY_ALIAS

X

X

X

X

O

V$PSM_RESERVED_WORDS

X

O

O

O

O

V$QUEUE

O

O

O

O

O

V$RESERVED_WORDS

O

O

O

O

O

V$SESSION

O

O

O

O

O

V$SESSION_AUDIT

X

O

O

O

O

V$SESSION_CONNECT_INFO

O

O

O

O

O

V$SESSION_EVENT

X

O

O

O

O

V$SESSION_MEM_STAT

O

O

O

O

O

V$SESSION_MEM_USAGE

X

X

X

O

O

V$SESSION_SQL_STAT

O

O

O

O

O

V$SESSION_STAT

O

O

O

O

O

V$SESSION_WAIT

X

O

O

O

O

V$SHARED_MODE

O

O

O

O

O

V$SHARED_SERVER

O

O

O

O

O

V$SHM_SEGMENT

O

O

O

O

O

V$SPROPERTY

O

O

O

O

O

V$SQLFN_METADATA

O

O

O

O

O

V$SQL_CACHE

O

O

O

O

O

V$SQL_COMMAND

X

O

O

O

O

V$SQL_HISTORY

X

O

O

O

O

V$STATEMENT

O

O

O

O

O

V$SYSTEM_EVENT

X

O

O

O

O

V$SYSTEM_MEM_STAT

O

O

O

O

O

V$SYSTEM_SQL_STAT

O

O

O

O

O

V$SYSTEM_STAT

O

O

O

O

O

V$TABLES

O

O

O

O

O

V$TABLESPACE

O

O

O

O

O

V$TABLESPACE_STAT

X

O

O

O

O

V$TRANSACTION

O

O

O

O

O

V$WAIT_EVENT_CLASS_NAME

X

O

O

O

O

V$WAIT_EVENT_NAME

X

O

O

O

O

V$XA_TRANSATION

X

O

O

O

O

Server Property

The following is a feature matrix for server property.
Feature matrix for server property

Feature

2.x

3.x

20c.1

21c.1

22c.1

ADMIN_SESSION_POOL_INIT_SIZE

X

X

X

X

O

ADMIN_SESSION_POOL_NEXT_SIZE

X

X

X

X

O

AGING_INTERVAL

O

O

O

O

O

AGING_PLAN_INTERVAL

O

O

O

O

O

ARCHIVELOG_DIR

O

X

X

X

X

ARCHIVELOG_DIR_1 ~ DIR_10

O

O

O

O

O

ARCHIVELOG_FILE

O

O

O

O

O

ARCHIVELOG_MODE

O

O

O

O

O

BACKUP_DIR_1 ~ DIR_10

O

O

O

O

O

BLOCK_READ_COUNT

O

O

O

O

O

BROADCAST_INDEX_REBUILD_PROTOCOL

X

X

X

O

O

BROADCAST_REBALANCE_PROTOCOL

X

X

O

O

O

BUFFER_CACHE_SIZE

X

X

O

O

O

BUFFER_CHECKPOINT_LIST_COUNT

X

X

O

X

X

BUFFER_DIRTY_PAGE_LIMIT

X

X

X

X

O

BUFFER_FLUSH_THREADS

X

X

O

X

X

BUFFER_FLUSHING_INTERVAL

X

X

O

X

X

BUFFER_FREE_LIST_COUNT

X

X

O

O

O

BUFFER_HASH_BUCKETS

X

X

O

O

O

BUFFER_HOT_REGION_CRITERIA

X

X

O

O

O

BUFFER_HOT_REGION_PERCENT

X

X

O

O

O

BUFFER_LRU_LIST_COUNT

X

X

O

O

O

BUFFER_LRU_SCAN_PERCENT

X

X

X

X

O

BUFFER_MULTIPAGE_READ_COUNT

X

X

O

O

O

BUFFER_PREFETCH_PAGE_COUNT

X

X

X

O

O

BULK_IO_PAGE_COUNT

O

O

O

O

O

CDISPATCHER_HOT_POLICY_INTERVAL

X

O

O

O

O

CDISPATCHER_LOCKABLE_THREADS

X

X

X

X

O

CDISPATCHER_LOCKLESS_THREADS

X

X

O

O

O

CDISPATCHER_MAX_PACKET_BUFFER_SIZE

X

X

X

X

O

CDISPATCHER_SOCKET_BUFFER_SIZE

X

O

O

O

O

CHANGE_TRACKING

X

X

O

O

O

CHANGE_TRACKING_EXTENT_SIZE

X

X

O

O

O

CHANGE_TRACKING_FILE

X

X

O

O

O

CHAR_LENGTH_UNITS

O

O

O

O

O

CHARACTER_SET

O

O

O

O

O

CHECK_DEDICATE_CONNECTION_INTERVAL

X

O

O

O

O

CHECK_DEDICATE_SOCKET

X

X

X

X

X

CHECKPOINT_LIST_COUNT_PER_IO_GROUP

X

X

X

X

O

CLIENT_MAX_COUNT

O

O

O

O

O

CLIENT_NUMA_POLICY

X

O

O

O

O

CLOSE_PSM_CHILD_STMTS

X

O

O

O

O

CLUSTER_ASYNC_COMMIT

X

O

O

O

O

CLUSTER_ASYNC_REPLICATION

X

O

O

O

X

CLUSTER_CM_BUFFER_COUNT

X

O

O

O

X

CLUSTER_CM_BUFFER_SIZE

X

O

O

O

O

CLUSTER_CM_READ_BUFFER_SIZE

X

O

O

O

O

CLUSTER_COMMIT_SLAVE_CSERVERS

X

X

X

X

O

CLUSTER_COMMIT_STREAM_ISOLATION

X

O

O

O

O

CLUSTER_CONNECTION

X

O

O

O

O

CLUSTER_CONNECTION_TIMEOUT_SEC

X

O

O

O

O

CLUSTER_DATA_SYNC_SERVERS

X

O

O

O

O

CLUSTER_DEADLOCK_TIMEOUT

X

X

O

O

O

CLUSTER_DISPATCHER_IN_QUEUE_SIZE

X

O

O

O

O

CLUSTER_DISPATCHER_NUMA_STREAM_MAP

X

O

O

O

O

CLUSTER_DISPATCHER_OUT_QUEUE_SIZE

X

O

O

O

O

CLUSTER_GSERVER_RESPONSE_QUEUE_SIZE

X

X

X

X

O

CLUSTER_HEARTBEAT_INTERVAL

X

O

O

O

O

CLUSTER_HEARTBEAT_RETRY_COUNT

X

O

O

O

O

CLUSTER_IGNORE_INACTIVE_MEMBER

X

O

O

O

O

CLUSTER_KEEPALIVE_IDLE_TIME

X

X

X

X

O

CLUSTER_LOCKABLE_CSERVERS

X

X

X

X

O

CLUSTER_LOCKLESS_CSERVERS

X

X

X

X

O

CLUSTER_MAX_PACKET_SIZE

X

O

O

O

O

CLUSTER_MAX_PAYLOAD_SIZE

X

O

O

O

O

CLUSTER_PACKET_ALLOCATION_TIMEOUT

X

O

O

O

O

CLUSTER_SESSION_HASH_BUCKETS

X

X

O

O

O

CLUSTER_SPLIT_BRAIN_RESOLUTION_POLICY

X

O

O

O

O

CLUSTER_SPLIT_BRAIN_RETRY_COUNT

X

O

O

O

O

COMMITTER_HOT_POLICY_INTERVAL

X

O

O

O

O

CONTROL_FILE_0 ~ FILE_7

O

O

O

O

O

CONTROL_FILE_COUNT

O

O

O

O

O

CONTROL_FILE_TEMP_NAME

O

O

O

O

O

COORDINATOR_COMMIT_WRITE_MODE

X

O

O

O

O

DA_CLIENT_NUMA_MODE

X

O

O

O

O

DATA_STORE_MODE

O

O

O

O

O

DATABASE_ACCESS_MODE

O

O

O

O

O

DATABASE_INSTANCE_NAME

X

O

O

O

O

DDL_AUTOCOMMIT

O

O

O

O

O

DDL_LOCK_TIMEOUT

O

O

O

O

O

DEADLOCK_PRIORITY

X

X

O

O

O

DEFAULT_GLOBAL_SECONDARY_INDEX_CREATION

X

O

O

O

O

DEFAULT_INDEX_LOGGING

O

O

X

X

X

DEFAULT_INDEX_PCTFREE

X

O

O

O

O

DEFAULT_INITRANS

O

O

O

O

O

DEFAULT_MAXTRANS

O

O

O

O

O

DEFAULT_PCTFREE

O

O

O

O

O

DEFAULT_PCTUSED

O

O

O

O

O

DEFAULT_REMOVAL_BACKUP_FILE

O

O

O

O

O

DEFAULT_REMOVAL_OBSOLETE_BACKUP_LIST

O

O

O

O

O

DEFAULT_SHARDING

X

O

O

O

O

DISABLE_DDL

X

X

X

O

O

DISABLE_DDL_CDC_GIVEUP

O

O

O

O

O

DISABLE_SERIAL_DDL

X

X

X

O

O

DISABLE_UPDATE_PK_CDC_GIVEUP

O

O

O

O

O

DISALLOWED_PROTOCOL_TARGETTYPE

X

O

O

O

O

DISALLOWED_PROTOCOL_TARGETTYPE_WITH_ALL

X

O

O

O

O

DISALLOWED_PROTOCOL_TARGETTYPE_WITH_NAME

X

O

O

O

O

DISPATCHERS

O

O

O

O

O

DISPATCHER_CM_BUFFER_SIZE

O

O

O

O

O

DISPATCHER_CM_UNIT_SIZE

O

O

O

O

O

DISPATCHER_CONNECTIONS

O

O

O

O

O

DISPATCHER_HOT_POLICY_INTERVAL

X

O

O

O

O

DISPATCHER_LOAD_BALANCING

X

O

O

O

O

DISPATCHER_NUMA_STREAM_MAP

X

O

O

O

O

DISPATCHER_QUEUE_SIZE

O

O

O

O

O

DISPATCHER_REQUEST_MINI_QUEUE_COUNT

X

O

O

O

O

DISPATCHER_RESPONSE_MINI_QUEUE_COUNT

X

O

O

O

O

EXECUTE_INST_HASH_TABLE_USING_AVAILABLE_MEMORY

X

X

X

O

O

FETCH_FAILOVER

X

O

O

O

O

FULL_TABLE_SCAN_CACHING_THRESHOLD

X

X

X

X

O

GLOBAL_CONNECTION_ALLOW_SESSION_DEPENDENCY

X

O

O

O

O

GLOBAL_JOURNAL_BUFFER_SIZE

X

O

O

O

O

GLOBAL_JOURNAL_BUFFER_TOTAL_MAX_SIZE

X

O

O

O

O

GLOBAL_PROPERTY_LOCK_TIMEOUT

X

O

O

O

O

GLOBAL_TRANSACTION_COMMIT_WRITE_MODE

X

O

O

O

O

GLOBAL_TRANSACTION_ISOLATION_SCOPE

X

O

O

O

O

GLOBAL_TRANSACTION_LOG_DIR

X

O

O

O

O

GLOBAL_TRANSACTION_LOG_FILE_SIZE

X

O

O

O

O

GMASTER_NUMA_NODE

X

O

O

O

O

GMON_AUTOSTART

X

O

O

O

O

HINT_ERROR

O

O

O

O

O

IDLE_TIMEOUT

O

O

O

O

O

IN_DOUBT_DECISION

O

O

O

O

O

IN_KEY_RANGE_ARRAY_COUNT

X

X

O

O

O

INCREMENTAL_BACKUP_SCAN_BUFFER_SIZE

X

X

O

O

O

INCREMENTAL_DATAFILE_HEADER_UPDATE_CRITERIA

X

X

X

X

O

INDEX_BUILD_PARALLEL_FACTOR

O

O

O

O

O

INDEX_MERGE_RUN_COUNT

O

O

O

O

O

INDEX_LOGGING_THROTTLING

X

X

X

O

O

INDEX_REBUILD_BLOCK_READ_COUNT

X

X

O

O

O

INDEX_SORT_RUN_SIZE

O

O

O

O

O

INDEX_TREE_MERGE_PARALLEL_FACTOR

X

O

O

O

O

INST_ALLOCATOR_COUNT

X

O

O

O

O

INST_HASH_TABLE_BUCKET_MAX_COUNT

X

X

X

O

O

INST_TABLE_BLOCK_SIZE

X

O

O

O

O

IPC_CHANNEL_COUNT

X

X

X

O

O

JOURNAL_TEMP_DIR

X

O

O

O

O

KEEPALIVE_IDLE_TIME

O

O

O

O

O

LOCAL_CLUSTER_MEMBER

X

O

O

O

O

LOCAL_CLUSTER_MEMBER_HOST

X

O

O

O

O

LOCAL_CLUSTER_MEMBER_PORT

X

O

O

O

O

LOCAL_JOURNAL_BUFFER_SIZE

X

O

O

O

O

LOCATION_FILE

X

O

O

O

O

LOCATOR_QUERY_TIMEOUT

X

O

O

O

O

LOCK_HASH_TABLE_SIZE

O

O

O

O

O

LOCKABLE_DISPATCHER_CM_BUFFER_COUNT

X

X

X

X

O

LOCKLESS_DISPATCHER_CM_BUFFER_COUNT

X

X

X

X

O

LOG_BLOCK_SIZE

O

O

O

O

O

LOG_BUFFER_SIZE

O

O

O

O

O

LOG_DIR

O

O

O

O

O

LOG_FILE_SIZE

O

O

O

O

O

LOG_GROUP_COUNT

O

O

O

O

O

LOG_MIRROR_MODE

O

O

O

O

O

LOG_MIRROR_SHARED_MEMORY_STATIC_SIZE

O

O

O

O

O

LOG_MIRROR_TIMEOUT

O

O

O

O

O

LOG_SYNC_INTERVAL

O

O

O

O

O

LOG_SYNC_INTERVAL_MSEC

X

O

O

O

O

MAX_GROUP_COUNT

X

O

O

O

O

MAX_JOURNAL_FILE_SIZE

X

O

O

O

O

MAX_NODE_COUNT

X

O

O

O

O

MAXIMUM_CONCURRENT_ACTIVITIES

O

O

O

O

O

MAXIMUM_FILE_CACHE_SIZE

X

X

X

O

O

MAXIMUM_FLANGE_COUNT

X

O

O

O

X

MAXIMUM_FLUSH_BUFFER_PAGE_COUNT

X

X

X

O

O

MAXIMUM_FLUSH_LOG_BLOCK_COUNT

O

O

O

O

O

MAXIMUM_FLUSH_PAGE_COUNT

O

O

O

O

O

MAXIMUM_INDEX_REBUILD_JOURNAL_REPLAY_COUNT

X

X

O

O

O

MAXIMUM_JOURNAL_REPLAY_COUNT

X

O

O

O

O

MAXIMUM_NAMED_CURSOR_COUNT

O

O

O

O

O

MAXIMUM_PACKAGE_INSTANCE_COUNT

X

X

X

O

O

MAXIMUM_SESSION_CM_BUFFER_SIZE

O

O

O

O

O

MEASURE_CLUSTER_LATENCY

X

O

O

O

O

MEDIA_RECOVERY_LOG_BUFFER_SIZE

O

X

X

X

X

MIN_SAMPLE_ROW_COUNT

X

O

O

O

O

MINIMUM_UNDO_PAGE_COUNT

O

O

O

O

O

NET_BUFFER_SIZE

O

O

O

O

O

NLS_DATE_FORMAT

O

O

O

O

O

NLS_TIME_FORMAT

O

O

O

O

O

NLS_TIME_WITH_TIME_ZONE_FORMAT

O

O

O

O

O

NLS_TIMESTAMP_FORMAT

O

O

O

O

O

NLS_TIMESTAMP_WITH_TIME_ZONE_FORMAT

O

O

O

O

O

NUMA

X

O

O

O

O

NUMA_MAP

X

O

O

O

O

OFFLINE_MEMBER_AFTER_FAILOVER

X

O

O

O

O

ONLINE_INDEX_REBUILD_JOURNAL_REPLAY_THRESHOLD

X

X

O

O

O

ONLINE_JOURNAL_REPLAY_THRESHOLD

X

O

O

O

O

OS_GROUP_ACCESS

X

O

O

O

O

PACKET_COMPRESSION_THRESHOLD

X

X

O

O

O

PAGE_CHECKSUM_TYPE

O

O

O

O

O

PARALLEL_IO_FACTOR

O

O

O

O

O

PARALLEL_IO_GROUP_1 ~ GROUP_16

O

O

O

O

O

PARALLEL_LOAD_FACTOR

O

O

O

O

O

PENDING_LOG_BUFFER_COUNT

O

O

O

O

O

PLAN_CACHE

O

O

O

O

O

PLAN_CACHE_SIZE

O

O

O

O

O

PLAN_HISTORY

X

X

X

O

O

PLAN_HISTORY_SIZE

X

X

X

O

O

PRIVATE_STATIC_AREA_INIT_SIZE

X

X

O

O

O

PRIVATE_STATIC_AREA_NEXT_SIZE

X

X

O

O

O

PRIVATE_STATIC_AREA_SHRINK_THRESHOLD

X

X

O

O

O

PRIVATE_STATIC_AREA_SIZE

O

O

O

O

O

PROCESS_MAX_COUNT

O

O

O

O

O

QUERY_TIMEOUT

O

O

O

O

O

READABLE_ARCHIVELOG_DIR_COUNT

O

O

O

O

O

READABLE_BACKUP_DIR_COUNT

O

O

O

O

O

REBALANCE_BLOCK_READ_COUNT

X

O

O

O

O

REBALANCE_SHARD_DIVISOR

X

X

X

X

O

RECOMPILE_CHECK_MINIMUM_PAGE_COUNT

O

X

X

X

X

RECOMPILE_PAGE_PERCENT

O

X

X

X

X

RECOVERY_LOG_BUFFER_SIZE

X

O

O

O

O

RECYCLEBIN

X

X

O

O

O

REDO_LOG_COMPRESSION_THRESHOLD

X

O

O

O

O

REFINE_RELATION

O

O

O

O

O

SESSION_FATAL_BEHAVIOR

O

O

O

O

O

SESSION_MEMORY_INIT_SIZE

X

O

O

O

O

SESSION_MEMORY_SHRINK_THRESHOLD

X

O

O

O

O

SESSION_POOL_INIT_SIZE

X

X

X

X

O

SESSION_POOL_NEXT_SIZE

X

X

X

X

O

SHARED_MEMORY_ADDRESS

O

O

O

O

O

SHARED_MEMORY_STATIC_KEY

O

O

O

O

O

SHARED_MEMORY_STATIC_NAME

O

O

O

O

O

SHARED_MEMORY_STATIC_SIZE

O

O

O

O

O

SHARED_REQUEST_QUEUE_COUNT

O

O

O

O

O

SHARED_SERVERS

O

O

O

O

O

SHARED_SESSION

O

O

O

O

O

SNAPSHOT_STATEMENT_TIMEOUT

O

O

O

O

O

SQL_HISTORY_SIZE

X

O

O

O

O

SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY

O

O

O

O

O

SYNC_DISPATCHER_CM_BUFFER_COUNT

X

X

X

X

O

SYSTEM_DISK_DATA_TABLESPACE_SIZE

X

X

O

O

O

SYSTEM_FILE_IO

O

O

O

O

O

SYSTEM_MEMORY_AUX_TABLESPACE_SIZE

X

O

O

O

O

SYSTEM_MEMORY_DATA_TABLESPACE_SIZE

O

O

O

O

O

SYSTEM_MEMORY_DICT_TABLESPACE_SIZE

O

O

O

O

O

SYSTEM_MEMORY_TEMP_TABLESPACE_SIZE

O

O

O

O

O

SYSTEM_MEMORY_UNDO_TABLESPACE_SIZE

O

O

O

O

O

SYSTEM_TABLESPACE_DIR

O

O

O

O

O

SYSTEM_UDS_DIR

X

O

O

O

O

TCP_NODELAY

X

O

O

O

O

TEMP_SEGMENT_CACHE_SIZE

X

O

O

O

O

TEMP_UNDO_ENABLED

X

O

O

O

O

TIMED_STATISTICS

X

O

O

O

O

TIMER_INTERVAL

O

X

X

O

O

TIMEZONE

O

O

O

O

O

TRACE_ALTER_SYSTEM

O

O

O

O

O

TRACE_DDL

O

O

O

O

O

TRACE_LOG_ID

O

O

O

O

O

TRACE_LOG_MSGBUG_SIZE

X

O

O

O

O

TRACE_LOG_TIME_DETAIL

O

O

O

O

O

TRACE_LOGGER

X

O

O

O

O

TRACE_LOGGER_REMOTE_HOST

X

O

O

O

O

TRACE_LOGGER_REMOTE_PORT

X

O

O

O

O

TRACE_LOGIN

O

O

O

O

O

TRACE_LONG_RUN_CURSOR

O

O

O

O

O

TRACE_LONG_RUN_SQL

O

O

O

O

O

TRACE_LONG_RUN_TIMER

X

X

O

O

O

TRACE_SYSTEM_DIR

X

X

X

X

O

TRACE_XA

O

O

O

O

O

TRANSACTION_ALLOCATION_TIMEOUT

X

O

O

O

O

TRANSACTION_COMMIT_WRITE_MODE

O

O

O

O

O

TRANSACTION_MAXIMUM_UNDO_PAGE_COUNT

O

O

O

O

O

TRANSACTION_TABLE_SIZE

O

O

O

O

O

TRANSACTION_TIMEOUT

X

O

O

O

O

UNDO_RELATION_ALLOCATION_TIMEOUT

X

O

O

O

O

UNDO_RELATION_COUNT

O

O

O

O

O

UNDO_SHRINK_THRESHOLD

O

O

O

O

O

USE_LARGE_PAGES

X

X

O

O

O

USER_DATA_TABLESPACE_MEDIA_TYPE

X

X

O

O

O

USER_DATA_TABLESPACE_SIZE

X

X

O

O

O

USER_DISK_DATA_TABLESPACE_NEXTSIZE

X

X

O

O

O

USER_TEMP_TABLESPACE_SIZE

O

O

O

O

O

XA_TRANSACTION_IDLE_TIMEOUT

X

X

O

O

O

Property Alias

The following is a feature matrix for property alias.

Feature matrix for property alias

Feature

2.x

3.x

20c.1

21c.1

22c.1

CDISPATCHER_THREADS

X

O

O

O

O

CLUSTER_COMMIT_SLAVES

X

O

O

O

O

CLUSTER_SEREVER_RESPONSE_QUEUE_SIZE

X

O

O

O

O

CSERVER

X

O

O

O

O

INCREMENTAL_CHECKPOINT_CRITERIA

X

X

X

X

O

LOCKLESS_CSERVERS

X

X

O

O

O

MEMORY_MERGE_RUN_COUNT

O

O

O

O

O

MEMORY_SORT_RUN_SIZE

O

O

O

O

O

SYSTEM_LOGGER_DIR

O

O

O

O

O

SQL

SQL Element

Data Type

The following is a feature matrix for data type.

Feature matrix for data type

Type

Feature

2.x

3.x

20c.1

21c.1

22c.1

Character string type

CHAR

O

O

O

O

O

VARCHAR

O

O

O

O

O

LONG VARCHAR

O

O

O

O

O

Binary string type

BINARY

O

O

O

O

O

VARBINARY

O

O

O

O

O

LONG VARBINARY

O

O

O

O

O

Decimal number type

SMALLINT

O

O

O

O

O

INTEGER

O

O

O

O

O

BIGINT

O

O

O

O

O

NUMERIC

O

O

O

O

O

DECIMAL

X

O

O

O

O

NUMBER

O

O

O

O

O

REAL

O

O

O

O

O

DOUBLE PRECISION

O

O

O

O

O

FLOAT

O

O

O

O

O

Binary number type

NATIVE_SMALLINT

O

O

O

O

O

NATIVE_INTEGER

O

O

O

O

O

NATIVE_BIGINT

O

O

O

O

O

NATIVE_REAL

O

O

O

O

O

NATIVE_DOUBLE

O

O

O

O

O

BOOLEAN type

BOOLEAN

O

O

O

O

O

Date/ time type

DATE

O

O

O

O

O

TIME

O

O

O

O

O

TIME WITH TIME ZONE

O

O

O

O

O

TIMESTAMP

O

O

O

O

O

TIMESTAMP WITH TIME ZONE

O

O

O

O

O

INTERVAL type

INTERVAL YEAR TO MONTH

O

O

O

O

O

INTERVAL YEAR

O

O

O

O

O

INTERVAL MONTH

O

O

O

O

O

INTERVAL DAY TO SECOND

O

O

O

O

O

INTERVAL DAY

O

O

O

O

O

INTERVAL HOUR

O

O

O

O

O

INTERVAL MINUTE

O

O

O

O

O

INTERVAL SECOND

O

O

O

O

O

INTERVAL DAY TO HOUR

O

O

O

O

O

INTERVAL DAY TO MINUTE

O

O

O

O

O

INTERVAL HOUR TO MINUTE

O

O

O

O

O

INTERVAL HOUR TO SECOND

O

O

O

O

O

INTERVAL MINUTE TO SECOND

O

O

O

O

O

ROWID type

ROWID

O

O

O

O

O

Function

The following is a feature matrix for function.

Feature matrix for function

Feature

2.x

3.x

20c.1

21c.1

22c.1

expr1 * expr2

O

O

O

O

O

expr1 + expr2

O

O

O

O

O

datetime + interval

O

O

O

O

O

+ expr

O

O

O

O

O

expr1 - expr2

O

O

O

O

O

datetime - interval

O

O

O

O

O

- expr

O

O

O

O

O

expr1 / expr2

O

O

O

O

O

str1 || str2

O

O

O

O

O

expr <comp> expr

O

O

O

O

O

expr <comp> ( subquery )

O

O

O

O

O

( subquery ) <comp> expr

O

O

O

O

O

( subquery ) <comp> ( subquery )

O

O

O

O

O

( expr, ... ) <comp> ( expr, ... )

O

O

O

O

O

( expr, ... ) <comp> ( subquery )

O

O

O

O

O

( subquery ) <comp> ( expr, ... )

O

O

O

O

O

expr <comp> {ALL|ANY|SOME} ( expr, ... )

O

O

O

O

O

expr <comp> {ALL|ANY|SOME} ( subquery )

O

O

O

O

O

( subquery ) <comp> {ALL|ANY|SOME} ( expr, ... )

O

O

O

O

O

( subquery ) <comp> {ALL|ANY|SOME} ( subquery )

O

O

O

O

O

( expr, ... ) <comp> {ALL|ANY|SOME} ( expr_list, ... )

O

O

O

O

O

( expr, ... ) <comp> {ALL|ANY|SOME} ( subquery )

O

O

O

O

O

( subquery ) <comp> {ALL|ANY|SOME} ( expr_list, ... )

O

O

O

O

O

ABS( num )

O

O

O

O

O

ACOS( num )

O

O

O

O

O

ADDDATE( date, interval )

O

O

O

O

O

ADDDATE( expr, days )

O

O

O

O

O

ADDTIME( expr1, expr2 )

O

O

O

O

O

ADD_MONTHS( date, number )

O

O

O

O

O

AND

O

O

O

O

O

ASCII( char )

X

O

O

O

O

ASIN( num )

O

O

O

O

O

ATAN( num )

O

O

O

O

O

ATAN2( num1, num2 )

O

O

O

O

O

AVG( num )

O

O

O

O

O

AVG( expr ) OVER

X

X

X

X

O

expr1 [NOT] BETWEEN [ASYMMETRIC|SYMMETRIC] expr2 AND expr3

O

O

O

O

O

BITAND( num1, num2 )

O

O

O

O

O

BITNOT( num )

O

O

O

O

O

BITOR( num1, num2 )

O

O

O

O

O

BITXOR( num1, num2 )

O

O

O

O

O

BIT_LENGTH( str )

O

O

O

O

O

BYTE_LENGTH( str )

O

O

O

O

O

CASE .. WHEN .. THEN .. ELSE .. END

O

O

O

O

O

CASE2( condition, result, ... )

O

O

O

O

O

CAST( expr AS datatype )

O

O

O

O

O

CBRT( num )

O

O

O

O

O

CEIL( num )

O

O

O

O

O

CEILING( num )

O

O

O

O

O

CHAR_LENGTH( str )

O

O

O

O

O

CHARACTER_LENGTH( str )

O

O

O

O

O

CHR( num )

X

O

O

O

O

CLOCK_DATE()

O

O

O

O

O

CLOCK_LOCALTIME()

O

O

O

O

O

CLOCK_LOCALTIMESTAMP()

O

O

O

O

O

CLOCK_TIME()

O

O

O

O

O

CLOCK_TIMESTAMP()

O

O

O

O

O

COALESCE( expr1, ..., exprN )

O

O

O

O

O

CONCAT( str1, str2 )

O

O

O

O

O

CONCATENATE( str1, str2 )

O

O

O

O

O

CONNECT_BY_ISCYCLE

X

X

X

O

O

CONNECT_BY_ISLEAF

X

X

X

O

O

CONNECT_BY_ROOT expr

X

X

X

O

O

CORR( expr1, expr2 ) OVER

X

X

X

X

O

COS( num )

O

O

O

O

O

COT( num )

O

O

O

O

O

COUNT( expr )

O

O

O

O

O

COUNT( expr ) OVER

X

X

X

X

O

COUNT(*)

O

O

O

O

O

COUNT(*) OVER

X

X

X

X

O

COVAR_POP( expr1, expr2 ) OVER

X

X

X

X

O

COVAR_SAMP( expr1, expr2 ) OVER

X

X

X

X

O

CUME_DIST() OVER

X

X

X

X

O

CURRENT_CATALOG

O

O

O

O

O

CURRENT_DATE

O

O

O

O

O

CURRENT_SCHEMA

O

O

O

O

O

CURRENT_TIME

O

O

O

O

O

CURRENT_TIMESTAMP

O

O

O

O

O

CURRENT_USER

O

O

O

O

O

seq.CURRVAL

O

O

O

O

O

CURRVAL( seq )

O

O

O

O

O

DATEADD( datepart, number, date )

O

O

O

O

O

DATEDIFF( datepart, startdate, enddate )

O

O

O

O

O

DATE_ADD( date, interval )

O

O

O

O

O

DATE_PART( field, datetime )

O

O

O

O

O

DECODE( expr, comparison, result, ... )

O

O

O

O

O

DEGREES( radians )

O

O

O

O

O

DENSE_RANK() OVER

X

X

X

X

O

DIGEST ( data, type )

X

O

O

O

O

expr IS [NOT] DISTINCT FROM expr

X

X

X

X

O

( expr, ... ) IS [NOT] DISTINCT FROM ( expr, ... )

X

X

X

X

O

DUMP( expr )

O

O

O

O

O

EXISTS( subquery )

O

O

O

O

O

EXP( num )

O

O

O

O

O

EXTRACT( field FROM datetime )

O

O

O

O

O

FACTORIAL( num )

O

O

O

O

O

FIRST : aggr_func KEEP ( DENSE_RANK FIRST ORDER BY expr, ... ) OVER

X

X

X

X

O

FIRST_VALUE( expr ) OVER

X

X

X

X

O

FLOOR( num )

O

O

O

O

O

FROM_BASE64( str )

X

O

O

O

O

FROM_TZ( timestamp, timezone )

X

X

X

O

O

GREATEST( expr, ... )

O

O

O

O

O

HASH32( expr [, expr] ... )

X

X

X

O

O

HEX( str )

X

O

O

O

O

expr1 [NOT] IN ( expr, ... )

O

O

O

O

O

expr1 [NOT] IN ( subquery )

O

O

O

O

O

subquery [NOT] IN ( <expr_list> )

O

O

O

O

O

subquery [NOT] IN ( subquery )

O

O

O

O

O

<expr_list> [NOT] IN ( <expr_list>, ... )

O

O

O

O

O

<expr_list> [NOT] IN ( subquery )

O

O

O

O

O

subquery [NOT] IN ( <expr_list>, ... )

O

O

O

O

O

INITCAP( str )

O

O

O

O

O

INSTR( str, substr, ... )

O

O

O

O

O

IS NOT NULL

O

O

O

O

O

IS NULL

O

O

O

O

O

JSON_ARRAY( expr, ... )

X

X

X

X

O

JSON_ARRAYAGG( expr )

X

X

X

X

O

JSON_ARRAYAGG( expr ) OVER

X

X

X

X

O

JSON_OBJECT( name VALUE expr, ... )

X

X

X

X

O

JSON_OBJECTAGG( name VALUE expr )

X

X

X

X

O

JSON_OBJECTAGG( name VALUE expr ) OVER

X

X

X

X

O

LAG( expr [, offset [, default]] ) OVER

X

X

X

X

O

LAST : aggr_func KEEP ( DENSE_RANK LAST ORDER BY expr, ... ) OVER

X

X

X

X

O

LAST_DAY( date )

O

O

O

O

O

LAST_IDENTITY_VALUE()

X

O

O

O

O

LAST_VALUE( expr ) OVER

X

X

X

X

O

LEAD( expr [, offset [, default]] ) OVER

X

X

X

X

O

LEAST( expr, ... )

O

O

O

O

O

LENGTH( str )

O

O

O

O

O

LENGTHB( str )

O

O

O

O

O

LEVEL

X

X

X

O

O

string [NOT] LIKE pattern ESCAPE escape_char

O

O

O

O

O

LISTAGG( str [, delimiter] ) OVER

X

X

X

X

O

LN( num )

O

O

O

O

O

LNNVL( expr )

X

X

O

O

O

LOCALTIME

O

O

O

O

O

LOCALTIMESTAMP

O

O

O

O

O

LOCAL_GROUP_ID()

X

O

O

O

O

LOCAL_GROUP_NAME()

X

O

O

O

O

LOCAL_MEMBER_ID()

X

O

O

O

O

LOCAL_MEMBER_NAME()

X

O

O

O

O

LOG( num2 )

O

O

O

O

O

LOG( num1, num2 )

O

O

O

O

O

LOGON_USER()

O

O

O

O

O

LOWER( str )

O

O

O

O

O

LPAD( str, length, fill )

O

O

O

O

O

LTRIM( str, [ str ] )

O

O

O

O

O

MAX( expr )

O

O

O

O

O

MAX( expr ) OVER

X

X

X

X

O

MEDIAN( expr ) OVER

X

X

X

X

O

MIN( expr )

O

O

O

O

O

MIN( expr ) OVER

X

X

X

X

O

MOD( num1, num2 )

O

O

O

O

O

MONTHS_BETWEEN( date1, date2 )

X

O

O

O

O

NEXT_DAY( date, day )

X

O

O

O

O

seq.NEXTVAL

O

O

O

O

O

NEXTVAL( seq )

O

O

O

O

O

NEXT VALUE FOR seq

O

O

O

O

O

NOT

O

O

O

O

O

NTH_VALUE( expr, n ) OVER

X

X

X

X

O

NTILE( expr ) OVER

X

X

X

X

O

NULLIF( expr1, expr2 )

O

O

O

O

O

NUMTODSINTERVAL( num, interval_indicator )

X

X

O

O

O

NUMTOYMINTERVAL( num, interval_indicator )

X

X

O

O

O

NVL( expr1, expr2 )

O

O

O

O

O

NVL2( expr1, expr2, expr3 )

O

O

O

O

O

OCTET_LENGTH( str )

O

O

O

O

O

OVERLAY( str1 PLACING str2 FROM start FOR length )

O

O

O

O

O

OR

O

O

O

O

O

PERCENT_RANK() OVER

X

X

X

X

O

PERCENTILE_CONT( expr ) OVER

X

X

X

X

O

PERCENTILE_DISC( expr ) OVER

X

X

X

X

O

PHYSICAL_LENGTH( expr )

X

X

O

O

O

PI()

O

O

O

O

O

POSITION( str1 IN str2 )

O

O

O

O

O

POWER( num1, num2 )

O

O

O

O

O

PRIOR expr

X

X

X

O

O

RADIANS( degrees )

O

O

O

O

O

RANDOM( min, max )

O

O

O

O

O

RANK() OVER

X

X

X

X

O

RATIO_TO_REPORT( expr ) OVER

X

X

X

X

O

REGR_AVGX( expr1, expr2 ) OVER

X

X

X

X

O

REGR_AVGY( expr1, expr2 ) OVER

X

X

X

X

O

REGR_COUNT( expr1, expr2 ) OVER

X

X

X

X

O

REGR_INTERCEPT( expr1, expr2 ) OVER

X

X

X

X

O

REGR_R2( expr1, expr2 ) OVER

X

X

X

X

O

REGR_SLOPE( expr1, expr2 ) OVER

X

X

X

X

O

REGR_SXX( expr1, expr2 ) OVER

X

X

X

X

O

REGR_SXY( expr1, expr2 ) OVER

X

X

X

X

O

REGR_SYY( expr1, expr2 ) OVER

X

X

X

X

O

REPEAT( str, num )

O

O

O

O

O

REPLACE( str, from, to )

O

O

O

O

O

REVERSE( str )

X

O

O

O

O

ROUND( num )

O

O

O

O

O

ROUND( date, fmt )

O

O

O

O

O

ROW_NUMBER() OVER

X

X

X

X

O

ROWID_GRID_BLOCK_ID( rowid )

X

O

O

O

O

ROWID_GRID_BLOCK_SEQ( rowid )

X

O

O

O

O

ROWID_MEMBER_ID( rowid )

X

O

O

O

O

ROWID_OBJECT_ID( rowid )

O

O

O

O

O

ROWID_PAGE_ID( rowid )

O

O

O

O

O

ROWID_ROW_NUMBER( rowid )

O

O

O

O

O

ROWID_SHARD_ID( rowid )

X

O

O

O

O

ROWID_TABLESPACE_ID( rowid )

O

O

O

O

O

ROWNUM

X

O

O

O

O

RPAD( str, length, fill )

O

O

O

O

O

RTRIM( str, [ str ] )

O

O

O

O

O

SESSION_ID()

O

O

O

O

O

SESSION_SERIAL()

O

O

O

O

O

SESSION_USER

O

O

O

O

O

SESSIONTIMEZONE()

X

X

X

X

O

SHARD_GROUP_ID( table, expr )

X

O

O

O

O

SHARD_GROUP_NAME( table_name, shard_key_value [, ...] )

X

O

O

O

O

SHARD_ID( table, expr )

X

O

O

O

O

SHARD_NAME( table_name, shard_key_value [, ...] )

X

O

O

O

O

SHIFT_LEFT( num, cnt )

O

O

O

O

O

SHIFT_RIGHT( num, cnt )

O

O

O

O

O

SIGN( num )

O

O

O

O

O

SIN( num )

O

O

O

O

O

SPLIT_PART( str, delimiter, field )

O

O

O

O

O

SQRT( num )

O

O

O

O

O

STATEMENT_DATE()

O

O

O

O

O

STATEMENT_LOCALTIME()

O

O

O

O

O

STATEMENT_LOCALTIMESTAMP()

O

O

O

O

O

STATEMENT_TIME()

O

O

O

O

O

STATEMENT_TIMESTAMP()

O

O

O

O

O

STATEMENT_VIEW_SCN()

O

O

O

O

O

STATEMENT_VIEW_SCN_DCN()

X

O

O

O

O

STATEMENT_VIEW_SCN_GCN()

X

O

O

O

O

STATEMENT_VIEW_SCN_LCN()

X

O

O

O

O

STDDEV( [ ALL | DISTINCT ] expr )

X

O

O

O

O

STDDEV( expr ) OVER

X

X

X

X

O

STDDEV_POP( expr )

X

O

O

O

O

STDDEV_POP( expr ) OVER

X

X

X

X

O

STDDEV_SAMP( expr )

X

O

O

O

O

STDDEV_SAMP( expr ) OVER

X

X

X

X

O

STRING_AGG( str [, delimiter] ) OVER

X

X

X

X

O

SUBSTR( str FROM start FOR length )

O

O

O

O

O

SUBSTR( str, start, length )

O

O

O

O

O

SUBSTRB( str, start, length )

O

O

O

O

O

SUBSTRING( str FROM start FOR length )

O

O

O

O

O

SUBSTRING( str, start, length )

O

O

O

O

O

SUM( expr )

O

O

O

O

O

SUM( expr ) OVER

X

X

X

X

O

SYSDATE

O

O

O

O

O

SYS_CONNECT_BY_PATH( expr, 'string' )

X

X

X

O

O

SYS_EXTRACT_UTC( datetime_with_timezone )

X

O

O

O

O

SYSTIME

O

O

O

O

O

SYSTIMESTAMP

O

O

O

O

O

TAN( num )

O

O

O

O

O

TO_CHAR( datetime, fmt )

O

O

O

O

O

TO_CHAR( number, fmt )

O

O

O

O

O

TO_BASE64( str )

X

O

O

O

O

TO_DATE( str, fmt )

O

O

O

O

O

TO_NATIVE_BIGINT( str, fmt )

X

X

O

O

O

TO_NATIVE_DOUBLE( str, fmt )

O

O

O

O

O

TO_NATIVE_INTEGER( str, fmt )

X

X

O

O

O

TO_NATIVE_REAL( str, fmt )

O

O

O

O

O

TO_NATIVE_SMALLINT( str, fmt )

X

X

O

O

O

TO_NUMBER( num, fmt )

O

O

O

O

O

TO_TIME( str, fmt )

O

O

O

O

O

TO_TIME_TZ( str, fmt )

O

O

O

O

O

TO_TIME_WITH_TIME_ZONE( str, fmt )

O

O

O

O

O

TO_TIMESTAMP( str, fmt )

O

O

O

O

O

TO_TIMESTAMP_TZ( str, fmt )

O

O

O

O

O

TO_TIMESTAMP_WITH_TIME_ZONE( str, fmt )

O

O

O

O

O

TRANSACTION_DATE()

O

O

O

O

O

TRANSACTION_LOCALTIME()

O

O

O

O

O

TRANSACTION_LOCALTIMESTAMP()

O

O

O

O

O

TRANSACTION_TIME()

O

O

O

O

O

TRANSACTION_TIMESTAMP()

O

O

O

O

O

TRANSLATE( str, from, to )

O

O

O

O

O

TRIM( LEADING|TRAILING|BOTH trim_char FROM source )

O

O

O

O

O

TRUNC( num, scale )

O

O

O

O

O

TRUNC( date, fmt )

O

O

O

O

O

UPPER( str )

O

O

O

O

O

UNHEX( str )

X

O

O

O

O

UNHEX_TO_CHARSTR( str )

X

O

O

O

O

USER_ID()

O

O

O

O

O

UUID()

X

O

O

O

O

VAR_POP( expr )

X

O

O

O

O

VAR_POP( expr ) OVER

X

X

X

X

O

VAR_SAMP( expr )

X

O

O

O

O

VAR_SAMP( expr ) OVER

X

X

X

X

O

VARIANCE( [ ALL | DISTINCT ] expr )

X

O

O

O

O

VARIANCE( expr ) OVER

X

X

X

X

O

VERSION()

O

O

O

O

O

WIDTH_BUCKET( num, min, max, cnt )

O

O

O

O

O

Object

SQL Object

The following is a feature matrix for DDL which creates/ drops/ alters an SQL object.

Feature matrix for SQL object DDL

Object

Feature

2.x

3.x

20c.1

21c.1

22c.1

Database

object

ALTER DATABASE ARCHIVELOG

O

O

O

O

O

ALTER DATABASE ADD LOGFILE

O

O

O

O

O

ALTER DATABASE DROP LOGFILE

O

O

O

O

O

ALTER DATABASE RENAME GLOBAL TRANSACTION LOGFILE

X

X

X

X

O

ALTER DATABASE RENAME LOGFILE

O

O

O

O

O

ALTER DATABASE BEGIN/END BACKUP

O

O

O

O

O

ALTER DATABASE RECOVER

O

O

O

O

O

ALTER DATABASE RECOVER TABLESPACE

O

O

O

O

O

ALTER DATABASE REGISTER

O

O

O

O

O

ALTER DATABASE RESTORE

O

O

O

O

O

ANALYZE SYSTEM

X

O

O

O

O

COMMENT ON object IS ..

O

O

O

O

O

Profile

object

CREATE PROFILE

O

O

O

O

O

DROP PROFILE

O

O

O

O

O

ALTER PROFILE

O

O

O

O

O

Audit policy

object

CREATE AUDIT POLICY

X

O

O

O

O

DROP AUDIT POLICY

X

O

O

O

O

ALTER AUDIT POLICY

X

O

O

O

O

AUDIT POLICY

X

O

O

O

O

NOAUDIT POLICY

X

O

O

O

O

Authorization

object

CREATE USER

O

O

O

O

O

DROP USER

O

O

O

O

O

ALTER USER

O

O

O

O

O

GRANT privileges TO

O

O

O

O

O

REVOKE privileges FROM

O

O

O

O

O

Schema

object

CREATE SCHEMA

O

O

O

O

O

DROP SCHEMA

O

O

O

O

O

Tablespace

object

CREATE MEMORY DATA TABLESPACE

O

O

O

O

O

CREATE MEMORY TEMPORARY TABLESPACE

O

O

O

O

O

DROP TABLESPACE

O

O

O

O

O

ALTER TABLESPACE .. RENAME TO

O

O

O

O

O

ALTER TABLESPACE .. BEGIN/END BACKUP

O

O

O

O

O

ALTER TABLESPACE .. ADD [DATAFILE|MEMORY]

O

O

O

O

O

ALTER TABLESPACE .. DROP [DATAFILE|MEMORY]

O

O

O

O

O

ALTER TABLESPACE .. RENAME DATAFILE

O

O

O

O

O

ALTER TABLESPACE .. { ONLINE | OFFLINE }

O

O

O

O

O

Table

object

CREATE TABLE

O

O

O

O

O

CREATE TABLE AS SELECT

O

O

O

O

O

CREATE GLOBAL TEMPORARY TABLE

X

O

O

O

O

CREATE GLOBAL TEMPORARY TABLE AS SELECT

X

O

O

O

O

CREATE IMMUTABLE TABLE

X

X

O

O

O

CREATE IMMUTABLE TABLE AS SELECT

X

X

O

O

O

DROP TABLE

O

O

O

O

O

TRUNCATE TABLE

O

O

O

O

O

ALTER TABLE .. STORAGE

O

O

O

O

O

ALTER TABLE .. RENAME TO

O

O

O

O

O

ALTER TABLE .. ADD COLUMN

O

O

O

O

O

ALTER TABLE .. SET UNUSED COLUMN

O

O

O

O

O

ALTER TABLE .. ALTER COLUMN

O

O

O

O

O

ALTER TABLE .. RENAME COLUMN

O

O

O

O

O

ALTER TABLE .. RENAME CONSTRAINT

X

O

O

O

O

ALTER TABLE .. ADD CONSTRAINT

O

O

O

O

O

ALTER TABLE .. DROP CONSTRAINT

O

O

O

O

O

ALTER TABLE .. ALTER CONSTRAINT

O

O

O

O

O

ALTER TABLE .. ADD SUPPLEMENTAL LOG

O

O

O

O

O

ALTER TABLE .. DROP SUPPLEMENTAL LOG

O

O

O

O

O

ALTER TABLE .. READ { ONLY | WRITE }

X

O

O

O

O

ANALYZE TABLE

X

O

O

O

O

FLASHBACK TABLE

X

X

O

O

O

PURGE

X

X

O

O

O

View

object

CREATE VIEW

O

O

O

O

O

DROP VIEW

O

O

O

O

O

ALTER VIEW

O

O

O

O

O

Index

object

CREATE INDEX

O

O

O

O

O

DROP INDEX

O

O

O

O

O

ALTER INDEX .. AGING

X

O

O

O

O

ALTER INDEX .. STORAGE

O

O

O

O

O

ALTER INDEX .. RENAME

X

O

O

O

O

ALTER INDEX .. REBUILD

X

X

O

O

O

ALTER INDEX .. COALESCE

X

X

X

X

O

Sequence

object

CREATE SEQUENCE

O

O

O

O

O

DROP SEQUENCE

O

O

O

O

O

ALTER SEQUENCE

O

O

O

O

O

Synonym

object

CREATE SYNONYM

O

O

O

O

O

DROP SYNONYM

O

O

O

O

O

CREATE PUBLIC SYNONYM

O

O

O

O

O

DROP PUBLIC SYNONYM

O

O

O

O

O

Stored procedure

object

CREATE PROCEDURE

X

O

O

O

O

DROP PROCEDURE

X

O

O

O

O

ALTER PROCEDURE

X

O

O

O

O

Stored function

object

CREATE FUNCTION

X

O

O

O

O

DROP FUNCTION

X

O

O

O

O

ALTER FUNCTION

X

O

O

O

O

Package object

CREATE PACKAGE

X

X

O

O

O

CREATE PACKAGE BODY

X

X

O

O

O

ALTER PACKAGE

X

X

O

O

O

DROP PACKAGE

X

X

O

O

O

Cluster Object

The following is a feature matrix for DDL which creates/ drops/ alters a cluster object.

Feature matrix for cluster object DDL

Object

Feature

2.x

3.x

20c.1

21c.1

22c.1

Cluster system

object

ALTER DATABASE REBALANCE

X

O

O

O

O

ALTER DATABASE DROP INACTIVE CLUSTER MEMBERS

X

O

O

O

O

ALTER DATABASE DROP OFFLINE SEGMENTS

X

X

X

X

O

ALTER DATABASE SYNCHRONIZE

X

X

X

X

O

Cluster group

object

CREATE CLUSTER GROUP

X

O

O

O

O

DROP CLUSTER GROUP

X

O

O

O

O

Cluster member

object

ALTER CLUSTER GROUP name ADD MEMBER

X

O

O

O

O

ALTER CLUSTER GROUP name OFFLINE MEMBER

X

O

O

O

O

ALTER DATABASE RESET LOCAL CLUSTER MEMBER

X

O

O

O

O

ALTER SYSTEM IRRECOVERABLE CLUSTER MEMBER

X

O

O

O

O

ALTER SYSTEM JOIN DATABASE

X

O

O

O

O

Cluster location

object

CREATE CLUSTER LOCATION

X

O

O

O

O

DROP CLUSTER LOCATION

X

O

O

O

O

ALTER CLUSTER LOCATION

X

O

O

O

O

Cluster table and shard object

ALTER TABLE name REBALANCE

X

O

O

O

O

ALTER TABLE name DROP OFFLINE SEGMENTS

X

X

X

X

O

ALTER TABLE name SYNCHRONIZE

X

X

X

X

O

ALTER TABLE name MERGE SHARDS

X

X

O

O

O

ALTER TABLE name MOVE SHARD

X

O

O

O

O

ALTER TABLE name SPLIT SHARD

X

O

O

O

O

ALTER TABLE name RENAME SHARD

X

O

O

O

O

Global secondary index object

ALTER TABLE name ADD GLOBAL SECONDARY INDEX

X

O

O

O

O

ALTER TABLE name DROP GLOBAL SECONDARY INDEX

X

O

O

O

O

ALTER TABLE name ALTER GLOBAL SECONDARY INDEX

X

O

O

O

O

ALTER TABLE name ALTER GLOBAL SECONDARY INDEX REBUILD

X

X

O

O

O

ALTER TABLE name ALTER GLOBAL SECONDARY INDEX COALESCE

X

X

X

X

O

SQL Language

DML

The following is a feature matrix for DML which manipulates data.

Feature matrix for DML

Feature

2.x

3.x

20c.1

21c.1

22c.1

INSERT INTO ..

O

O

O

O

O

INSERT INTO .. RETURNING query

O

O

O

O

O

INSERT INTO .. RETURNING .. INTO ..

O

O

O

O

O

INSERT INTO .. UPDATE

X

X

X

O

O

INSERT INTO .. UPDATE .. RETURNING ..

X

X

X

O

O

INSERT INTO .. UPDATE .. RETURNING .. INTO ..

X

X

X

O

O

DELETE FROM ..

O

O

O

O

O

DELETE FROM .. RETURNING query

O

O

O

O

O

DELETE FROM .. RETURNING .. INTO ..

O

O

O

O

O

DELETE FROM .. WHERE CURRENT OF cursor

O

O

O

O

O

UPDATE ..

O

O

O

O

O

UPDATE .. RETURNING query

O

O

O

O

O

UPDATE .. RETURNING .. INTO ..

O

O

O

O

O

UPDATE .. WHERE CURRENT OF cursor

O

O

O

O

O

CALL proc_name

X

O

O

O

O

Query

The following is a feature matrix for SELECT statement which enquires data.

Feature matrix for SELECT

Feature

2.x

3.x

20c.1

21c.1

22c.1

<query expression>

O

O

O

O

O

<query specification>

O

O

O

O

O

<select list>

O

O

O

O

O

<from clause>

O

O

O

O

O

<joined table>

O

O

O

O

O

<where clause>

O

O

O

O

O

<group by clause>

O

O

O

O

O

<window clause>

X

X

X

X

O

<window partition clause>

X

X

X

X

O

<window order clause>

X

X

X

X

O

<window frame clause>

X

X

X

X

O

<window frame exclusion>

X

X

X

X

O

<order by clause>

O

O

O

O

O

<offset limit clause>

O

O

O

O

O

<set operator>

O

O

O

O

O

<subquery>

O

O

O

O

O

<hint clause>

O

O

O

O

O

<with clause>

X

X

X

O

O

<search clause>

X

X

X

O

O

<cycle clause>

X

X

X

O

O

<start with clause>

X

X

X

O

O

<connect by clause>

X

X

X

O

O

<order siblings by clause>

X

X

X

O

O

Control Language

The following is a feature matrix for control statement.

Feature matrix for control statement

Control statement

Feature

2.x

3.x

20c.1

21c.1

22c.1

Transaction

COMMIT

O

O

O

O

O

ROLLBACK

O

O

O

O

O

SAVEPOINT

O

O

O

O

O

RELEASE SAVEPOINT

O

O

O

O

O

LOCK TABLE

O

O

O

O

O

SET CONSTRAINTS

O

O

O

O

O

SET TRANSACTION

O

O

O

O

O

Session

SET SESSION CHARACTERISTICS AS

O

O

O

O

O

SET SESSION AUTHORIZATION

O

O

O

O

O

SET SCHEMA

X

X

X

O

O

SET TIME ZONE

O

O

O

O

O

ALTER SESSION SET property

O

O

O

O

O

System

ALTER SYSTEM {OPEN|MOUNT} DATABASE

O

O

O

O

O

ALTER SYSTEM CHECKPOINT

O

O

O

O

O

ALTER SYSTEM KILL SESSION

O

O

O

O

O

ALTER SYSTEM RECONNECT GLOBAL CONNECTION

X

O

O

O

O

ALTER SYSTEM SWITCH LOGFILE

O

O

O

O

O

ALTER SYSTEM SET property

O

O

O

O

O

ALTER SYSTEM RESET property

O

O

O

O

O

PSM Language

The following is a feature matrix for Persistent Stored Module (PSM) language element.

Feature matrix for Persistent Stored Module (PSM) language element

Feature

2.x

3.x

20c.1

21c.1

22c.1

Assignment Statement

X

O

O

O

O

Basic LOOP Statement

X

O

O

O

O

Block (BEGIN .. END)

X

O

O

O

O

CASE Statement

X

O

O

O

O

CLOSE Statement

X

O

O

O

O

Collection Method Invocation

X

O

O

O

O

Collection Variable Declaration

X

O

O

O

O

CONTINUE Statement

X

O

O

O

O

Cursor FOR LOOP Statement

X

O

O

O

O

Cursor Variable Declaration

X

O

O

O

O

DELETE Statement Extension

X

O

O

O

O

EXCEPTION_INIT Pragma

X

O

O

O

O

Exception Declaration

X

O

O

O

O

Exception Handler

X

O

O

O

O

EXECUTE IMMEDIATE Statement

X

O

O

O

O

EXIT Statement

X

O

O

O

O

Explicit Cursor Declaration and Definition

X

O

O

O

O

FETCH Statement

X

O

O

O

O

FOR LOOP Statement

X

O

O

O

O

GOTO Statement

X

O

O

O

O

IF Statement

X

O

O

O

O

Implicit Cursor Attribute

X

O

O

O

O

INSERT Statement Extension

X

O

O

O

O

Named Cursor Attribute

X

O

O

O

O

NULL Statement

X

O

O

O

O

OPEN Statement

X

O

O

O

O

OPEN FOR Statement

X

O

O

O

O

Procedure Call

X

O

O

O

O

Procedure Declaration and Definition

X

O

O

O

O

RAISE Statement

X

O

O

O

O

Record Variable Declaration

X

O

O

O

O

RETURN Statement

X

O

O

O

O

RETURN TABLE Statement

X

X

X

X

O

RETURNING INTO clause

X

O

O

O

O

%ROWTYPE Attribute

X

O

O

O

O

Scalar Variable Declaration

X

O

O

O

O

SELECT INTO Statement

X

O

O

O

O

SQLCODE Function

X

O

O

O

O

SQLERRM Function

X

O

O

O

O

%TYPE Attribute

X

O

O

O

O

UPDATE Statement Extension

X

O

O

O

O

WHILE LOOP Statement

X

O

O

O

O

The following is a feature matrix for the Built-In Package.

Feature matrix for Built-in Package

Package

Sub Routine

2.x

3.x

20c.1

21c.1

22c.1

DBMS_LOCK

SLEEP()

X

X

O

O

O

DBMS_OUTPUT

DISABLE()

X

X

X

O

O

ENABLE()

X

X

X

O

O

GET_LINE()

X

X

O

O

O

NEW_LINE()

X

X

X

O

O

PUT()

X

X

X

O

O

PUT_LINE()

X

O

O

O

O

SET_LOG()

X

X

X

O

O

DBMS_SQL

RETURN_RESULT()

X

X

X

X

O

DBMS_STANDARD

RAISE_APPLICATION_ERROR()

X

O

O

O

O

API

ODBC

The following is a feature matrix for the ODBC standard API.

Feature matrix for the ODBC standard API

Feature

2.x

3.x

20c.1

21c.1

22c.1

SQLAllocHandle()

O

O

O

O

O

SQLBindCol()

O

O

O

O

O

SQLBindParameter()

O

O

O

O

O

SQLCloseCursor()

O

O

O

O

O

SQLColAttribute()

O

O

O

O

O

SQLColumnPrivileges()

O

O

O

O

O

SQLColumns()

O

O

O

O

O

SQLConnect()

O

O

O

O

O

SQLDescribeCol()

O

O

O

O

O

SQLDescribeParam()

O

O

O

O

O

SQLDisconnect()

O

O

O

O

O

SQLDriverConnect()

O

O

O

O

O

SQLEndTran()

O

O

O

O

O

SQLExecDirect()

O

O

O

O

O

SQLExecute()

O

O

O

O

O

SQLExtendedFetch()

O

O

O

O

O

SQLFetch()

O

O

O

O

O

SQLFetchScroll()

O

O

O

O

O

SQLForeignKeys()

O

O

O

O

O

SQLFreeHandle()

O

O

O

O

O

SQLFreeStmt()

O

O

O

O

O

SQLGetConnectAttr()

O

O

O

O

O

SQLGetCursorName()

O

O

O

O

O

SQLGetData()

O

O

O

O

O

SQLGetDescField()

O

O

O

O

O

SQLGetDescRec()

O

O

O

O

O

SQLGetDiagField()

O

O

O

O

O

SQLGetDiagRec()

O

O

O

O

O

SQLGetEnvAttr()

O

O

O

O

O

SQLGetFunctions()

O

O

O

O

O

SQLGetInfo()

O

O

O

O

O

SQLGetStmtAttr()

O

O

O

O

O

SQLGetTypeInfo()

O

O

O

O

O

SQLMoreResults()

O

O

O

O

O

SQLNumParams()

O

O

O

O

O

SQLNumResultCols()

O

O

O

O

O

SQLParamData()

O

O

O

O

O

SQLPrepare()

O

O

O

O

O

SQLPrimaryKeys()

O

O

O

O

O

SQLProcedureColumns()

O

O

O

O

O

SQLProcedures()

O

O

O

O

O

SQLPutData()

O

O

O

O

O

SQLRowCount()

O

O

O

O

O

SQLSetConnectAttr()

O

O

O

O

O

SQLSetCursorName()

O

O

O

O

O

SQLSetDescField()

O

O

O

O

O

SQLSetDescRec()

O

O

O

O

O

SQLSetEnvAttr()

O

O

O

O

O

SQLSetPos()

O

O

O

O

O

SQLSetStmtAttr()

O

O

O

O

O

SQLSpecialColumns()

O

O

O

O

O

SQLStatistics()

O

O

O

O

O

SQLTablePrivileges()

O

O

O

O

O

SQLTables()

O

O

O

O

O

The following is a feature matrix for API other than the ODBC standard API.

Feature matrix for API other than the ODBC standard

Feature

2.x

3.x

20c.1

21c.1

22c.1

xa_open

O

O

O

O

O

xa_close

O

O

O

O

O

xa_start

O

O

O

O

O

xa_end

O

O

O

O

O

xa_rollback

O

O

O

O

O

xa_prepare

O

O

O

O

O

xa_commit

O

O

O

O

O

xa_recover

O

O

O

O

O

xa_forget

O

O

O

O

O

SQLGetXaSwitch

O

O

O

O

O

SQLGetXaConnectionHandle

O

O

O

O

O

SQLGetGroupCount

X

O

O

O

O

SQLGetGroupIDs

X

O

O

O

O

SQLGetGroupName

X

O

O

O

O

SQLGetSuitableGroupID

X

O

O

O

O

JDBC

The following is a class feature matrix for JDBC.

Class feature matrix for JDBC

Feature

2.x

3.x

20c.1

21c.1

22c.1

CallableStatement

X

O

O

O

O

CommonDataSource

O

O

O

O

O

Connection

O

O

O

O

O

ConnectionPoolDataSource

O

O

O

O

O

DatabaseMetaData

O

O

O

O

O

DataSource

O

O

O

O

O

Driver

O

O

O

O

O

ParameterMetaData

O

O

O

O

O

PooledConnection

O

O

O

O

O

PreparedStatement

O

O

O

O

O

ResultSet

O

O

O

O

O

ResultSetMetaData

O

O

O

O

O

RowId

O

O

O

O

O

Savepoint

O

O

O

O

O

Statement

O

O

O

O

O

XAConnection

O

O

O

O

O

XADataSource

O

O

O

O

O

XAResource

O

O

O

O

O

GoldilocksInterval

O

O

O

O

O

GoldilocksTypes

O

O

O

O

O

Embedded SQL

Precompiler Option

The following is a feature matrix for precompiler option.

Feature matrix for precompiler option

Feature

2.x

3.x

20c.1

21c.1

22c.1

--help

O

O

O

O

O

--include-path

O

O

O

O

O

--no-prompt

O

O

O

O

O

--output

O

O

O

O

O

--unsafe-null

O

O

O

O

O

--version

O

O

O

O

O

--no-lineinfo

X

O

O

O

O

--char_map

X

O

O

O

O

--cumulative

X

X

O

O

O

--autocommit

X

X

X

O

O

--parse

X

X

O

O

O

Embedded SQL-only Syntax

The following is a feature matrix of embedded SQL-only syntax.

Feature matrix for embedded SQL-only syntax

Feature

2.x

3.x

20c.1

21c.1

22c.1

EXEC SQL AT

O

O

O

O

O

EXEC SQL ATOMIC INSERT

O

O

O

O

O

EXEC SQL AUTOCOMMIT

O

O

O

O

O

EXEC SQL BEGIN DECLARE SECTION

O

O

O

O

O

EXEC SQL COMMIT RELEASE

O

O

O

O

O

EXEC SQL CONNECT

O

O

O

O

O

EXEC SQL CONTEXT ALLOCATE

O

O

O

O

O

EXEC SQL CONTEXT FREE

O

O

O

O

O

EXEC SQL CONTEXT USE

O

O

O

O

O

EXEC SQL DISCONNECT

O

O

O

O

O

EXEC SQL END DECLARE SECTION

O

O

O

O

O

EXEC SQL FOR

O

O

O

O

O

EXEC SQL GET GROUPID

X

O

O

O

O

EXEC SQL INCLUDE

O

O

O

O

O

EXEC SQL INCLUDE SQLCA

O

O

O

O

O

EXEC SQL OPTION

O

O

O

O

O

EXEC SQL ROLLBACK RELEASE

O

O

O

O

O

EXEC SQL WHENEVER

O

O

O

O

O

EXEC SQL BEGIN ARGUMENT SECTION

X

X

X

O

O

EXEC SQL END ARGUMENT SECTION

X

X

X

O

O

Host Variable Data Type

The following is a feature matrix for embedded SQL data type which can be used for HOST variables.

Feature matrix for host variable data type

Feature

2.x

3.x

20c.1

21c.1

22c.1

C native type

O

O

O

O

O

struct, union

O

O

O

O

O

typedef

O

O

O

O

O

VARCHAR

O

O

O

O

O

LONG VARCHAR

O

O

O

O

O

BINARY

O

O

O

O

O

LONG VARBINARY

O

O

O

O

O

BOOLEAN

O

O

O

O

O

NUMBER

O

O

O

O

O

DATE

O

O

O

O

O

TIME

O

O

O

O

O

TIME WITH TIMEZONE

O

O

O

O

O

TIMESTAMP

O

O

O

O

O

TIMESTAMP WITH TIMEZONE

O

O

O

O

O

INTERVAL YEAR

O

O

O

O

O

INTERVAL MONTH

O

O

O

O

O

INTERVAL DAY

O

O

O

O

O

INTERVAL HOUR

O

O

O

O

O

INTERVAL MINUTE

O

O

O

O

O

INTERVAL SECOND

O

O

O

O

O

INTERVAL YEAR TO MONTH

O

O

O

O

O

INTERVAL DAY TO HOUR

O

O

O

O

O

INTERVAL DAY TO MINUTE

O

O

O

O

O

INTERVAL DAY TO SECOND

O

O

O

O

O

INTERVAL HOUR TO MINUTE

O

O

O

O

O

INTERVAL HOUR TO SECOND

O

O

O

O

O

INTERVAL MINUTE TO SECOND

O

O

O

O

O

Dynamic SQL

The following is a feature matrix for dynamic SQL.

Feature matrix for dynamic SQL

Feature

2.x

3.x

20c.1

21c.1

22c.1

SELECT .. INTO

O

O

O

O

O

EXECUTE IMMEDIATE sql

O

O

O

O

O

PREPARE stmt

O

O

O

O

O

EXECUTE stmt

O

O

O

O

O

DECLARE cursor FOR sql

O

O

O

O

O

DECLARE cursor FOR stmt

O

O

O

O

O

OPEN cursor

O

O

O

O

O

OPEN cursor USING

O

O

O

O

O

FETCH cursor INTO

O

O

O

O

O

CLOSE cursor

O

O

O

O

O

DELETE .. WHERE CURRENT OF cursor

O

O

O

O

O

UPDATE .. WHERE CURRENT OF cursor

O

O

O

O

O

PyDBC

Module

The following is a method feature matrix for pygoldilocks provided by PyDBC.

Feature matrix for pygoldilock method

Feature

2.x

3.x

20c.1

21c.1

22c.1

connect

X

O

O

O

O

Date

X

O

O

O

O

Time

X

O

O

O

O

Timestamp

X

O

O

O

O

DateFromTicks

X

O

O

O

O

TimeFromTicks

X

O

O

O

O

TimestampFromTicks

X

O

O

O

O

Binary

X

O

O

O

O

STRING

X

O

O

O

O

BINARY

X

O

O

O

O

NUMBER

X

O

O

O

O

DATETIME

X

O

O

O

O

ROWID

X

O

O

O

O

getDecimalSeparator

X

O

O

O

O

setDecimalSeparator

X

O

O

O

O

The following is an attribute feature matrix for pygoldilocks module.

Feature matrix for pygoldilock attribute

Feature

2.x

3.x

20c.1

21c.1

22c.1

apilevel

X

O

O

O

O

threadsafety

X

O

O

O

O

paramstyle

X

O

O

O

O

version

X

O

O

O

O

lowercase

X

O

O

O

O

Connection

The following is a method feature matrix for connection object.

Feature matrix for connection method

Feature

2.x

3.x

20c.1

21c.1

22c.1

cursor

X

O

O

O

O

commit

X

O

O

O

O

rollback

X

O

O

O

O

close

X

O

O

O

O

getinfo

X

O

O

O

O

execute

X

O

O

O

O

set_attr

X

O

O

O

O

The following is an attribute feature matrix for connection object.

Feature matrix for connection attribute

Feature

2.x

3.x

20c.1

21c.1

22c.1

autocommit

X

O

O

O

O

searchescape

X

O

O

O

O

timeout

X

O

O

O

O

Cursor

The following is a method feature matrix for cursor object.

Feature matrix for cursor method

Feature

2.x

3.x

20c.1

21c.1

22c.1

excute

X

O

O

O

O

executemany

X

O

O

O

O

fetchone

X

O

O

O

O

fetchall

X

O

O

O

O

fetchmany

X

O

O

O

O

commit

X

O

O

O

O

rollback

X

O

O

O

O

skip

X

O

O

O

O

nextset

X

O

O

O

O

close

X

O

O

O

O

setinputsizes

X

O

O

O

O

setoutputsize

X

O

O

O

O

callproc

X

O

O

O

O

callfunc

X

O

O

O

O

tables

X

O

O

O

O

columns

X

O

O

O

O

statistics

X

O

O

O

O

rowIdColumns

X

O

O

O

O

rowVerColumns

X

O

O

O

O

primaryKeys

X

O

O

O

O

foreignKeys

X

O

O

O

O

procedures

X

O

O

O

O

getTypeInfo

X

O

O

O

O

The following is an attribute feature matrix for cursor object.

Feature matrix for cursor attribute

Feature

2.x

3.x

20c.1

21c.1

22c.1

Description

X

O

O

O

O

rowcount

X

O

O

O

O

arraysize

X

O

O

O

O

connection

X

O

O

O

O

fast_executemany

X

O

O

O

O

Row

The following is an attribute feature matrix for row object.

Feature matrix for row attribute

Feature

2.x

3.x

20c.1

21c.1

22c.1

cursor_description

X

O

O

O

O

Utility

gcreatedb

Command Usage

The following is a feature matrix for command usage of gcreatedb.

Feature matrix for command usage of gcreatedb

Feature

2.x

3.x

20c.1

21c.1

22c.1

--character_set

O

O

O

O

O

--char_length_units

O

O

O

O

O

--cluster

X

O

O

O

O

--db_comment

O

O

O

O

O

--help

O

O

O

O

O

--host

X

O

O

O

O

--member

X

O

O

O

O

--port

X

O

O

O

O

--silent

O

O

O

O

O

--timezone

O

O

O

O

O

glsnr

Command Usage

The following is a feature matrix for command usage of glsnr.

Feature matrix for command usage of glsnr

Feature

2.x

3.x

20c.1

21c.1

22c.1

--help

O

O

O

O

O

--home

X

O

O

O

O

--silent

O

O

O

O

O

--start

O

O

O

O

O

--status

O

O

O

O

O

--stop

O

O

O

O

O

Configuration File

The following is a feature matrix for configuration of glsnr.

Feature matrix for configuration of glsnr

Feature

2.x

3.x

20c.1

21c.1

22c.1

BACKLOG

O

O

O

O

O

DEFAULT_CS_MODE

O

O

O

O

O

LISTENER_LOG_DIR

X

O

O

O

O

LISTEN_PORT

O

O

O

O

O

TCP_EXCLUDED

O

O

O

O

O

TCP_INVITED

O

O

O

O

O

TCP_HOST

O

O

O

O

O

TCP_VALIDNODE_CHECKING

O

O

O

O

O

TIMEOUT

O

O

O

O

O

USR_DIR

X

O

O

O

O

gsql/ gsqlnet

Command Usage

The following is a feature matrix for command usage of gsql.

Feature matrix for command usage of gsql

Feature

2.x

3.x

20c.1

21c.1

22c.1

username password

O

O

O

O

O

--as {SYSDBA|ADMIN}

O

O

O

O

O

--conn-string

O

O

O

O

O

--dsn

O

O

O

O

O

--enable-color

O

O

O

O

O

--help

O

O

O

O

O

--import

O

O

O

O

O

--no-prompt

O

O

O

O

O

--prompt

O

O

O

O

O

--silent

O

O

O

O

O

--version

O

O

O

O

O

Interactive gsql Command

The following is a feature matrix for interactive gsql command which is used in gsql prompt state.

Feature matrix for interactive gsql command

Feature

2.x

3.x

20c.1

21c.1

22c.1

\\

O

O

O

O

O

\connect userid password [as sysdba]

O

O

O

O

O

\cshutdown

X

O

O

O

O

\cstartup

X

O

O

O

O

\ddl_cluster

X

O

O

O

O

\ddl_db

O

O

O

O

O

\ddl_tablespace

O

O

O

O

O

\ddl_profile

O

O

O

O

O

\ddl_audit_policy

X

O

O

O

O

\ddl_auth

O

O

O

O

O

\ddl_schema

O

O

O

O

O

\ddl_public_synonym

O

O

O

O

O

\ddl_table

O

O

O

O

O

\ddl_constraint

O

O

O

O

O

\ddl_index

O

O

O

O

O

\ddl_view

O

O

O

O

O

\ddl_sequence

O

O

O

O

O

\ddl_synonym

O

O

O

O

O

\ddl_procedure

X

O

O

O

O

\ddl_package

X

O

O

O

O

\desc

O

O

O

O

O

\dynamic sql :var

O

O

O

O

O

\exec

O

O

O

O

O

\exec :var := :value

O

O

O

O

O

\exec sql

O

O

O

O

O

\explain plan [on|only]

O

O

O

O

O

\help

O

O

O

O

O

\history

O

O

O

O

O

\host {os_command}

X

O

O

O

O

\import

O

O

O

O

O

\idesc

O

O

O

O

O

\{n}

O

O

O

O

O

\prepare sql

O

O

O

O

O

\print

O

O

O

O

O

\quit

O

O

O

O

O

\set autocommit

O

O

O

O

O

\set color

O

O

O

O

O

\set colsize

O

O

O

O

O

\set ddlsize

O

O

O

O

O

\set error

O

O

O

O

O

\set history

O

O

O

O

O

\set linesize

O

O

O

O

O

\set numsize

O

O

O

O

O

\set pagesize

O

O

O

O

O

\set sqlprompt

X

X

X

X

O

\set timing

O

O

O

O

O

\set vertical

O

O

O

O

O

\shutdown {abort|immediate|transactional|normal}

O

O

O

O

O

\startup {nomount|mount|open}

O

O

O

O

O

\var

O

O

O

O

O

gloader/ gloadernet

Command Usage

The following is a feature matrix for command usage of gloader.

Feature matrix for command usage of gloader

Feature

2.x

3.x

20c.1

21c.1

22c.1

username password

O

O

O

O

O

--array

O

O

O

O

O

--atomic

O

O

O

O

O

--bad

O

O

O

O

O

--buffered

O

O

O

O

O

--commit

O

O

O

O

O

--control

O

O

O

O

O

--data

O

O

O

O

O

--dsn

O

O

O

O

O

--errors

O

O

O

O

O

--export

O

O

O

O

O

--fieldterm

X

O

O

O

O

--filesize

O

O

O

O

O

--format

O

O

O

O

O

--help

O

O

O

O

O

--import

O

O

O

O

O

--lineterm

X

O

O

O

O

--log

O

O

O

O

O

--no-prompt

O

O

O

O

O

--parallel

O

O

O

O

O

--propagation

O

O

O

O

O

--qualifier

X

O

O

O

O

--silent

O

O

O

O

O

--AsTIMESTAMP

O

O

O

O

O

--where

X

O

O

O

O

--group-id

X

O

O

O

O

--directio-size

X

O

O

O

O

Control File Syntax

The following is a feature matrix for control file syntax of gloader.

Feature matrix for control file syntax of gloader

Feature

2.x

3.x

20c.1

21c.1

22c.1

CHARACTERSET

O

O

O

O

O

FIELDS TERMINATED BY

O

O

O

O

O

OPTIONALLY ENCLOSED BY

O

O

O

O

O

TABLE table_name

O

O

O

O

O

TABLE schema_name.table_name

O

O

O

O

O

LTRIM

X

O

O

O

O

RTRIM

X

O

O

O

O

LINES TERMINATED BY

X

O

O

O

O

WHERE

X

O

O

O

O

gdump

Command Usage

The following is a feature matrix for command usage of gdump.

Feature matrix for command usage of gdump

Item

Feature

2.x

3.x

20c.1

21c.1

22c.1

Common arguments

--silent

O

O

O

O

O

File type

BACKUP

O

O

O

O

O

COMMIT_LOG

X

O

O

O

O

CONTROL

O

O

O

O

O

DATA

O

O

O

O

O

LOG

O

O

O

O

O

LOG_BUFFER

X

O

O

O

O

PEND_BUFFER

X

O

O

O

O

PROPERTY

O

O

O

O

O

BACKUP file arguments

--body

O

O

O

O

O

--tbs

O

O

O

O

O

--number

O

O

O

O

O

--fetch

O

O

O

O

O

CONTROL file arguments

--section

O

O

O

O

O

DATA file arguments

--header

O

O

O

O

O

--number

O

O

O

O

O

--fetch

O

O

O

O

O

LOG file arguments

--all

X

O

O

O

O

--fetch

O

O

O

O

O

--header

X

O

O

O

O

--number

O

O

O

O

O

--offset

O

O

O

O

O

tablediff

Configuration File

The following is a feature matrix for configuration file of tablediff.

Feature matrix for configuration file of tablediff

Item

Feature

2.x

3.x

20c.1

21c.1

22c.1

Source table

SOURCE_PASSWORD

O

O

O

O

O

SOURCE_SCHEMA

O

O

O

O

O

SOURCE_TABLE

O

O

O

O

O

SOURCE_URL

O

O

O

O

O

SOURCE_USER

O

O

O

O

O

Target table

TARGET_PASSWORD

O

O

O

O

O

TARGET_SCHEMA

O

O

O

O

O

TARGET_TABLE

O

O

O

O

O

TARGET_URL

O

O

O

O

O

TARGET_USER

O

O

O

O

O

Sync operation

TARGET_INSERT

O

O

O

O

O

TARGET_UPDATE

O

O

O

O

O

TARGET_DELETE

O

O

O

O

O

SOURCE_INSERT

O

O

O

O

O

Operation options

DIFF_BIN_FILE

O

O

O

O

O

DIFF_OUT_FILE

O

O

O

O

O

DISPLAY_CALL_STACK

O

O

O

O

O

DISPLAY_ROW_UNIT

O

O

O

O

O

EXCLUDE_COLUMNS

O

O

O

O

O

LOGGING_ON_DIFF

O

O

O

O

O

LOGGING_ON_SUCCESS

O

O

O

O

O

JOB_QUEUE_SIZE

O

O

O

O

O

JOB_THREAD

O

O

O

O

O

JOB_UNIT_SIZE

O

O

O

O

O

PARTITION_RANGE

O

O

O

O

O

SYNC_OUT_FILE

O

O

O

O

O

WHERE_CLAUSE

O

O

O

O

O

gsyncher

Command Usage

The following is a feature matrix for command usage of gsyncher.

Feature matrix for command usage of gsyncher

Feature

2.x

3.x

20c.1

21c.1

22c.1

--log

O

O

O

O

O

--silent

O

O

O

O

O

--home

X

O

O

O

O

--copy-right

O

O

O

O

O

--backup-path

O

O

O

O

O

--help

O

O

O

O

O

gmon

Command Usage

The following is a feature matrix for command usage of gmon.

Feature matrix for command usage of gmon

Feature

2.x

3.x

20c.1

21c.1

22c.1

--start

X

O

O

O

O

--stop

X

O

O

O

O

--status

X

O

O

O

O

--home

X

O

O

O

O

--uds_dir

X

X

O

O

O

--silent

X

O

O

O

O

--no-copyright

X

O

O

O

O

--help

X

O

O

O

O

gtrclogger

Command Usage

The following is a feature matrix for command usage of gtrclogger.

Feature matrix for command usage of gtrclogger

Feature

2.x

3.x

20c.1

21c.1

22c.1

--dir

X

O

O

O

O

--help

X

O

O

O

O

--port

X

O

O

O

O

--start

X

O

O

O

O

--stop

X

O

O

O

O

glocator

Command Usage

The following is a feature matrix for command usage of glocator.

Feature matrix for command usage of glocator

Feature

2.x

3.x

20c.1

21c.1

22c.1

--create

X

O

O

O

O

--start

X

O

O

O

O

--stop

X

O

O

O

O

--conf

X

O

O

O

O

--status

X

O

O

O

O

--sync

X

O

O

O

O

--silent

X

O

O

O

O

--no-copyright

X

O

O

O

O

--help

X

O

O

O

O

Configuration File

The following is a feature matrix for configuration file of glocator.

Feature matrix for configuration file of glocator

Feature

2.x

3.x

20c.1

21c.1

22c.1

PORT

X

O

O

O

O

WORKER_COUNT

X

O

O

O

O

SESSION_QUEUE_SIZE

X

O

O

O

O

SESSION_ALLOCATOR_SIZE

X

O

O

O

O

PACKET_ALLOCATOR_SIZE

X

O

O

O

O

SYSTEM_LOGGER_DIR

X

O

O

O

O

SYSTEM_UDS_DIR

X

O

O

O

O

LOCATION_FILE_DIR

X

O

O

O

O

LOCATION_FILE_SIZE

X

O

O

O

O

LOCATION_FILE_MAX_SIZE

X

O

O

O

O

SESSION_TIMEOUT

X

O

O

O

O

FAILOVER_TIMEOUT

X

O

O

O

O

ALTERNATE_LOCATORS

X

O

O

O

O

SYNC_RETRY_COUNT

X

O

O

O

O

SYNC_RESPONSE_TIMEOUT

X

O

O

O

O

gagent

Command Usage

The following is a feature matrix for command usage of gagent.

Feature matrix for command usage of gagent

Feature

2.x

3.x

20c.1

21c.1

22c.1

--start

X

O

O

O

O

--stop

X

O

O

O

O

--conf

X

O

O

O

O

--status

X

O

O

O

O

--home

X

O

O

O

O

--silent

X

O

O

O

O

--no-copyright

X

O

O

O

O

--help

X

O

O

O

O

Configuration File

The following is a feature matrix for configuration file of gagent.

Feature matrix for configuration file of gagent

Feature

2.x

3.x

20c.1

21c.1

22c.1

PORT

X

O

O

O

O

LOCATOR_HOST

X

O

O

O

O

LOCATOR_PORT

X

O

O

O

O

COMMAND_QUEUE_SIZE

X

O

O

O

O

COMMAND_ALLOCATOR_SIZE

X

O

O

O

O

PACKET_ALLOCATOR_SIZE

X

O

O

O

O

SYSTEM_LOGGER_DIR

X

O

O

O

O

SESSION_TIMEOUT

X

O

O

O

O

UPDATE_LOCATION_TIME

X

O

O

O

O

ALTERNATE_LOCATORS

X

O

O

O

O

gloctl

Command Usage

The following is a feature matrix for command usage of gloctl.

Feature matrix for command usage of gloctl

Feature

2.x

3.x

20c.1

21c.1

22c.1

--dsn

X

X

X

X

X

--conf

X

O

O

O

O

--ip

X

O

O

O

O

--port

X

O

O

O

O

--import

X

O

O

O

O

--silent

X

O

O

O

O

--no-copyright

X

O

O

O

O

--help

X

O

O

O

O

Configuration File

The following is a feature matrix for configuration file of gloctl.

Feature matrix for configuration file of gloctl

Feature

2.x

3.x

20c.1

21c.1

22c.1

PORT

X

O

O

O

O

LOCATOR_HOST

X

O

O

O

O

LOCATOR_PORT

X

O

O

O

O

Replication

cyclone

Command Usage

The following is a feature matrix for command usage of cyclone.

Feature matrix for command usage of cyclone

Feature

2.x

3.x

20c.1

21c.1

22c.1

--conf

O

O

O

O

O

--encrypt

X

O

O

O

O

--group

O

O

O

O

O

--help

O

O

O

O

O

--key

X

O

O

O

O

--master

O

O

O

O

O

--reset

O

O

O

O

O

--silent

O

O

O

O

O

--slave

O

O

O

O

O

--start

O

O

O

O

O

--status

O

O

O

O

O

--stop

O

O

O

O

O

--sync

O

O

O

O

O

--stand-alone

X

O

O

O

O

--recovery

X

O

O

O

O

--local

X

O

O

O

O

--info

X

O

O

O

O

Configuration File

The following is a feature matrix for configuration file of cyclone.

Feature matrix for configuration file of cyclone

Configuration

Feature

2.x

3.x

20c.1

21c.1

22c.1

Common configuration

COMM_CHUNK_COUNT

O

O

O

O

O

DSN

O

O

O

O

O

USER_ENCRYPT_PW

X

O

O

O

O

GROUP_NAME

O

O

O

O

O

HOST_IP

O

O

O

O

O

HOST_EXTERNAL_IP

X

O

O

O

O

HOST_PORT

O

O

O

O

O

PORT

O

O

O

O

O

PROTOCOL

X

O

O

O

O

USER_ID

O

O

O

O

O

USER_PW

O

O

O

O

O

HEARTBEAT_TIMEOUT

X

X

O

O

O

MASTER configuration

CAPTURE_TABLE

O

O

O

O

O

LOG_PATH

O

O

O

O

O

READ_LOG_BLOCK_COUNT

O

O

O

O

O

TRANS_SORT_AREA_SIZE

O

O

O

O

O

TRANS_FILE_PATH

O

O

O

O

O

SYNCHER_COUNT

O

O

O

O

O

SYNC_ARRAY_SIZE

O

O

O

O

O

GIVEUP_INTERVAL

O

O

O

O

O

SKIP_COMMENT

X

X

O

O

O

SUPPLEMENTAL_LOG_FORCE_MODE

X

X

X

X

O

PACKET_COMPRESSION_MODE

X

X

X

O

O

SYNC_ORACLE_DRIVER

X

X

X

X

O

SYNC_MYSQL_DRIVER

X

X

X

X

O

SYNC_DB2_DRIVER

X

X

X

X

O

SYNC_TIBERO_DRIVER

X

X

X

X

O

LOG_CAPTURE_INTERVAL_1

X

O

O

O

O

LOG_CAPTURE_INTERVAL_2

X

O

O

O

O

SLAVE configuration

APPLIER_COUNT

O

O

O

O

O

APPLY_ARRAY_SIZE

O

X

X

X

X

APPLY_COMMIT_SIZE

O

O

O

O

O

APPLY_TABLE

O

O

O

O

O

MASTER_IP

O

O

O

O

O

PROPAGATE_MODE

O

O

O

O

O

CLUSTER

X

O

O

O

O

UPDATE_APPLY_MODE

X

X

O

O

O

ORACLE_DRIVER

X

O

O

O

O

DB2_DRIVER

X

X

X

O

O

DB2_DATABASE

X

X

X

O

O

MYSQL_DRIVER

X

X

X

O

O

MYSQL_DATABASE

X

X

X

O

O

TIBERO_DRIVER

X

X

X

O

O

clustone

Clustone is deprecated.

logmirror

Command Usage

The following is a feature matrix for command usage of logmirror.

Feature matrix for command usage of logmirror

Feature

2.x

3.x

20c.1

21c.1

22c.1

--conf

O

O

O

O

O

--help

O

O

O

O

O

--infiniband

O

O

O

O

O

--master

O

O

O

O

O

--silent

O

O

O

O

O

--slave

O

O

O

O

O

--start

O

O

O

O

O

--stop

O

O

O

O

O

Configuration File

The following is a feature matrix for configuration file of logmirror.

Feature matrix for configuration file of logmirror

Configuration

Feature

2.x

3.x

20c.1

21c.1

22c.1

Common configuration

PORT

O

O

O

O

O

MASTER configuration

DSN

O

O

O

O

O

HOST_IP

O

O

O

O

O

HOST_PORT

O

O

O

O

O

PROTOCOL

X

O

O

O

O

USER_ID

O

O

O

O

O

USER_PW

O

O

O

O

O

SLAVE configuration

LOG_PATH

O

O

O

O

O

MASTER_IP

O

O

O

O

O

cymon

Command Usage

The following is a feature matrix for command usage of cymon.

Feature matrix for command usage of cymon

Feature

2.x

3.x

20c.1

21c.1

22c.1

--conf

O

O

O

O

O

--help

O

O

O

O

O

--cycle

O

O

O

O

O

--key

X

O

O

O

O

--start

O

O

O

O

O

--stop

O

O

O

O

O

--status

O

O

O

O

O

cyfile

Command Usage

The following is a feature matrix for command usage of cyfile.

Feature matrix for command usage of cyfile

Feature

2.x

3.x

20c.1

21c.1

22c.1

--conf

X

X

O

O

O

--help

X

X

O

O

O

--reset

X

X

O

O

O

--key

X

X

O

O

O

--silent

X

X

O

O

O

--info

X

X

O

O

O

--start

X

X

O

O

O

--stop

X

X

O

O

O

--group

X

X

O

O

O

--encrypt

X

X

O

O

O

--status

X

X

O

O

O

Configuration File

The following is a feature matrix for configuration file of cyfile.

Feature matrix for configuration file of cyfile

Feature

2.x

3.x

20c.1

21c.1

22c.1

DSN

X

X

O

O

O

HOST_IP

X

X

O

O

O

HOST_PORT

X

X

O

O

O

PROTOCOL

X

X

O

O

O

USER_ID

X

X

O

O

O

USER_PW

X

X

O

O

O

GROUP_NAME

X

X

O

O

O

USER_ENCRYPT_PW

X

X

O

O

O

CAPTURE_TABLE

X

X

O

O

O

READ_LOG_BLOCK_COUNT

X

X

O

O

O

TRANS_SORT_AREA_SIZE

X

X

O

O

O

TRANS_FILE_PATH

X

X

O

O

O

LOG_CAPTURE_INTERVAL_1

X

X

O

O

O

LOG_CAPTURE_INTERVAL_2

X

X

O

O

O

DATA_FILE_PATH

X

X

O

O

O

DATA_FILE_PREFIX

X

X

O

O

O

DATA_FILE_SIZE

X

X

O

O

O

UPDATE_BEFORE_VALUE

X

X

O

O

O

What's New in GOLDILOCKS 22c.1

This chapter briefly describes the features added to GOLDILOCKS 22c.1.

Architecture

System Architecture

It has not been changed.

Storage Internal

It has not been changed.

Transaction Control

It has not been changed.

Backup & Recovery

It has not been changed.

Database Information

DICTIONARY_SCHEMA

It has not been changed.

INFORMATION_SCHEMA

It has not been changed.

PERFORMANCE_VIEW_SCHEMA

V$OPEN_CURSOR has been added.

V$PROPERTY_ALIAS has been added.

V$DB_PROPERTY has been added.

V$LICENSE has been added.

Server Property

REBALANCE_SHARD_DIVISOR has been added.

SESSION_MEMORY_INIT_SIZE has been added.

SESSION_POOL_NEXT_SIZE has been added.

ADMIN_SESSION_POOL_INIT_SIZE has been added.

ADMIN_SESSION_POOL_NEXT_SIZE has been added.

The default value of DEFAULT_INDEX_PCTFREE has been changed to 10.

The default value of DEFAULT_MAXTRANS has been changed to 32.

The name of the property INCREMENTAL_CHECKPOINT_CRITERIA which sets the criteria to perform the incremental checkpoint of system, has been changed to BUFFER_DIRTY_PAGE_LIMIT. Its default value also has been changed to 0.

BUFFER_LRU_SCAN_PERCENT property has been added to improve the buffer management algorithm for the disk tablespace.

CLUSTER_CM_BUFFER_COUNT property, which specifies the number of communication buffers in a cluster environment, has been deprecated. Instead, LOCKABLE_DISPATCHER_CM_BUFFER_COUNT, LOCKLESS_DISPATCHER_CM_BUFFER_COUNT, and SYNC_DISPATCHER_CM_BUFFER_COUNT properties that specify the number of communication buffers for lockable, lockless, and synchronization dispatchers have been added.

The threshold of the table size determines whether to cache the tables created in the disk tablespace to buffer cache when performing a full scan. FULL_TABLE_SCAN_CACHING_THRESHOLD property, which sets this threshold value, has been added.

INST_HASH_TABLE_BUCKET_MAX_COUNT property has been added to set the maximum expected bucket counts of the hash instant table.

The maximum number of SQL to be cached in the plan cache used to be controlled by two properties. MAXIMUM_FLANGE_COUNT property was deprecated, so only PLAN_CACHE_SIZE controls the maximum number of SQL.

INDEX_LOGGING_THROTTLING property has been added to control the logging speed during index creation and rebuild operations.

SQL

SQL Element

Data Type

It has not been changed.

Function

DISTINCT Condition has been added.

SESSIONTIMEZONE has been added.

Window Function has been added.

Object

SQL Object

It has not been changed.

Cluster Object

ALTER DATABASE DROP OFFLINE SEGMENTS has been added.
ALTER DATABASE SYNCHRONIZE has been added.
ALTER TABLE name DROP OFFLINE SEGMENTS has been added.
ALTER TABLE name SYNCHRONIZE has been added.
SHARD DIVISOR and PARALLEL options have been added to ALTER DATABASE MOVE SHARD, ALTER DATABASE REBALANCE, ALTER DATABASE REBALANCE EXCLUDE CLUSTER GROUP, ALTER TABLE name MOVE SHARD, ALTER TABLE name REBALANCE, ALTER TABLE name REBALANCE EXCLUDE CLUSTER GROUP cluster_group_list.
ALTER TABLE REBUILD GLOBAL SECONDARY INDEX statement has been changed to ALTER TABLE name ALTER GLOBAL SECONDARY INDEX REBUILD.

SQL Language

DML

It has not been changed.

Query

Lateral Inline View

Lateral inline view has been added to from clause.

Table Function Derived Table

Table function derived table has been added to from clause.

WINDOW Clause
WINDOW clause has been added, which defines the execution range of the window function.
For more information, refer to window clause.

Control Language

It has not been changed.

PSM Language

Table Function

TABLE ( table function column list ) statement has been added to return clause.
The table function can be created by defining the table type when performing function DDL.
For more information, refer to CREATE FUNCTION.

RETURN TABLE Statement

RETURN TABLE Statement has been added to the PSM statement.

Performance Improvement of PSM statement

The performance of PSM syntax has been improved as follows.

API

ODBC

TRACE_POLICY has been added to Data Source Configuration.

JDBC

It has been modified to prevent missing microsecond when outputting time type and timestamp type in string.

It supports the auto-generated key.

GoldilocksTypes.REF_CURSOR has been added.

GoldilocksPreparedStatement.setFixedCHAR(), a JDBC non standard function, has been added.

Embedded SQL

Precompiler Option

The --parse option has been added to gpec.

Embedded SQL-only Statement

gpec supports Declaring Function Argument.

PDO

It has not been changed.

PyDBC

It has not been changed.

Ruby

It has not been changed.

Hibernate

It has not been changed.

Utility

gcreatedb

It has not been changed.

glsnr

It has not been changed.

gsql/gsqlnet

\set sqlprompt command has been added.

gloader/gloadernet

It has not been changed.

gdump

It has not been changed.

tablediff

It has not been changed.

gsyncher

It has not been changed.

gmon

It has not been changed.

gtrclogger

It has not been changed.

glocator

It has not been changed.

gagent

It has not been changed.

gloctl

It has not been changed.

Replication

cyclone

A data migration feature to external databases (Oracle, DB2, MySQL, Tibero) has been added.

logmirror

It has not been changed.

cymon

It has not been changed.

cyfile

It has not been changed.

Patch Notes

22c.1.10 Patch Notes

ISSUE-7939 Full table scan may occur after adding a low-selectivity composite index

Description

An issue was identified where adding a low-selectivity composite index could cause a query that previously performed an index scan to perform a full table scan instead. This issue has been fixed.
This behavior occurred only when all of the following conditions were satisfied:
• The index previously used by the query is a composite index.
• The query specifies '=' conditions for only a subset of the index key columns, rather than for all columns in the index.

Symptom

When a composite index contains both high-selectivity columns and low-selectivity columns, the optimizer may choose a full table scan instead of the existing index scan.

DROP TABLE t1;
COMMIT;

CREATE TABLE t1 ( c_good  INTEGER
                , c_bad_1 INTEGER
                , c_bad_2 INTEGER
                , c_bad_3 INTEGER
                , c_bad_4 INTEGER
                , c_bad_5 INTEGER );
                
CREATE INDEX idx1 ON t1( c_good
                       , c_bad_1
                       , c_bad_2
                       , c_bad_3
                       , c_bad_4 );
COMMIT;

BEGIN
   FOR i IN 1 .. 10000 LOOP
       INSERT INTO t1 VALUES ( i, 0, 0, 0, 0, 0 );
   END LOOP;
END;
/

COMMIT;

ANALYZE TABLE t1;
COMMIT;

In the example above, a composite index ( c_good, c_bad_1, c_bad_2, c_bad_3, c_bad_4) exists. The following query specifies filter conditions on only a subset of the index key columns ( c_good, c_bad_1, c_bad_2, c_bad_3 ), and therefore performs an index scan.

\explain plan
SELECT *
  FROM t1
 WHERE c_good  = 999
   AND c_bad_1 = 0    
   AND c_bad_2 = 0
   AND c_bad_3 = 0
;

C_GOOD C_BAD_1 C_BAD_2 C_BAD_3 C_BAD_4 C_BAD_5
------ ------- ------- ------- ------- -------
   999       0       0       0       0       0

1 row selected.

>>>  start print plan

< Execution Plan >
======================================================================
|  IDX  |  NODE DESCRIPTION                |                    ROWS |
----------------------------------------------------------------------
|    0  |  SELECT STATEMENT                |                       1 |
|    1  |    QUERY BLOCK ("$QB_IDX_2")     |                       1 |
|    2  |      INDEX ACCESS ("T1", "IDX1") | (         1)          1 |
======================================================================

     1  -  TARGET : T1.C_GOOD, T1.C_BAD_1, T1.C_BAD_2, T1.C_BAD_3, T1.C_BAD_4, T1.C_BAD_5
     2  -  READ INDEX COLUMN : T1.C_GOOD, T1.C_BAD_1, T1.C_BAD_2, T1.C_BAD_3, T1.C_BAD_4
           READ TABLE COLUMN : T1.C_BAD_5
             MIN RANGE : T1.C_GOOD = 999 AND T1.C_BAD_1 = 0 AND T1.C_BAD_2 = 0 AND T1.C_BAD_3 = 0
             MAX RANGE : T1.C_GOOD = 999 AND T1.C_BAD_1 = 0 AND T1.C_BAD_2 = 0 AND T1.C_BAD_3 = 0

<<<  end print plan

However, if another composite index consisting of low-selectivity columns is added as follows, the query that previously performed an index scan may instead perform a full scan.

--##########################################
--# Add a Low-Selectivity Composite Index 
--##########################################

CREATE INDEX idx2 ON t1( c_bad_2
                       , c_bad_3 );
COMMIT;

ANALYZE TABLE t1;
COMMIT;

\explain plan
SELECT *
  FROM t1
 WHERE c_good  = 999
   AND c_bad_1 = 0  
   AND c_bad_2 = 0
   AND c_bad_3 = 0
;

C_GOOD C_BAD_1 C_BAD_2 C_BAD_3 C_BAD_4 C_BAD_5
------ ------- ------- ------- ------- -------
   999       0       0       0       0       0

1 row selected.

>>>  start print plan

< Execution Plan >
======================================================================
|  IDX  |  NODE DESCRIPTION                |                    ROWS |
----------------------------------------------------------------------
|    0  |  SELECT STATEMENT                |                       1 |
|    1  |    QUERY BLOCK ("$QB_IDX_2")     |                       1 |
|    2  |      TABLE ACCESS ("T1")         |                       1 |
======================================================================

     1  -  TARGET : T1.C_GOOD, T1.C_BAD_1, T1.C_BAD_2, T1.C_BAD_3, T1.C_BAD_4, T1.C_BAD_5
     2  -  READ COLUMN : T1.C_GOOD, T1.C_BAD_1, T1.C_BAD_2, T1.C_BAD_3, T1.C_BAD_4, T1.C_BAD_5
             PHYSICAL FILTER : T1.C_GOOD = 999 AND T1.C_BAD_1 = 0 AND T1.C_BAD_2 = 0 AND T1.C_BAD_3 = 0

<<<  end print plan

Workaround

Use an INDEX hint to force the query to perform an index scan.

\explain plan
SELECT /*+ INDEX( t1, idx1) */
       *
  FROM t1
 WHERE c_good  = 999
   AND c_bad_1 = 0  
   AND c_bad_2 = 0
   AND c_bad_3 = 0
;

C_GOOD C_BAD_1 C_BAD_2 C_BAD_3 C_BAD_4 C_BAD_5
------ ------- ------- ------- ------- -------
   999       0       0       0       0       0

1 row selected.

>>>  start print plan

< Execution Plan >
======================================================================
|  IDX  |  NODE DESCRIPTION                |                    ROWS |
----------------------------------------------------------------------
|    0  |  SELECT STATEMENT                |                       1 |
|    1  |    QUERY BLOCK ("$QB_IDX_2")     |                       1 |
|    2  |      INDEX ACCESS ("T1", "IDX1") | (         1)          1 |
======================================================================
     1  -  TARGET : T1.C_GOOD, T1.C_BAD_1, T1.C_BAD_2, T1.C_BAD_3, T1.C_BAD_4, T1.C_BAD_5
     2  -  READ INDEX COLUMN : T1.C_GOOD, T1.C_BAD_1, T1.C_BAD_2, T1.C_BAD_3, T1.C_BAD_4
           READ TABLE COLUMN : T1.C_BAD_5
             MIN RANGE : T1.C_GOOD = 999 AND T1.C_BAD_1 = 0 AND T1.C_BAD_2 = 0 AND T1.C_BAD_3 = 0
             MAX RANGE : T1.C_GOOD = 999 AND T1.C_BAD_1 = 0 AND T1.C_BAD_2 = 0 AND T1.C_BAD_3 = 0

<<<  end print plan

22c.1.9 Patch Notes

ISSUE-7805 The issue where memory allocated during the handling of the ODBC LONG VARCHAR and LONG VARBINARY types was not properly released has been fixed.

Description

A memory leak occurred for LONG VARCHAR and LONG VARBINARY columns during metadata reconstruction when the table schema was altered during a FETCH and another FETCH was performed on the same table.

Symptom

In a client-server (CS) environment, when querying data through ODBC, altering the table schema via an ALTER statement during a FETCH operation triggers metadata reconstruction. If the table contains LONG VARCHAR or LONG VARBINARY columns, memory dynamically allocated for those column types was not released properly, resulting in a memory leak.

Workaround

Before this issue was fixed, the safest approach was to avoid altering the table schema during a FETCH operation. If altering the schema was unavoidable, the affected SQLHSTMT handle had to be reallocated by calling SQLFreeHandle followed by SQLAllocHandle.

22c.1.8 Patch Notes

ISSUE-7782 A parse option has been added to gpec.

Description

The parse option has been added to gpec to control source parsing. The option can be set to none or partial, and if not specified, the default value is partial.

Symptom

N/A

Workaround

The patch is required.

ISSUE-7782 The code handling behavior of the gpec preprocessor has been modified.

Description

The gpec preprocessor has been updated to change how it handles code in branches that evaluate to false (#if, #elif, #else, #ifdef, #ifndef).
Before this update, code in false branches was removed from the output. It now remains intact and is included in the output.

Symptom

In some cases, the gpec preprocessor was unable to recognize macros defined in certain header files. In such cases, gpec evaluated the relevant preprocessor conditions as false and deleted the associated code blocks. As a result, code that was valid in the actual compilation environment could be missing in the gpec output.
In other words, discrepancies could arise between the gpec output and the actual build due to differences in preprocessor evaluation.
For example, when a gc file includes a header using the EXEC SQL INCLUDE statement, if that header references a macro defined in another header, gpec cannot interpret the macro and evaluates the condition as false.
As a result, code that should not be removed may be deleted.

The following is an example of a header file not referenced by gpec:

#ifndef SYS_FLAG_H
#define SYS_FLAG_H
#define SYS_FEATURE_FLAG 1
#endif /* SYS_FLAG_H */

The following is an example of a header file successfully referenced by gpec:

#ifndef SYS_CONFIG_H
#define SYS_CONFIG_H

/* References a macro defined in another header */
#define ENABLE_FEATURE SYS_FEATURE_FLAG

#endif /* SYS_CONFIG_H */

The following is an example gc file:

EXEC SQL INCLUDE sys_config.h;
int main(void)
{
#if ENABLE_FEATURE
/* In the actual compilation environment, SYS_FEATURE_FLAG == 1,
so this code should be included. */
feature_func();
#endif
return 0;
}

Although sys_config.h refers to a macro defined in another header, gpec cannot interpret that macro. As a result, the ENABLE_FEATURE condition is evaluated as false, and code that is valid in the actual compilation environment may be removed from the gpec output.

Workaround

Preprocessor conditions and macros used in gc files should be defined within header files included using EXEC SQL INCLUDE.

ISSUE-5401 During Cyclone recovery, errors other than conflicts are now displayed.

Description

Previously, errors occurring in the recovery process were not logged in the trace log, so non-conflict errors could not be verified. This issue has now been resolved.

Symptom

Previously, errors occurring in the recovery process were not logged in the trace log, so errors could not be verified.

[2025-01-24 10:55:17.793633 THREAD(2503,139847152563968)] 
[APPLIER #1(SID:65)] Error Occurred.

[2025-01-24 10:55:17.804159 THREAD(2503,139847100114688)] 
[HEARTBEAT(#0)] Finalize Done.

With this update, errors are now displayed during the recovery phase, and can be checked as follows.

[2025-01-24 10:55:17.793568 THREAD(2503,139847152563968)] 
[APPLIER #1(SID:65)-INSERT] ERR-42R01(16357) : must be accessible to at least one member of group 'G2'
  [TABLE_NAME : PUBLIC.TEST]
  [PRIMARY KEY INFO] 
    [NAME:C1, VALUE:101] 

[2025-01-24 10:55:17.793614 THREAD(2503,139847152563968)] 
[Table Information](LSN:232028) - Analyze
 - Master       : PUBLIC.TEST
 - Slave        : PUBLIC.TEST
 - Column Count : 2
 - Physical Id  : 100452

[2025-01-24 10:55:17.793633 THREAD(2503,139847152563968)] 
[APPLIER #1(SID:65)] Error Occurred.

[2025-01-24 10:55:17.793655 THREAD(2503,139847152563968)] 
ERR-HY000(46007): Internal error occurred (ztcdDoInsertNExecute(not unique constraint violated))

[2025-01-24 10:55:17.804159 THREAD(2503,139847100114688)] 
[HEARTBEAT(#0)] Finalize Done.

Workaround

The patch is required.

ISSUE-6503 A data migration feature has been added to Cyclone to support migration to external databases such as Oracle, DB2, MySQL, and Tibero.

Description

Previously, data synchronization was supported only when the slave was GOLDILOCKS; however, this feature extension allows data synchronization when the slave is Oracle, DB2, MySQL, or Tibero.

Symptom

In earlier versions, the SYNC feature did not operate when the slave target DB was not GOLDILOCKS.

Workaround

The patch is required.

ISSUE-7743 An issue that occurred while processing nested #if / #endif directives in the gpec preprocessor has been fixed.

Description

When processing #if preprocessor directives, the gpec preprocessor removes (replaces with empty strings) all statements up to the corresponding #endif directive if the condition is evaluated as false.
However, when #if / #endif directives were used in a nested structure, some statements within the inner preprocessor blocks were not removed correctly. This issue has been identified and fixed.
This fix applies not only to #if directives but also to all conditional preprocessor directives, including #elif, #else, #ifdef, and #ifndef.

Symptom

The following is a portion of a gc file that contains nested #if / #endif directives.

#if 0
    #if 0
        printf("error 1");
    #else
        printf("error 2");
    #endif
    printf("error 3");
#endif

The following is a portion of the generated c file produced by converting the above code using the gpec preprocessor:

printf("error 3");

Due to the nested #if 0 conditions, all three printf statements should have been removed. However, the converted c file incorrectly retained the printf("error 3"); statement.

Workaround

Avoid using nested #if / #endif directives. Alternatively, statements should not be placed after an inner #endif directive, as shown below.

#if 0
    #if 0
        printf("error 1");
    #else
        printf("error 2");
    #endif                 // Statements below this directive are not processed correctly.
    printf("error 3");
#endif

ISSUE-7660 The gserver process did not terminate when an idle timeout occurred during IPC usage, and this issue has been fixed.

Description

When an idle timeout occurred during IPC usage, gserver cleaned up the session but continued waiting for the client to exit, leaving the gserver process running. This issue has now been resolved.

Symptom

A trace log indicated that the session was cleaned up due to an idle timeout during IPC usage.

[2025-12-01 17:52:02.791208 INSTANCE(GOLDILOCKS) THREAD(1554791,139737737000768)] [INFORMATION]
[DEDICATE_SERVER] ERR-HYT00(13038): Exceeded maximum idle time

[2025-12-01 17:52:02.836570 INSTANCE(GOLDILOCKS) THREAD(1554720,139906736981760)] [WARNING]
[CLEANUP] cleaning local session - env(12), session(13.8), local transaction(-1), program(gsqlnet), pid(1554791), thread(139737737000768)

[2025-12-01 17:52:02.836641 INSTANCE(GOLDILOCKS) THREAD(1554720,139906736981760)] [WARNING]
[CLEANUP] cleaning up 1 sessions

However, the gserver process remained alive and did not terminate.

% ps -ef | grep gserver | grep ipc
goldilocks    1554791    7156  0 17:52 pts/1    00:00:00 gserver --dedicated /tmp/unix-glsnr.11100.0 -x 2 --ipc

Workaround

Manually terminate the client process so that the gserver process exits as well.

ISSUE-7365 The monitoring information for Cyclone using Cymon has been updated with a new item.

Description

The CYCLONE_MONITOR_INFO table's MASTER_STATE and SLAVE_STATE fields now include the SYNCING state, in addition to N/A, READY, and RUNNING. The SYNCING state is shown during data synchronization when the –sync option is used.

gSQL> \set vertical on
gSQL> select * from cyclone_monitor_info;
              GROUP_NAME # GROUP1
                    TIME # 2025-10-14 12:03:02
            MASTER_STATE # SYNCING
             SLAVE_STATE # SYNCING
             MASTER_PORT # 21102
                SLAVE_IP # 127.0.0.1
        REDO_LOG_FILESEQ # 0
       REDO_LOG_BLOCKSEQ # 101423
         CAPTURE_FILESEQ # 0
        CAPTURE_BLOCKSEQ # 0
           APPLY_FILESEQ # 0
          APPLY_BLOCKSEQ # 0
        CAPTURE_INTERVAL # 101423
   CAPTURE_INTERVAL_SIZE # 51928576
          TOTAL_TX_COUNT # 0
        CAPTURE_TX_COUNT # 0
      CAPTURE_COMMIT_LSN # 0
        APPLY_COMMIT_LSN # 0

Symptom

N/A

Workaround

The patch is required.

ISSUE-7633 The SUPPLEMENTAL_LOG_FORCE_MODE environment variable has been added.

Description

When CYCLONE is executed and supplemental logging is disabled on the target table for replication, setting SUPPLEMENTAL_LOG_FORCE_MODE to 1 (Enable) forcibly enables supplemental logging on the table, then starts the replication.

Symptom

N/A

Workaround

The patch is required.

22c.1.7 Patch Notes

ISSUE-7412 An issue was fixed where a column in the instant hash table could not be read correctly when it spanned multiple pages.

Description

In some cases, when a column in the instant hash table spanned multiple pages, the column could not be read or filters were not applied correctly, and this issue has been fixed.

Symptom

For example, when executing the following query, the values of name1 and name2 should always be the same, but rows with mismatched values such as (null, 5) were returned.

SELECT *
  FROM
(
SELECT RTRIM( name1 )
     , RTRIM( name2 )
  FROM ( SELECT CAST( level AS CHAR( 2000 ) ) AS name1
              , CAST( level AS CHAR( 2000 ) ) AS name2
           FROM dual
           CONNECT BY level <= 5
         UNION DISTINCT
         SELECT 'X' AS name1
              , 'X' AS name2
           FROM dual
       )
) ORDER BY 1;

RTRIM( NAME1 ) RTRIM( NAME2 )
-------------- --------------
1              1             
2              2             
3              3             
4              4             
X              X             
null           5             

6 rows selected.

Workaround

The patch is required.

ISSUE-7353 Fixed missing data issue when changing array size during ODBC fetch

Description

An issue was identified in the ODBC client-server environment where changing the array size dynamically during data fetch caused data retrieval to fail. This issue has been resolved.

Symptom

When retrieving data using ODBC in a client-server (CS) environment, an issue occurred where data could not be fetched correctly if the array size was changed during the fetch operation. This problem commonly appeared when using the SQLExtendedFetch, SQLFetch, and SQLFetchScroll functions, and was particularly noticeable when the fetch started with a small array size (e.g., 1 row) and was later changed to a larger array size (e.g., 100 rows).

As a specific symptom, after changing the SQL_ROWSET_SIZE or SQL_ATTR_ROW_ARRAY_SIZE attribute, SQL_NO_DATA was returned prematurely, resulting in only a subset of the data being retrieved even though more data was actually available.

Workaround

Prior to applying the patch for this issue, the most reliable approach was to keep the array size fixed rather than changing it. If changing the array size was unavoidable, the recommended method was to close the current cursor using the SQLCloseCursor function and then re-execute the query so that the fetch would begin with the new array size. When stability was more important than performance, the array size could be set to 1 to fetch data one row at a time.

22c.1.6 Patch Notes

ISSUE-7094 The handling of NUMA_MAP for CPU count restrictions in the license policy has been improved.

Description

Previously, if the total number of CPUs in the system exceeded the number allowed by the license, a license error would occur regardless of how many CPUs were actually used. However, to accommodate the need to selectively use only a subset of CPUs, the license policy has been updated. Now, if the number of CPUs specified in the NUMA_MAP setting of the goldilocks.properties.conf file is within the licensed limit, the program can run without error.

Symptom

When the total number of CPUs on the system exceeded the number specified in the license, the program determined it to be a license violation and returned an error. Even if the user limited the number of CPUs used through the NUMA_MAP setting, the program still validated the license based on the total CPU count of the system, resulting in execution failure.

Workaround

The patch is required.

ISSUE-7045 The restriction on using JSON aggregation functions, including those with RETURNING LONG VARCHAR, with GROUP BY has been removed.

Description

The restriction on using JSON aggregation functions that include RETURNING LONG VARCHAR with GROUP BY has been removed.

Symptom

An error occurred when using JSON aggregation functions including RETURNING LONG VARCHAR together with GROUP BY, as shown below.

CREATE TABLE t1 ( id INTEGER, data VARCHAR(1500) );
INSERT INTO t1 VALUES ( 1, 'A' );
INSERT INTO t1 VALUES ( 1, 'B' );
INSERT INTO t1 VALUES ( 2, 'A' );
INSERT INTO t1 VALUES ( 2, 'B' );
INSERT INTO t1 VALUES ( 2, 'C' );
INSERT INTO t1 VALUES ( 2, 'D' );
INSERT INTO t1 VALUES ( 3, RPAD( 'A', 1500, '_' ) );
INSERT INTO t1 VALUES ( 3, RPAD( 'B', 1500, '_' ) );
INSERT INTO t1 VALUES ( 3, RPAD( 'C', 1500, '_' ) );
COMMIT;

gSQL>
SELECT id
     , JSON_ARRAYAGG( data RETURNING LONG VARCHAR ) AS json_result
  FROM t1
 WHERE id <= 3
 GROUP BY id
;

ERR-42000(16246): illegal use of LONG VARCHAR data type : 
     , JSON_ARRAYAGG( data RETURNING LONG VARCHAR ) AS json_result
       *
ERROR at line 2:

After the modification, it can be used without restrictions as shown below.

gSQL>
SELECT id, JSON_OBJECTAGG( 'data' VALUE data RETURNING LONG VARCHAR ) AS json_string
  FROM t1
 WHERE id <= 3
 GROUP BY id
 ORDER BY id
;

ID
--
JSON_STRING                                                                                         
----------------------------------------------------------------------------------------------------
 1
{"data":"A","data":"B"}                                                                             
 2
{"data":"A","data":"B","data":"C"}                                                                  
 3
{"data":"A___
...
Ellipsis
...
_________","data":"B______
...
Ellipsis
...
_______","data":"C_____
...
Ellipsis
...
________"}                                                                     

3 rows selected.

Workaround

Change the FROM clause to an in-line view that includes an ORDER BY clause as shown below.

gSQL>
SELECT id, JSON_ARRAYAGG( data RETURNING LONG VARCHAR ) AS json_string
  FROM ( SELECT id, data
           FROM t1
          WHERE id <= 3
          ORDER BY id
       )
 GROUP BY id
;

ID
--
JSON_STRING                                                                                         
----------------------------------------------------------------------------------------------------
 1
["A","B"]                                                                                           
 2
["A","B","C"]                                                                                       
 3
["A____________________________________
...
...
Ellipsis
...
...
________"]                                                                                          

3 rows selected.

22c.1.5 Patch Notes

ISSUE-6974 The JSON string constructor function has been added.

Description

The JSON String Constructor function has been added.

Symptom

N/A

Workaround

The patch is required.

ISSUE-6157 4K disk sectors are supported.

Description

The system supports the 4096-byte (4K advanced format) disk sector size adopted in recently released HDDs.

Symptom

DIRECT_IO was previously defined as 512 bytes, which prevented support for the 4096-byte (4K Advanced Format) disk sector size used in recently released HDDs. The definition has been updated to support 4K sector sizes.

Workaround

The patch is required.

ISSUE-6939 When using the offset limit clause during an IN KEY RANGE scan, incorrect results may occur.

Description

If the IN KEY RANGE scan is used when executing a query that includes an OFFSET clause, incorrect results may occur. This issue has been fixed.

Symptom

When performing an IN KEY RANGE scan on a query that includes OFFSET LIMIT clause, the OFFSET and LIMIT values may not be accumulated correctly, leading to more rows being skipped or returned than intended.

gSQL> CREATE TABLE t1 ( c1 INTEGER );

Table created.

gSQL> INSERT INTO t1 VALUES ( 1 ), ( 2 ), ( 3 ), ( 4 ), ( 5 );

5 rows created.

gSQL> CREATE INDEX IDX_t1 ON t1 ( c1 );

Index created.

gSQL> \EXPLAIN PLAN
SELECT /*+ FULL(t1) */ * FROM t1 WHERE c1 IN ( 2, 3, 5 ) OFFSET 2 LIMIT 10;
    
C1
--
 5

1 row selected.

>>>  start print plan

< Execution Plan >
==================================================================================================
|  IDX  |  NODE DESCRIPTION                                            |                    ROWS |
--------------------------------------------------------------------------------------------------
|    0  |  SELECT STATEMENT                                            |                       1 |
|    1  |    QUERY BLOCK ("$QB_IDX_2")                                 |                       1 |
|    2  |      TABLE ACCESS ("T1")                                     |                       1 |
==================================================================================================

     1  -  TARGET : T1.C1
     2  -  CLONED 
           READ COLUMN : T1.C1
             PHYSICAL FILTER : ( T1.C1 ) IN ( 2, 3, 5 )

<<<  end print plan


--# BUGBUG
gSQL> \EXPLAIN PLAN
SELECT /*+ IN_KEY_RANGE(t1) */ * FROM t1 WHERE c1 IN ( 2, 3, 5 ) OFFSET 2 LIMIT 10;
    
no rows selected.

>>>  start print plan

< Execution Plan >
==================================================================================================
|  IDX  |  NODE DESCRIPTION                                            |                    ROWS |
--------------------------------------------------------------------------------------------------
|    0  |  SELECT STATEMENT                                            |                       0 |
|    1  |    QUERY BLOCK ("$QB_IDX_2")                                 |                       0 |
|    2  |      INDEX ACCESS ("T1", "IDX_T1")                           | (         3)          0 |
==================================================================================================

     1  -  TARGET : T1.C1
     2  -  CLONED 
           READ INDEX COLUMN : T1.C1
           IN KEY RANGE
             MIN RANGE : T1.C1 = ?
             MAX RANGE : T1.C1 = ?

<<<  end print plan

Workaround

The patch is required.

ISSUE-6845 A processing error occurs due to the failure to initialize the giveup information during partial rollback.

Description

There was an issue where the giveup-related variables were not initialized when a giveup occurred during partial rollback. To resolve this issue, the giveup is now handled as part of the partial rollback.

Symptom

In situations where partial rollback should occur, the remaining giveup information causes unintended giveup.

Workaround

The patch is required.

ISSUE-6803 Access to invalid segment hint memory may occur.

Description

If the number of replacements in the segment hint cache exceeds the signed integer range (2147483647), it may result in reading or writing outside the segment hint memory space. This can lead to segment faults and abnormal behavior, and the error has been fixed.

Symptom

It is possible to read or write outside the allocated memory range, which can lead to segment faults and abnormal behavior.

Workaround

The patch is required.

ISSUE-6797 The session fatal in Gmaster is handled as a system fatal.

Description

When a session fatal occurs in the Gmaster thread, a hang is triggered, preventing normal cleanup, so it is handled as a system fatal.

Symptom

When a session fatal occurs in the Gmaster thread, it causes a hang.

Workaround

The patch is required.

ISSUE-6687 When the redo log members are replicated, the cyclone is unable to read the next redo log after a redo log switch.

Description

When the redo log members are replicated, the cyclone fails to handle it correctly after a log switch, and this error has been fixed.

Symptom

The cyclone continuously waits for the next file without replication being implemented.

Workaround

Remove the redo log member and restart the cyclone.

ISSUE-6605 If the RETURNING clause is used in an UPSERT statement, it will result in an error."

Description

If the RETURNING clause is used in an UPSERT statement, an error will occur during the INSERT operation because there are no duplicate key values.

Symptom

When using the RETURNING clause in an UPSERT statement, an error will occur if the order of the columns specified in the RETURNING clause differs from the order of the columns in the base table.

gSQL> CREATE TABLE t1( c1 INTEGER, c2 INTEGER, c3 INTEGER );

Table created.

gSQL> CREATE UNIQUE INDEX uni_idx_t1 ON t1 ( c1 );

Index created.

--# BUGBUG
--# result :   1   3
gSQL> INSERT INTO t1 VALUES ( 1, 2, 3 ) ON DUPLICATE KEY DO UPDATE c1 = c1 + 1 RETURN c1, c3;

C1 C3
-- --
 1  2

1 row created.

--# BUGBUG
--# result :   1   2   3
gSQL> SELECT * FROM t1;

C1 C2   C3
-- -- ----
 1  2 null

1 row selected.

Workaround

The patch is required.

ISSUE-6575 An error occurs when only the fields of a record type variable are specified in the INTO clause of a FETCH statement.

Description

An error occurs if fields of a record type variable are specified, even when the number of targets of the cursor in the FETCH statement matches the number of targets in the INTO clause.

Symptom

An error occurs even when the number of targets in the cursor's SELECT statement matches the number of targets in the FETCH INTO clause.

gSQL>
DECLARE
  TYPE rec1 IS RECORD( c1 INTEGER , c2 INTEGER );
  v_rec rec1;
  
  CURSOR cur1 IS SELECT 100 FROM dual;
BEGIN
  OPEN cur1;
  FETCH cur1 INTO v_rec.c2;
  CLOSE cur1;
END;
/

ERR-2F000(17032): PSM compilation error : 
(1) at (8:3): ERR-2F000(17040): fetch target count mismatch

It has now been modified to operate correctly.

gSQL>
DECLARE
  TYPE rec1 IS RECORD( c1 INTEGER , c2 INTEGER );
  v_rec rec1;
  
  CURSOR cur1 IS SELECT 100 FROM dual;
BEGIN
  OPEN cur1;
  FETCH cur1 INTO v_rec.c2;
  CLOSE cur1;
END;
/

Anonymous PL block executed.

Workaround

Use a scalar type variable.

gSQL>
DECLARE
  TYPE rec1 IS RECORD( c1 INTEGER , c2 INTEGER );
  v_rec rec1;
  
  var1 INTEGER;
  
  CURSOR cur1 IS SELECT 100 FROM dual;
BEGIN
  OPEN cur1;
  FETCH cur1 INTO var1;
  v_rec.c2 := var1;
  CLOSE cur1;
END;
/

Anonymous PL block executed.

ISSUE-6557 When using an outer join, if functions such as DECODE, stored functions, or CONCAT that include columns from the right table are in the WHERE clause, it can lead to incorrect results.

Description

When functions such as DECODE, stored functions, or CONCAT that include columns from the right table exist in the WHERE clause, the following outer join operation elimination should not be applied; however, it was actually applied, resulting in an error.

Symptom

In cases where outer join operation elimination occurs as follows, the inclusion of DECODE, stored functions, etc., in the WHERE clause can lead to incorrect results.

Before the modification, the following incorrect results were output.

CREATE TABLE t1 ( c1 INTEGER, c2 INTEGER );
INSERT INTO t1 VALUES(1,1);
INSERT INTO t1 VALUES(2,2);
CREATE TABLE t2 ( c1 INTEGER, c2 INTEGER );
INSERT INTO t2 VALUES(1,1);
COMMIT;


gSQL> \EXPLAIN PLAN 
SELECT t1.c1, t2.c1
  FROM t1 LEFT OUTER JOIN t2
    ON t1.c1 = t2.c1
 WHERE DECODE( t2.c2, NULL, 'A', 'B' ) = 'A'
; 

no rows selected.

>>>  start print plan

< Execution Plan >
========================================================================
|  IDX  |  NODE DESCRIPTION                                            |
------------------------------------------------------------------------
|    0  |  SELECT STATEMENT                                            |
|    1  |    QUERY BLOCK ("$QB_IDX_2")                                 |
|    2  |      HASH JOIN (INNER JOIN)                                  |
|    3  |        TABLE ACCESS ("T1")                                   |
|    4  |        HASH JOIN INSTANT                                     |
|    5  |          TABLE ACCESS ("T2")                                 |
========================================================================

     1  -  TARGET : T1.C1, T2.C1
     2  -  JOINED COLUMN : T1.C1, T2.C1
     3  -  READ COLUMN : T1.C1
     4  -  HASH KEY : T2.C1
           READ KEY COLUMN : T2.C1
             HASH FILTER : T2.C1 = T1.C1
     5  -  READ COLUMN : T2.C1, T2.C2
             LOGICAL FILTER : DECODE(T2.C2,NULL,'A','B') = 'A'

<<<  end print plan

After the modification, the correct plan and results are as follows.

\EXPLAIN PLAN 
SELECT t1.c1, t2.c1
  FROM t1 LEFT OUTER JOIN t2
    ON t1.c1 = t2.c1
 WHERE DECODE( t2.c2, NULL, 'A', 'B' ) = 'A'
;

C1   C1
-- ----
 2 null

1 row selected.

>>>  start print plan

< Execution Plan >
========================================================================
|  IDX  |  NODE DESCRIPTION                                            |
------------------------------------------------------------------------
|    0  |  SELECT STATEMENT                                            |
|    1  |    QUERY BLOCK ("$QB_IDX_2")                                 |
|    2  |      HASH JOIN (LEFT OUTER JOIN)                             |
|    3  |        TABLE ACCESS ("T1")                                   |
|    4  |        HASH JOIN INSTANT                                     |
|    5  |          TABLE ACCESS ("T2")                                 |
========================================================================

     1  -  TARGET : T1.C1, T2.C1
     2  -  JOINED COLUMN : T2.C2, T1.C1, T2.C1
             WHERE FILTER : DECODE(T2.C2,NULL,'A','B') = 'A'
     3  -  READ COLUMN : T1.C1
     4  -  HASH KEY : T2.C1
           RECORD COLUMN : T2.C2
           READ KEY COLUMN : T2.C1, T2.C2
             HASH FILTER : T2.C1 = T1.C1
     5  -  READ COLUMN : T2.C1, T2.C2

<<<  end print plan

Workaround

Use the NO_QUERY_TRANSFORMATION hint as follows.

\EXPLAIN PLAN 
SELECT /*+ NO_QUERY_TRANSFORMATION */
       t1.c1, t2.c1
  FROM t1 LEFT OUTER JOIN t2
    ON t1.c1 = t2.c1
 WHERE DECODE( t2.c2, NULL, 'A', 'B' ) = 'A'
;

C1   C1
-- ----
 2 null

1 row selected.

>>>  start print plan

< Execution Plan >
========================================================================
|  IDX  |  NODE DESCRIPTION                                            |
------------------------------------------------------------------------
|    0  |  SELECT STATEMENT                                            |
|    1  |    QUERY BLOCK ("$QB_IDX_2")                                 |
|    2  |      HASH JOIN (LEFT OUTER JOIN)                             |
|    3  |        TABLE ACCESS ("T1")                                   |
|    4  |        HASH JOIN INSTANT                                     |
|    5  |          TABLE ACCESS ("T2")                                 |
========================================================================

     1  -  TARGET : T1.C1, T2.C1
     2  -  JOINED COLUMN : T2.C2, T1.C1, T2.C1
             WHERE FILTER : DECODE(T2.C2,NULL,'A','B') = 'A'
     3  -  READ COLUMN : T1.C1
     4  -  HASH KEY : T2.C1
           RECORD COLUMN : T2.C2
           READ KEY COLUMN : T2.C1, T2.C2
             HASH FILTER : T2.C1 = T1.C1
     5  -  READ COLUMN : T2.C1, T2.C2

<<<  end print plan

ISSUE-6537 When performing a cast operation between string types, such as CAST('ABCDE' AS CHAR(3)), an error occurs if the source value exceeds the dest precision.

Description

When performing a cast operation between string types, such as CAST('ABCDE' AS CHAR(3)), an error occurs if the source value exceeds the dest precision.

In this case, the cast operation is performed by truncating the source value to match the precision of the target string type.

Symptom

Before the modification, the following error occurred.

DROP TABLE t1;
CREATE TABLE t1 ( c1 CHAR( 5 ) );
INSERT INTO t1 VALUES ( 'ABCDE' );
COMMIT;

gSQL> SELECT CAST( c1 AS CHAR(3) ) FROM t1;
ERR-22001(12002): byte length of data greater than column length :
SELECT CAST( c1 AS CHAR(3) ) FROM t1
       *
ERROR at line 1:

After the modification, the cast operation is performed by truncating the source value to match the precision of the target string type.

gSQL> SELECT CAST( c1 AS CHAR(3) ) FROM t1;
CAST( C1 AS CHAR(3) )
---------------------
ABC                  
1 row selected.

Workaround

Specify the precision of the target string type to accommodate the source value.

ISSUE-6536 The DML jitter issue caused by bulk logging has been eliminated.

Description

The issue of DML jitter caused by bulk logging during online index rebuilds has been eliminated.

Symptom

Bulk logging can slow down the log flusher, which in turn can increase the duration for which online index rebuilds hold locks, potentially causing delays in DML operations.

INDEX_LOGGING_THROTTLING property has been newly added. It prevents bulk logging from occurring in a short period during index rebuilds.

Workaround

The patch is required.

ISSUE-6543 If multiple members simultaneously raise the startup phase to global open, the server may terminate abnormally.

Description

The issue of the server's abnormal termination when multiple members simultaneously raise the startup phase to global open has been resolved.

Symptom

When multiple members simultaneously raise the startup phase to global open, the server may hang or terminate abnormally.

Workaround

Only one member must raise the startup phase to global open at a time.

ISSUE-6511 The SQLSTATE for errors caused by disconnection between cluster members has been changed.

Description

The SQLSTATE for errors caused by disconnection between cluster members has been changed.

Symptom

The SQLSTATE for DML errors caused by disconnection between cluster members has been changed.

Error code

Existing

SQLSTATE

Changed

SQLSTATE

Message

16357

42000

42R01

must be accessible to at least one member of group '%s'

16358

42000

42R01

accessible member does not exist

The SQLSTATE for DDL errors caused by disconnection between cluster members has been changed.

Error code

Existing

SQLSTATE

Changed

SQLSTATE

Message

16360

42000

42R02

cloned table "%s"."%s" must be accessible to at least one member

16361

42000

42R02

sharded table "%s"."%s" must be accessible to at least one member of group '%s'

16412

42000

42R02

all of shards in a table '%s' must be online.

16482

42000

42R02

database is not accessible; '%s' has detached from the cluster

16545

42000

42R02

cloned table "%s"."%s" must have at least one online replica

16546

42000

42R02

sharded table "%s"."%s" must have at least one online replica of group '%s'

Workaround

The patch is required.

22c.1.4 Patch Notes

ISSUE-5544 If a transaction fails due to a disconnection with the master during replication in a cluster environment using Cyclone, the rollback logic may hang.

Description

  1. This issue occurs only in a cluster replication environment. If a previously processed transaction needs to be rolled back because the slave failed to process the transaction due to the master being terminated during replication with Cyclone, it can cause Cyclone to hang.

  1. To address this, the rollback logic on the slave has been removed and replaced with a method to store all data before executing the transaction. This modification resolves the hanging issue.

Symptom

In some cases, the slave trace log may continuously record the messages as follows, and the system may hang as a result.

[RECEIVER(#2)] [INFO]WAIT_WRITE_RESTART_INFO_FOR_SKIP(AnalyzeState = 1)SCN(705:10166:18)

Workaround

The patch is required.

ISSUE-6381 The conversion rule from the numeric type to the character type is different from other DBMS.

Description

  1. If converting the numeric type to the varchar type, it is converted to an exponential type or to a real number type according to the varchar precision. In this case, it is converted by rounding off so that it can be expressed appropriately for the space used as much as possible.

    Therefore, the precision of the valid number representation for the original number decreases.

  1. The result of the numeric type → CHAR type conversion and the numeric type → VARCHAR type conversion are different.

    1. NUMBER / NUMERIC

      1. Conversion to CHAR: It is converted only to a real number type. (If it can not be expressed within the precision, then an error occurs.)

      2. Conversion to VARCHAR: It is converted to an exponential type or to a real number type according to precision by rounding off.

    2. NATIVE_REAL / NATIVE_DOUBLE

      1. CHAR: It is converted to an exponential type so that all of the valid numbers are expressed. (If it is truncated, then an error occurs.)

      2. VARCHAR: It is converted to an exponential type according to precision by rounding off.

Troubleshooting

Symptom

It is converted by rounding off so that it can be expressed appropriately for the space used as much as possible, so the precision of the valid number representation for the original number decreases.

gSQL> create table t1 ( c1 varchar(2) );
Table created.

gSQL> insert into t1 values ( 2.4 );
1 row created.

gSQL> insert into t1 values ( 2.5 ) ;
1 row created.

gSQL> commit;
Commit complete.

gSQL> select * from t1;
C1
--
2 
3
2 rows selected.

Workaround

Specify the appropriate character type precision to express all valid numbers for the original number.

gSQL> create table t1 ( c1 varchar(10) );
Table created.

gSQL> insert into t1 values ( 2.4 );
1 row created.

gSQL> insert into t1 values ( 2.5 ) ;
1 row created.

gSQL> commit;
Commit complete.

gSQL> select * from t1;
C1 
---
2.4
2.5
2 rows selected.

ISSUE-6255 [CDC] PWD was exposed in the connection string recorded in the trace log, so it is replaced with '*' when it is recorded.

Description

PWD was exposed in the connection string recorded in the trace log of cyclone, cymon and cyfile, and this error has been fixed by replacing it with '*' when it is recorded.

Symptom

PWD was exposed in the connection string of cyclone, cymon and cyfile when it was recorded in the trace log.

connection string [PROTOCOL=DA;DSN=goldilocks_jinsil;PORT=11100;UID=test;PWD=test]

Workaround

The patch is required.

ISSUE-6030 An error occurred in cyclone when rebalancing members in the Cluster environments, and this error has been fixed.

Description

When rebalancing cluster members while cyclone was in operation in a cluster environment, cyclone could not process it, and this error has been fixed.

Symptom

The followings were recorded in cyclone operated in the cluster member where rebalancing was executed, and no further operation was executed.

[2023-12-08 16:33:58.782398 THREAD(3292,140620625983232)] 
Ready to Rebalance-Tx commit. (Waiting for slave response)

Workaround

The patch is required.

ISSUE-6116 The performance of long procedure's direct execution has been improved.

Description

The direct execution performance of the procedure which consists of massive PL stmt and expression has been improved.

Symptom

proc1 is the procedure which consists of 2000 BEGIN .. END blocks, 12000 PL stmt, and 230,000 expressions in the following example.

If proc1() was called as follows, it used to take 150 ms or more.

gSQL> call proc1(200,439);  

Procedure Call complete.  

Elapsed time: 157.09300 ms

The performance has been improved as follows by widely improving the plan size of procedure execution and the optimization process.

gSQL> call proc1(200,439);  

Procedure Call complete.  

Elapsed time: 12.35000 ms

Workaround

Call the procedure with a prepare-execution.

--# prepare
gSQL> \prepare sql call proc1(200,439);

SQL prepared.

--# 1st execution
--# data optimize - execute
gSQL> \exec

Procedure Call complete.

Elapsed time: 158.82600 ms 


--# 2nd execution
--# execute
gSQL> \exec

Procedure Call complete.

Elapsed time: 2.79600 ms

ISSUE-6231 An error occurs when entering GLOBAL OPEN with an invalid IP.

Description

It failed when trying to go up to GLOBAL OPEN with an invalid remote IP, and this error has been fixed.

Symptom

When trying to go up to GLOBAL OPEN with an invalid remote IP, it should have gone up to GLOBAL OPEN excluding the failed node, but it fails as follows.

gSQL> alter system open global database;

ERR-HY000(11047): MEMBER(G1N2): invalid network address : invalid address()

Workaround

Alter the IP of the failed node to the valid IP by using ALTER CLUSTER LOCATION statement.

gSQL> alter cluster location g1n2 host '127.0.0.1' port 12150;

altered.

ISSUE-6358 Cache coherency error in weak memory ordering device

Description

The server was abnormally terminated due to a discrepancy between the sequence of memory access and the program order, and this error has been fixed.

Symptom

The server may experience abnormal behavior or termination because outdated data in the CPU cache is used instead of the most recent data.

Workaround

The patch is required.

22c.1.3 Patch Notes

ISSUE-5799 An error did not occur even though the default expression was not valid when performing CREATE TABLE/ ALTER TABLE.

Description

If defining the default clause when performing CREATE TABLE/ ALTER TABLE, it checks whether the default expression is valid.

Symptom

An error did not occur even though the default expression was not valid.

CREATE TABLE t1 ( c1 INTEGER DEFAULT 1 / 0 );

Table created.

It has been fixed now, so the error occurs as follows.

CREATE TABLE t1 ( c1 INTEGER DEFAULT 1 / 0 );

ERR-22012(12122): divisor is equal to zero

Workaround

The patch is required.

ISSUE-5828 The join query including ROWNUM should not be sent to the remote node, but sometimes it is sent.

Description

The join query including ROWNUM should not be sent to the remote node. If each node stores data in a different order then the result may be wrong even though it is a clone table.

Symptom

\explain plan
SELECT COUNT(*)
  FROM ( SELECT c1
           FROM t_clone
          WHERE ROWNUM <= 1000
       ) X
     , t_shard Y
 WHERE X.c1 = Y.c1
; 

COUNT(*)
--------
    1005

1 row selected.

>>>  start print plan

< Execution Plan >
============================================================================
|IDX| NODE DESCRIPTION                                                     |
----------------------------------------------------------------------------
|  0|  SELECT STATEMENT                                                    |
|  1|    QUERY BLOCK ("$QB_IDX_2")                                         |
|  2|      SINGLE CLUSTER                                                  |
|  3|        CLUSTER PUSHER ("_$NI_6")                                     |
|  4|          INLINE_VIEW ("X")                                           |
|  5|            QUERY BLOCK ("$QB_IDX_6")                                 |
|  6|              COUNT                                                   |
|  7|                TABLE ACCESS ("T_CLONE")                              |
|  8|        AGGREGATION BY HASH                                           |
|  9|          NESTED JOIN (INNER JOIN)                                    |
| 10|            PUSHER TABLE ACCESS ("_$NI_6")                            |
| 11|            INDEX ACCESS ("T_SHARD" AS Y, "T_SHARD_PRIMARY_KEY_INDEX")|
============================================================================

     1  -  TARGET : COUNT(*)
     2  -  SQL : SELECT /*+ KEEP_JOINED_TABLE USE_HASH_IN( _A1, 7801 ) NO_MERGE( _A2 ) INDEX( _A1, "PUBLIC"."T_SHARD_PRIMARY_KEY_INDEX" ) */ COUNT(*) FROM ( ( SELECT /*+ FULL( _A3 ) */ "_A3"."C1" FROM "PUBLIC"."T_CLONE"@LOCAL AS "_A3" WHERE ROWNUM <= :_V0 ) AS "_A2"("C1") INNER JOIN "PUBLIC"."T_SHARD"@LOCAL AS "_A1" ON "_A1"."C1" = "_A2"."C1") ALIAS "_A4"
           TARGET DOMAIN : G1(G1N1) 1 rows, G2(G2N1) 1 rows, G3(G3N1) 1 rows
           RE-AGGREGATION
             AGGREGATION : SUM( COUNT(*) )
     4  -  TARGET : COUNT(*)
     5  -  AGGREGATION : COUNT(*)
     6  -  JOINED COLUMN : NOTHING
     7  -  COLUMN : _A3.C1 AS C1
     8  -  TARGET : _A3.C1
     9  -  STOP KEY FILTER : ROWNUM <= :_V0
    10  -  CLONED 
           READ COLUMN : _A3.C1
    11  -  HASH KEY : _A1.C1
           READ KEY COLUMN : _A1.C1
             HASH FILTER : _A1.C1 = _A2.C1
           FETCH ONE ROW
    12  -  HASH SHARD ( # 3 ) 
           READ INDEX COLUMN : _A1.C1

<<<  end print plan

The join query including ROWNUM should not be sent to the remote node, but ROWNUM filter is sent to the remote query node in the query above.

Workaround

Use /*+ LOCAL_JOIN(Y) */ hint.

ISSUE-5810 [CYCLONE] If a record does not exists in the table containing a long varchar column, then it fails to SYNC.

Description

The error occurs because the null check for a long varchar column is incorrectly performed while checking the existence of a record in the table of the master during SYNC. It determines that there is a record even though a record does not exist. Then, it tries to INSERT the null data to the slave, and it outputs the error message "cannot insert NULL into" and it fails to SYNC.

Symptom

If a record does not exist in the table containing a long varchar column while transferring the data of the master to the slave by using SYNC feature during the replication using CYCLONE, then "cannot insert NULL into" error occurs, and it fails to SYNC.

Workaround

The patch is required.

ISSUE-5665 If the join including three or more tables is performed by using the instant nested loop join method, then the result may be wrong.

Description

If the join including three or more tables is performed by using the instant nested loop join method, then the result may be wrong.

Symptom

--# result : 27
\EXPLAIN PLAN
SELECT COUNT(t2.col1)
  FROM t2, t3, t4, t1
 WHERE t2.col1 + t1.col1 = t4.col1
   AND t3.col1 + t1.col1 = t4.col1;

COUNT(T2.COL1)
--------------
             0

1 row selected.

>>>  start print plan

< Execution Plan >
========================================================================
|  IDX  |  NODE DESCRIPTION                                            |
------------------------------------------------------------------------
|    0  |  SELECT STATEMENT                                            |
|    1  |    QUERY BLOCK ("$QB_IDX_2")                                 |
|    2  |      AGGREGATION BY HASH                                     |
|    3  |        NESTED JOIN (INNER JOIN)                              |
|    4  |          TABLE ACCESS ("T1")                                 |
|    5  |          SORT JOIN INSTANT                                   |
|    6  |            NESTED JOIN (INNER JOIN)                          |
|    7  |              NESTED JOIN (INNER JOIN)                        |
|    8  |                INDEX ACCESS ("T2", "T2_COL1")                |
|    9  |                INDEX ACCESS ("T3", "T3_COL1")                |
|   10  |              INDEX ACCESS ("T4", "T4_COL1")                  |
========================================================================

     1  -  TARGET : COUNT( T2.COL1 )
     2  -  AGGREGATION : COUNT( T2.COL1 )
     3  -  JOINED COLUMN : T2.COL1
     4  -  READ COLUMN : T1.COL1
     5  -  SORT KEY : "T4.COL1 ASC NULLS LAST"
           RECORD COLUMN : T2.COL1
           READ KEY COLUMN : T4.COL1
           READ RECORD COLUMN : T2.COL1
             MIN RANGE : T4.COL1 = T2.COL1 + {T1.COL1} AND T4.COL1 = T3.COL1 + {T1.COL1}
             MAX RANGE : T4.COL1 = T2.COL1 + {T1.COL1} AND T4.COL1 = T3.COL1 + {T1.COL1}
     6  -  JOINED COLUMN : T4.COL1, T2.COL1, T3.COL1
     7  -  JOINED COLUMN : T2.COL1, T3.COL1
     8  -  READ INDEX COLUMN : T2.COL1
     9  -  READ INDEX COLUMN : T3.COL1
    10  -  READ INDEX COLUMN : T4.COL1

<<<  end print plan

The result from the query above should be '27', but actually '0' is output.

The WHERE clause condition 'T4.COL1 = T2.COL1 + T1.COL1 AND T4.COL1 = T3.COL1 + T1.COL1' can not be used as an index range condition, but actually it is used.

However, if the query is modified, then the correct result is output as follows.

\EXPLAIN PLAN
SELECT COUNT(t2.col1)
  FROM t2, t3, t4, t1
 WHERE t2.col1 + t1.col1 = t4.col1
   AND t3.col1 + t1.col1 = t4.col1;

COUNT(T2.COL1)
--------------
            27

1 row selected.

>>>  start print plan

< Execution Plan >
========================================================================
|  IDX  |  NODE DESCRIPTION                                            |
------------------------------------------------------------------------
|    0  |  SELECT STATEMENT                                            |
|    1  |    QUERY BLOCK ("$QB_IDX_2")                                 |
|    2  |      AGGREGATION BY HASH                                     |
|    3  |        NESTED JOIN (INNER JOIN)                              |
|    4  |          NESTED JOIN (INNER JOIN)                            |
|    5  |            NESTED JOIN (INNER JOIN)                          |
|    6  |              INDEX ACCESS ("T2", "T2_COL1")                  |
|    7  |              INDEX ACCESS ("T3", "T3_COL1")                  |
|    8  |            INDEX ACCESS ("T4", "T4_COL1")                    |
|    9  |          FLAT JOIN INSTANT                                   | 
|   10  |            TABLE ACCESS ("T1")                               |
========================================================================

     1  -  TARGET : COUNT( T2.COL1 )
     2  -  AGGREGATION : COUNT( T2.COL1 )
     3  -  JOINED COLUMN : T3.COL1, T1.COL1, T4.COL1, T2.COL1
             ON FILTER : ( T3.COL1 + T1.COL1 ) = T4.COL1 AND ( T2.COL1 + T1.COL1 ) = T4.COL1
     4  -  JOINED COLUMN : T3.COL1, T4.COL1, T2.COL1
     5  -  JOINED COLUMN : T3.COL1, T2.COL1
     6  -  READ INDEX COLUMN : T2.COL1
     7  -  READ INDEX COLUMN : T3.COL1
     8  -  READ INDEX COLUMN : T4.COL1
     9  -  RECORD COLUMN : T1.COL1
           READ COLUMN : T1.COL1
    10  -  READ COLUMN : T1.COL1

<<<  end print plan

Workaround

Use a hint other than USE_INL(t1). For example, use USE_NL(t1), USE_HASH(t1) or USE_MERGE(t1).

ISSUE-5710 If a view exists inside a view and group by exists in the innermost view, then the complex view merging occurs in succession, causing an error.

Description

If a view exists inside a view and group by exists in the innermost view, then the complex view merging occurs in succession, causing an error. In this case, the error occurs in an aggregation expression of SELECT list.

Even though the conditions above are satisfied, if an aggregation does not exist in SELECT list, then an error does not occur.

Symptom

\EXPLAIN PLAN
SELECT sum(case_sum )
  FROM (
         SELECT 
                v1.col1, v1.col2, ( case when v1.sum > 0 then 2
                                    else 1
                                    end
                                  )as case_sum
          FROM ( SELECT col1, col2, sum(col3) as sum
                   FROM t1
                  WHERE col3 > 0  
                  GROUP BY col1, col2 
               ) v1
       ) v2
      , t2
 WHERE v2.col1 = t2.col1;

ERR-42000(12119): comparison is not applicable: ROWID and NUMBER :

If v1 is merged first, and then v2 is merged, then it can not find v1.sum in 'case when then' statement.

Workaround

If either one of two views fails to merge, then an error does not occur. Therefore, use /*+ NO_MERGE( v1) */ hint or /*+ NO_MERGE(v2)*/ hint.

ISSUE-5667 When a subquery refers to the outer query, if the subquery refers to both a materialized view and an ordinary table, then the server is abnormally terminated.

Description

If all of the following conditions are satisfied, then the server is abnormally terminated.

  1. When tables are listed in <from clause>, the materialized view specified by <with clause> is listed ahead, followed by the ordinary table.

  2. A subquery exists and the subquery refers to both a materialized view and an ordinary table.

Symptom

DROP TABLE IF EXISTS r;
DROP TABLE IF EXISTS s;
DROP TABLE IF EXISTS t;

CREATE TABLE r ( c1 INTEGER, c2 INTEGER );
INSERT INTO r VALUES(1,1);

CREATE TABLE s ( c1 INTEGER, c2 INTEGER, c3 INTEGER );
INSERT INTO s VALUES(1,1,1);

CREATE TABLE t ( c1 INTEGER, c2 INTEGER );
INSERT INTO t VALUES(1,1);
COMMIT;

--# result : 1 row
\EXPLAIN PLAN
WITH w AS ( SELECT /*+ MATERIALIZE */
                    c1
               FROM r
              WHERE c1 > 0 )
SELECT *
  FROM w, s
 WHERE s.c1 IN ( SELECT t.c1
                   FROM t
                  WHERE s.c1 = t.c1
                    AND w.c1 = t.c2
               ) ;

In the query above, w and s are listed in an order of w,s in FROM clause, and the subquery refers to both s.c1 and w.c1. In this case, the server is abnormally terminated.

Workaround

List the materialized view last in FROM clause.

ISSUE-5634 V$LICENSE has been added.

Description

The view has been added to view the license information of the currently running server.

Symptom

N/A

Workaround

The patch is required.

ISSUE-5442 [CYCLONE] If replicating the column with a unique attribute, then the transaction may fail.

Description

If a column has a unique attribute in the table to replicate, then it is normally processed in an source database, but unique violation or NO_ROWS error may occur in a remote database. Therefore, to solve this problem, the feature to control concurrency of the column has been added when replicating the column with the unique attribute.

Symptom

[APPLIER #1(SID:100)-INSERT] ERR-23000(16057) : unique constraint (PUBLIC.TEST1) violated

[APPLIER #2(SID:101)-UPDATE] Conflict.

[APPLIER #3(SID:102)-DELETE] Conflict.

If a column has a unique attribute in the replicating table, then logs are frequently recorded on the trace log of the slave as given above.

Workaround

The patch is required.

ISSUE-5568 [CYCLONE] If replicating recovery spans two redo log files, then the starting point of the recovery is incorrectly set.

Description

When restarting after terminating the replication, cyclone finds the starting point of the recovery by using the information applied to the existing applier, then restarts the replication.

When recovering, it finds the optimal starting point by comparing the information between multiple appliers. If the redo log file information between appliers is different, then it discards the information of the old redo log file, and determines the starting point of the recovery by using only the new redo log file information, and this error has been fixed.

Symptom

When restarting after terminating the replication, a transaction may not be replicated.

Workaround

The patch is required.

ISSUE-5511 [CYCLONE] The internal transaction ID is set incorrectly in the distributor.

Description

It is guaranteed that the transaction IDs are not duplicated among simultaneously performed transactions in an original database. However, the completed transaction ID can be reused later.

When transferring the transaction to the slave after extracting the original transaction for the replication, the execution time of the transaction ID may be different from the original due to the parallel apply. In this case, the slave changes the separate transaction ID into the internally distinguishable ID to prevent identity duplication by reusing the transaction ID.

This internal transaction ID is allocated by the distributor, but it uses the original value instead of the internal value while analyzing specific logs, so the problem occurs, which a single transaction has two transaction IDs.

Two transaction ID values used as a delimiter value of concurrency control in distributor are allocated to a single transaction, so self dead-lock may occur in a specific situation.

Symptom

CREATE TABLE T1 ( C1 INTEGER PRIMARY KEY, C2 LONG VARCHAR );

INSERT INTO T1 VALUES( 1, 'AAA' );
DELETE FROM T1 WHERE C1=1;
INSERT INTO T1 VALUES( 1,'AAAAAAA .......' );  1 INSERT the data over 8K
COMMIT;

As above, if performing the query processing the same key value and INSERT which inserts the record over 8K in a single transaction, then the dead-lock occurs.

Workaround

The patch is required.

ISSUE-5499 If the argument of the window function is a scalar subquery expression, then the value is not evaluated.

Description

If the scalar subquery expression which can become a constant is used as the argument of the window function in the cluster environment, then the expression is not evaluated when executing the query, so the result is NULL.

Symptom

--# BUGBUG
--# result : 1
SELECT SUM( ( SELECT 1 FROM dual ) ) OVER() AS C_NAME
  FROM dual@G2;

C_NAME
------
  null

In the cluster environment, all expressions which can become constants are evaluated on the driver node and the result value is transferred to the generated query.

When using the subquery expression as an argument of the window function, then it did not determine whether to configure the constant, so it did not become a constant. If it is required to transfer the result value of the subquery expression through the generated query, then a result error occurs.

If the query is performed only on the local node in the standalone or the cluster environment, then the expression in the window function is evaluated even when it is not become a constant, so an error does not occur.

Workaround

The patch is required.

ISSUE-5505 If the access method for leftmost table in the join is the unique index access, and only part of key columns in the group by belong to the unique index, then the result may be wrong.

Description

If the access method for leftmost table in the join is the unique index access, and only part of key columns in the group by belong to the unique index, then the result may be wrong.

Symptom

DROP TABLE IF EXISTS r;
DROP TABLE IF EXISTS s;
DROP TABLE IF EXISTS t;

CREATE TABLE r( c1 INTEGER, c2 INTEGER, c3 INTEGER, c4 INTEGER, c5 INTEGER );

INSERT INTO r VALUES(1, 1, 1, 1, 1);
INSERT INTO r VALUES(1, 2, 1, 1, 1);
INSERT INTO r VALUES(1, 2, 1, 1, 1);
INSERT INTO r VALUES(2, 1, 2, 1, 1);
INSERT INTO r VALUES(2, 1, 2, 2, 1);
INSERT INTO r VALUES(3, 1, 2, 2, 1);
INSERT INTO r VALUES(3, 2, 3, 2, 1);
INSERT INTO r VALUES(4, 1, 3, 3, 1);
INSERT INTO r VALUES(5, 1, 3, 3, 1);
INSERT INTO r VALUES(1, 3, 2, 1, 1);
INSERT INTO r VALUES(1, 1, 1, 1, 1);

COMMIT;

CREATE TABLE s( c1 INTEGER PRIMARY KEY, c2 INTEGER, c3 INTEGER, c4 INTEGER, c5 INTEGER );

INSERT INTO s VALUES(1, 1, 1, 1, 1);
INSERT INTO s VALUES(2, 3, 1, 1, 1);
INSERT INTO s VALUES(3, 3, 1, 1, 1);
INSERT INTO s VALUES(4, 2, 2, 1, 1);
INSERT INTO s VALUES(5, 2, 2, 2, 1);
INSERT INTO s VALUES(6, 1, 2, 2, 1);
INSERT INTO s VALUES(7, 1, 3, 2, 1);
INSERT INTO s VALUES(8, 3, 3, 3, 1);
INSERT INTO s VALUES(9, 3, 3, 3, 1);

COMMIT;


CREATE TABLE t( c1 INTEGER, c2 INTEGER, c3 INTEGER, c4 INTEGER, c5 INTEGER );

INSERT INTO t VALUES(1, 1, 1, 1, 1);
INSERT INTO t VALUES(1, 3, 3, 1, 1);
INSERT INTO t VALUES(1, 3, 3, 1, 1);
INSERT INTO t VALUES(1, 2, 2, 1, 1);
INSERT INTO t VALUES(1, 2, 2, 1, 1);
INSERT INTO t VALUES(2, 3, 1, 1, 1);
INSERT INTO t VALUES(3, 3, 1, 1, 1);
INSERT INTO t VALUES(4, 2, 2, 1, 1);
INSERT INTO t VALUES(5, 2, 2, 2, 1);

COMMIT;

--# result : 6 rows
\EXPLAIN PLAN
SELECT s.c1, s.c2, t.c3
  FROM s, r, t
 WHERE s.c1 > 0 AND s.c1 < 5
   AND s.c1 = r.c1
   AND r.c1 = t.c1
 GROUP BY s.c1, s.c2, t.c3;


C1 C2 C3
-- -- --
 1  1  2
 1  1  3
 1  1  1
 1  1  2
 1  1  3
 1  1  1
 1  1  2
...
18 rows selected

< Execution Plan >
========================================================================
|  IDX  |  NODE DESCRIPTION                                            |
------------------------------------------------------------------------
|    0  |  SELECT STATEMENT                                            |
|    1  |    QUERY BLOCK ("$QB_IDX_2")                                 |
|    2  |      GROUP                                                   |
|    3  |        HASH JOIN (INNER JOIN)                                |
|    4  |          MERGE JOIN (INNER JOIN)                             |
|    5  |            INDEX ACCESS ("S", "S_PRIMARY_KEY_INDEX")         |
|    6  |            INDEX ACCESS ("R", "R_IDX")                       |
|    7  |          HASH JOIN INSTANT                                   |
|    8  |            TABLE ACCESS ("T")                                |
========================================================================

The result from the query above should be 6 rows, but actually 18 rows are output. The leftmost table s uses 'S_PRIMARY_KEY_INDEX', so the join result is sorted for s.c1. In the plan above, group by performs the grouping by using the sorted result of the join. However, the sorted records are not sorted for all group key columns, so it may lead to the wrong result.

Workaround

Use /*+ USE_GROUP_HASH */ hint.

ISSUE-5500 GoldilocksPreparedStatement.setFixedCHAR(), a JDBC non standard function, has been added.

Description

GoldilocksPreparedStatement.setFixedCHAR(), a JDBC non standard function, has been added.

Symptom

If binding a CHAR column to the WHERE clause in a SELECT statement by using PreparedStatement.setSrting(), then the result is not found.

create table x (c char(4));
insert into x (c) values ('a');  -- inserts 'a   '
PreparedStatement stmt = 
  conn.prepareStatement("select * from x where c = ?");
stmt.setString(1, "a");    // This won't return any records
stmt.executeQuery();

Workaround

Change the CHAR column to a VARCHAR column.

ISSUE-5482 If the logs are insufficient during the incomplete recovery, then the recovery fails.

Description

The recovery fails during the incomplete recovery even though it could be completed, and this error has been fixed.

Symptom

If performing the incomplete recovery by using the backup redo logs because the redo log is lost, and the backup redo log is earlier than the archive log, then it can not find the log later than the archive log, so the error occurs.

gSQL> ALTER DATABASE RECOVER UNTIL TIME '2023-04-05 19:05:01.559752';

ERR-HY000(14068): logfile does not exist - '/goldilocks/goldilocks_data/archive_log/archive_4.log'

Workaround

If the redo log later than the archive log does not exist, then perform an interactive incomplete recovery which performs the recovery by using undefected log only as follows.

gSQL> ALTER DATABASE BEGIN INCOMPLETE RECOVERY;

ERR-01000(14104): Warning: suggestion '/goldilocks/archive_log/archive_0.log'
ERR-01000(14103): Warning: media recovery needs a logfile including log (Lsn 139992)
Database altered.

gSQL> ALTER DATABASE RECOVER AUTOMATICALLY;

ERR-01000(14104): Warning: suggestion '/goldilocks/archive_log/archive_4.log'
ERR-01000(14103): Warning: media recovery needs a logfile including log (Lsn 144143)
Database altered.

gSQL> ALTER DATABASE END INCOMPLETE RECOVERY;

Database altered.

ISSUE-5445 Even if LOGFILE GROUP size is set sufficiently it fails to add LOGFILE GROUP when performing ADD LOGFILE GROUP.

Description

Even if LOGFILE GROUP size is set sufficiently it fails to add LOGFILE GROUP with a error message saying the logfile is smaller than the minimum size.
It is because the minimum size of the logfile should be calculated based on the number of log buffers and pending log buffers which were revised during the startup, but actually it is calculated based on the property value when performing ADD LOGFILE GROUP.

Symptom

If attempting to add a logfile group after starting up to mount phase with PROPERTY set as follows, then it fails.

LOG_BUFFER_SIZE=1G
PENDING_LOG_BUFFER_COUNT=32
gSQL> STARTUP MOUNT

Startup success

gSQL> ALTER DATABASE ADD LOGFILE GROUP 4 ('redo_4_0.log') SIZE 512M;

ERR-42000(16198): size of log file is smaller than minimum size of log file(1107296256 bytes).

Workaround

Create a logfile group by revising LOG_BUFFER_SIZE property and PENDING_LOG_BUFFER_COUNT property.

ISSUE-5424 If executing SELECT statement of an embedded SQL without INTO clause, then an error occurs even when the data exists, and this error has been fixed.

Description

If repeatedly executing SELECT statement of an embedded SQL without INTO clause, then an error occurs, and this error has been fixed.

Symptom

EXEC SQL SELECT 1 FROM DUAL;

EXEC SQL SELECT 1 FROM DUAL;

If repeatedly executing the same SELECT statement as given above, then the following error occurs.

Invalid cursor state : A cursor was open on the StatementHandle.

Workaround

Add INTO clause to the SELECT statement, then execute it.

ISSUE-5411 It throws NullPointerException when using getBinaryStream method of ResultSet class in JDBC, and this error has been fixed.

Description

It throws NullPoinerException when using getBinaryStream method of ResultSet class to get null data of long varbinary type, and this error has been fixed.

Symptom

C_BLOB of LONG VARBINARY type in table TEST_LOB has NULL data.

CREATE TABLE PUBLIC.TEST_LOB
(
   ID NUMBER( 10, 0 ),
   C_BLOB LONG VARBINARY
);

INSERT INTO TEST_LOB VALUES(1,UNHEX(HEX('XXXXXXXX')));
INSERT INTO TEST_LOB VALUES(2,null);
COMMIT;

The following is a code which uses getBinaryStream method to get the data of LONG VARBINARY type.

Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID, C_BLOB FROM TEST_LOB");

while (rs.next()) {
    try{
        InputStream is = rs.getBinaryStream("c_blob");
        byte[] bytes = new byte[0];
        bytes = new byte[is.available()];
        is.read(bytes);
    } catch( Exception e){
        System.out.println(e);
    }
}

When executing the code above, it throws java.lang.NullPointerException.

Workaround

The patch is required.

ISSUE-5398 The data is lost when gloader uploads the data in the text mode, and this error has been fixed.

Description

gloader uses the field delimiter and the line delimiter which start with the same character when uploading the data in the text mode. If the data includes the first character of these delimiter, then the data is truncated and uploaded in an invalid form, and this error has been fixed.

Symptom

The following is an example of a data file.

data 1^^^Cc__Cc^data 2^Rr__Rr

The following is an example of a control file.

TABLE TEST
FIELD TERMINATED BY '^Cc__Cc^'
LINE TERMINATED BY '^Rr__Rr\n'

If uploading the data by using the control file and the data file above, then the data is truncated.

gloader test test -i --control test.ctl --data test.dat --array 1 --no-copyright
COMPLETED IN IMPORTING TABLE: PUBLIC.TEST, TOTAL 3 RECORDS, SUCCEEDED 3 RECORDS

gSQL> SELECT * FROM TEST;
C1      C2           
------- -------------
data 1^ null         
^       null         
null    data 2^Rr__Rr

Workaround

Use the the field delimiter and the line delimiter which start with the different character each other.

ISSUE-5407 Cluster peer which is waiting for the lock to be release can not recognize that driver node is killed.

Description

If the driver member is abnormally terminated while waiting for the lock to be released on the remote, then the remotely created session remains alive.

Symptom

The following is an example of an environment that the cluster group G1 has G1N1, G1N2 as members, and the table T1 is created.

The record of table T1 is updated on G1N1.

gSQL> UPDATE T1 SET A = A + 1 WHERE A = 1;

1 row updated.

If the same record is updated on G1N2, then it will wait.

gSQL> UPDATE T1 SET A = 10 WHERE A = 1;

When checking the session on G1N1, then it is seen that the cluster session is waiting for the update sent from G1N2.

gSQL> SELECT SESSION_STATUS FROM V$SESSION@G1N1
       WHERE PROGRAM_NAME = 'cluster peer';

SESSION_STATUS
--------------
CONNECTED

Even when gsql waiting for the update sent from G1N2 is killed, the session still remains alive on G1N1 as follows.

gSQL> SELECT SESSION_STATUS FROM V$SESSION@G1N1
       WHERE PROGRAM_NAME = 'cluster peer';

SESSION_STATUS
--------------
CONNECTED

Workaround

The patch is required.

22c.1.2 Patch Notes

ISSUE-5174 gpec supports declaring function arguments.

Description

gpec supports declaring function arguments. For more information, refer to Declaring Function Argument.

Symptom

N/A

Workaround

The patch is required.

ISSUE-5353 When connecting and disconnecting by using the window ODBC, then the number of program handles increase and this error has been fixed.

Description

When repeatedly connecting and disconnecting by using the window ODBC, then the number of entire program handles increase and this error has been fixed.

Symptom

When repeatedly connecting and disconnecting by using the window ODBC, then the number of entire program handles increase.

Workaround

The patch is required.

ISSUE-5344 When performing view projection pruning it deletes the column used in the upper block.

Description

If the following conditions are satisfied, the server may be abnormally terminated due to improperly performed view projection pruning.

Symptom

The following is a sample query which can cause an error.

SELECT sum_col1
  FROM ( SELECT sum(col1) as sum_col1
              , DECODE( sum(col1), NULL, 0 ) as decode_sum_col1
           FROM t1
          GROUP BY col2 
       ) v1;

decode_sum_col1 is not used in the upper block in v1, so it is pruned. Moreover, sum(col1) which is an argument of DECODE is also pruned. However, sum(col1) is already specified in select list and it is used in the view's upper block, so it should not be deleted.

Workaround

The patch is required.

ISSUE-5336 When using SUBQUERY in SELECT INTO statement of gpec, then it is not processed as a SELECT INTO statement.

Description

If gpec parses the SQL which has SUBQUERY after a SELECT INTO statement, then it is not processed as a SELECT INTO statement.

Symptom

The following is an example of using SUBQUERY after using the host variable array in a SELECT INTO statement.

EXEC SQL BEGIN DECLARE SECTION;
int no[10];
int count[10];
EXEC SQL END DECLARE SECTION;

EXEC SQL SELECT empno, B.COUNT 
    INTO :no, :count,
    FROM emp, (SELECT count(*) as COUNT FROM emp);

When performing the example above, then the following error occurs.

SQLCODE :-16289
SQLSTATE: 42000
ERROR MSG : into clause can have only one row

Workaround

Fetch the cursor instead of using the host variable array in a SELECT INTO statement.

ISSUE-5277 A hang occurs because buffers cannot be reused after deleting a disk tablespace.

Description

If the disk tablespace is deleted, then the ager thread moves the buffer cache which cached the the deleted tablesapace to the free list. In this case, it only displays that the dirty pages should be discarded. However, if the checkpoint does not occur, then the discarded pages can not be reused, so the hang occurs in the session looking for the free buffer, and this error has been fixed.

Symptom

If the buffers which cached pages of the deleted disk tablespace become the dirty page, then the session accessing the disk tablespace can not get the free buffer, so the hang occurs.

Workaround

Clear the dirty pages of the deleted disk tablespace by performing the checkpoint.

ISSUE-4945 Use SQLTables to check the existence of the table while creating a table to operate CYCLONE, CYMON.

Description

It has been modified to create the table after checking the existence of the table required to operate CYCLONE, CYMON by using SQLTables.

Symptom

N/A

Workaround

Validate the table existence when preparing, then use the result to determine whether the table exist.

ISSUE-5218 Using async commit leads to an excessive use of transaction by a single session.

Description

Async commit in the cluster environment can use a new transaction while the transaction is not terminated, so a single session may use two ore more transactions.

Symptom

An excessive use of transactions may cause the lack of transactions.

Workaround

The patch is required.

ISSUE-5029 Even when the master rejoins with reset all option while operating Cyclone in the cluster environment, but the existing replication information is not initialized.

Description

When restarting the previously operated master with reset all option while Cyclone is operating in the cluster environment, then it should not use the existing replication information, and the replication should be resumed from the current time.

Symptom

Even when restarting the master with reset all option, the recovery process uses the existing replication operating information.

Workaround

The patch is required.

22c.1.1 Patch Notes

ISSUE-5132 It supports DML execution for the single domain table without the global secondary index in the cluster environment.

Description

If the global secondary index is not configured when executing DML for the single domain table in cluster environment, then it may fail. DML query requires the global secondary index to guarantee the data consistency between servers. Therefore, if the data is stored in a single server, and it is not required to guarantee the data consistency between server, then it supports DML without the global secondary index.

It is recommended to configure the global secondary index to manage a single table in multiple servers in cluster environment.

Symptom

--# G4 group has G4N1 only.
CREATE TABLE r ( c1 INTEGER )
   CLONED
   AT CLUSTER GROUP g4
   WITHOUT GLOBAL SECONDARY INDEX;

--# result: success
INSERT INTO r VALUES (1), (2), (3);

--# Improvement
--# result: success
DELETE FROM r WHERE c1 = 2;

ERR-42000(16519): global secondary index expected in cluster DML

Workaround

The patch is required.

ISSUE-5193 When executing a query including index backward scan in cluster environment, then the result is wrong.

Description

When executing the user query in cluster environment, if it is required to access the remote server and the user query includes index backward scan by ORDER BY statement or by a hint, then the query result may be in an order of index forward scan.

Symptom

If it is required to access the remote server when executing the user query in cluster environment, then the generated query is configured and transferred to the remote server. However, the remote server performs the index forward scan because the access path hint information is wrong when configuring the generated query including the index backward scan.

CREATE TABLE t1 
(
    c1 INTEGER
)
    SHARDING BY RANGE ( c1 )
    SHARD s1 VALUES LESS THAN ( 10 )       AT CLUSTER GROUP g1,
    SHARD s2 VALUES LESS THAN ( MAXVALUE ) AT CLUSTER GROUP g2;

INSERT INTO t1 VALUES ( 12 );
INSERT INTO t1 VALUES ( 11 );
INSERT INTO t1 VALUES ( NULL );

CREATE INDEX t1_idx1 ON t1( c1 ASC NULLS LAST );


--# BUGBUG
--# result: 3 rows
--#         null
--#           12
--#           11
\EXPLAIN PLAN
SELECT c1 FROM t1@g2 ORDER BY c1 DESC NULLS FIRST;

  C1
----
  11
  12
null

3 rows selected.

Workaround

The patch is required.

ISSUE-5109 Cyclone malfunctions after shard rebalancing and split brain, and this error has been fixed.

Description

When recovering after shard rebalancing and split brain, Cyclone is terminated with "internal error occurred (Not Need Rebalance)" error.

Symptom

Even when cyclone determines rebalancing is not required, but it is rebalanced in a specific situation. This may happen in shard rebalancing and split brain situation.

Workaround

Restart Cyclone with --reset.

ISSUE-5162 Even when SQL_ATTR_CONNECTION_TIMEOUT is set in ODBC, it may wait longer than the settings, and this error has been fixed.

Description

Even when SQL_ATTR_CONNECTION_TIMEOUT is set in ODBC to detect the network disconnection, it may wait longer than the given timeout setting, and this error has been fixed.

Symptom

Even when SQL_ATTR_CONNECTION_TIMEOUT is set in ODBC, it can not detect the network disconnection in a specific situation, so it keeps waiting for the server's response in ODBC.

Workaround

Add the following attributes to odbc.ini, so that it can quickly detect the network disconnection.

Or, alter the following kernel attributes, so that it can quickly detect the network disconnection.

ISSUE-5160 When LONGVARCHAR, LONGVARBINARY parameters exist in ODBC global connection environment, the client's memory increases, and this error has been fixed.

Description

When repeatedly performing the statement including LONGVARCHAR, LONGVARBINARY parameters in ODBC global connection environment, the client's memory increases, and this error has been fixed.

Symptom

When repeatedly performing the SQL including LONGVARCHAR, LONGVARBINARY parameters with the same statement in ODBC global connection environment, the client's memory increased.

Workaround

The patch is required.

ISSUE-5156 SQLSTATEs of some errors have been changed.

Description

SQLSTATEs of some errors have been changed.

Symptom

SQLSTATEs of some errors have been changed as follows.

Error number

Old SQLSTATE

Modified SQLSTATE

Message

13034

RD000

08S01

Service is not available

16351

08000

HY000

failed to connect to the cluster member '%s'

16523

HY000

08S01

the database system is shutting down

25001

HY000

08001

Server is not running

Workaround

The patch is required.

ISSUE-5147 Even when it was set as PROTOCOL=TCP in the configuration of CYMON, it was connected by using DA, and this error has been fixed.

Description

Even when it was set as PROTOCOL=TCP in the configuration of CYMON, it was connected by using DA. However, this error has been fixed, so it is connected by using TCP now.

Symptom

If it is set as PROTOCOL=TCP in the configuration of CYMON, it should be connected by using TCP, but, in reality, it is connected by using DA.

Workaround

The patch is required.

ISSUE-5004 A deadlock occurs on the slave's pre-process phase during the replication with CYCLONE in the cluster environment.

Description

A deadlock intermittently occurs during the replication with CYCLONE in the cluster environment.

Symptom

The replication is not proceeding and it seems to be stop. It is because a deadlock occurs during the pre-process for the replication in the cluster environment. The replication is not proceeding any more even when monitoring with CYMON.

Workaround

Reset the master and the slave of CYCLONE.

ISSUE-4985 The progressing information in slave has been added to the CYCLONE's monitoring information.

Description

The information being processed in slave (Apply_FileSeq, Apply_BlockSeq, Apply_Commit_Lsn) has been added to the CYCLONE's monitoring information.

Symptom

N/A

Workaround

The patch is required.

ISSUE-4882 It is modified to report the detatiled error message when an error occurs while processing CYCLONE SYNC.

개요

It is modified to record the detailed error message together with ERROR OCCURRED on the trace log when an error occurs while processing CYCLONE SYNC.

Symptom

N/A

Workaround

The patch is required.