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 | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
Shared Nothing Cluster | X | X | O | O | O |
DA (Direct Attach) | O | O | O | O | O |
JDBC DA (Direct Attach) | X | X | O | O | O |
C/S (Client/Server) Dedicated | X | O | O | O | O |
C/S (Client/Server) Shared | X | 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 | X | O | O | O | O |
AIX platform | X | O | O | O | O |
Windows Client Platform | X | O | O | O | O |
CDC(Change Data Capture) replication | X | O | O | O | O |
CDC replication with log mirror | X | O | O | O | O |
multi-level start up | X | O | O | O | O |
parallel database loading | O | O | O | O | O |
parallel index build | X | O | O | O | O |
SQL plan cache | X | O | O | O | O |
Storage Internal
The following is a feature matrix for storage internal.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.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 | X | 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 | X | O | O | O | O |
memory heap table | O | O | O | O | O |
memory instant table | X | O | O | O | O |
memory B-tree index | O | O | O | O | O |
memory instant B-tree | X | O | O | O | O |
memory instant hash | X | O | O | O | O |
global secondary index | X | X | O | O | O |
disk data tablespace | X | X | X | X | O |
disk bitmap data segment | X | X | X | X | O |
disk B-tree index | X | X | X | X | O |
disk global secondary index | X | X | X | X | O |
Transaction Control
The following is a feature matrix for transaction control.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.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 | X | O | O | O | O |
read/write database | O | O | O | O | O |
flat transaction | O | O | O | O | O |
distributed transaction | X | O | O | O | O |
read-only transaction | X | 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 | X | O | O | O | O |
supplemental logging | X | O | O | O | O |
mirrored logging | X | 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 | X | O | O | O | O |
Backup & Recovery
The following is a feature matrix for backup & recovery.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
off-line backup | O | O | O | O | O |
on-line backup | X | O | O | O | O |
full backup | X | O | O | O | O |
incremental backup | X | O | O | O | O |
complete recovery | O | O | O | O | O |
incomplete recovery | X | O | O | O | O |
auto instance recovery | O | O | O | O | O |
tablespace recovery | X | O | O | O | O |
file recovery | X | O | O | O | O |
change tracking | X | X | X | X | O |
Database Information
DICTIONARY_SCHEMA Schema
The following is a feature matrix for DICTIONARY_SCHEMA schema.
Family | Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|---|
Views of ALL_family | ALL_ALL_TABLES | X | O | O | O | O |
ALL_ARGUMENTS | X | X | O | O | O | |
ALL_CATALOG | X | O | O | O | O | |
ALL_CLUSTER_TABLES | X | X | O | O | O | |
ALL_COL_COMMENTS | X | O | O | O | O | |
ALL_COL_PLACE | X | X | O | X | X | |
ALL_COL_PRIVS | X | O | O | O | O | |
ALL_COL_PRIVS_MADE | X | O | O | O | O | |
ALL_COL_PRIVS_RECD | X | O | O | O | O | |
ALL_CONSTRAINTS | X | O | O | O | O | |
ALL_CONS_COLUMNS | X | O | O | O | O | |
ALL_DB_PRIVS | X | O | O | O | O | |
ALL_DB_PRIVS_MADE | X | O | O | O | O | |
ALL_DB_PRIVS_RECD | X | O | O | O | O | |
ALL_DEPENDENCIES | X | X | O | O | O | |
ALL_GLOBAL_SECONDARY_INDEXES | X | X | O | O | O | |
ALL_GSI_PLACE | X | X | O | O | O | |
ALL_INDEXES | X | O | O | O | O | |
ALL_IND_COLUMNS | X | O | O | O | O | |
ALL_IND_PLACE | X | X | O | O | O | |
ALL_NONSCHEMA_COMMENTS | X | O | O | O | O | |
ALL_OBJECTS | X | O | O | O | O | |
ALL_PACKAGE_PRIVS | X | X | X | X | O | |
ALL_PACKAGE_PRIV_MADE | X | X | X | X | O | |
ALL_PACKAGE_PRIV_RECD | X | X | X | X | O | |
ALL_PROCEDURES | X | X | O | O | O | |
ALL_PROC_PRIVS | X | X | O | O | O | |
ALL_PROC_PRIV_MADE | X | X | O | O | O | |
ALL_PROC_PRIV_RECD | X | X | O | O | O | |
ALL_SCHEMAS | X | O | O | O | O | |
ALL_SCHEMA_PATH | X | O | O | O | O | |
ALL_SCHEMA_PRIVS | X | O | O | O | O | |
ALL_SCHEMA_PRIVS_MADE | X | O | O | O | O | |
ALL_SCHEMA_PRIVS_RECD | X | O | O | O | O | |
ALL_SEQUENCES | X | O | O | O | O | |
ALL_SEQ_PRIVS | X | O | O | O | O | |
ALL_SEQ_PRIVS_MADE | X | O | O | O | O | |
ALL_SEQ_PRIVS_RECD | X | O | O | O | O | |
ALL_SHARD_KEY_COLUMNS | X | X | O | O | O | |
ALL_SOURCE | X | X | O | O | O | |
ALL_SYNONYMS | X | O | O | O | O | |
ALL_TABLES | X | O | O | O | O | |
ALL_TAB_COLS | X | O | O | O | O | |
ALL_TAB_COLUMNS | X | O | O | O | O | |
ALL_TAB_COMMENTS | X | O | O | O | O | |
ALL_TAB_IDENTITY_COLS | X | O | O | O | O | |
ALL_TAB_PLACE | X | X | X | O | O | |
ALL_TAB_SHARDS | X | X | O | O | O | |
ALL_TAB_PRIVS | X | O | O | O | O | |
ALL_TAB_PRIVS_MADE | X | O | O | O | O | |
ALL_TAB_PRIVS_RECD | X | O | O | O | O | |
ALL_TBS_PRIVS | X | O | O | O | O | |
ALL_TBS_PRIVS_MADE | X | O | O | O | O | |
ALL_TBS_PRIVS_RECD | X | O | O | O | O | |
ALL_USERS | X | O | O | O | O | |
ALL_VIEWS | X | O | O | O | O | |
Views of DBA_family | DBA_ALL_TABLES | X | O | O | O | O |
DBA_ARGUMENTS | X | X | O | O | O | |
DBA_CATALOG | X | O | O | O | O | |
DBA_CLUSTER | X | X | O | O | O | |
DBA_CLUSTER_COMMENTS | X | X | O | O | O | |
DBA_CLUSTER_TABLES | X | X | O | O | O | |
DBA_COL_COMMENTS | X | O | O | O | O | |
DBA_COL_PLACE | X | X | O | X | X | |
DBA_COL_PRIVS | X | O | O | O | O | |
DBA_CONSTRAINTS | X | O | O | O | O | |
DBA_CONS_COLUMNS | X | O | O | O | O | |
DBA_DB_PRIVS | X | O | O | O | O | |
DBA_DEPENDENCIES | X | X | O | O | O | |
DBA_EXTENTS | X | O | O | O | O | |
DBA_GLOBAL_SECONDARY_INDEXES | X | X | O | O | O | |
DBA_GSI_PLACE | X | X | O | O | O | |
DBA_INDEXES | X | O | O | O | O | |
DBA_IND_COLUMNS | X | O | O | O | O | |
DBA_IND_PLACE | X | X | O | O | O | |
DBA_NONSCHEMA_COMMENTS | X | O | O | O | O | |
DBA_OBJECTS | X | O | O | O | O | |
DBA_PACKAGE_PRIVS | X | X | X | X | O | |
DBA_PROCEDURES | X | X | O | O | O | |
DBA_PROC_PRIVS | X | X | O | O | O | |
DBA_PROFILES | X | O | O | O | O | |
DBA_RECYCLEBIN | X | X | X | X | O | |
DBA_SCHEMAS | X | O | O | O | O | |
DBA_SCHEMA_PATH | X | O | O | O | O | |
DBA_SCHEMA_PRIVS | X | O | O | O | O | |
DBA_SEQUENCES | X | O | O | O | O | |
DBA_SEQ_PRIVS | X | O | O | O | O | |
DBA_SHARD_KEY_COLUMNS | X | X | O | O | O | |
DBA_SOURCE | X | X | O | O | O | |
DBA_STAT_SYSTEM | X | X | O | O | O | |
DBA_SYNONYMS | X | O | O | O | O | |
DBA_SYS_PRIVS | X | O | O | O | O | |
DBA_TABLES | X | O | O | O | O | |
DBA_TABLESPACES | X | O | O | O | O | |
DBA_TAB_COLS | X | O | O | O | O | |
DBA_TAB_COLUMNS | X | O | O | O | O | |
DBA_TAB_COMMENTS | X | O | O | O | O | |
DBA_TAB_IDENTITY_COLS | X | O | O | O | O | |
DBA_TAB_PLACE | X | X | O | O | O | |
DBA_TAB_PRIVS | X | O | O | O | O | |
DBA_TAB_SHARDS | X | X | O | O | O | |
DBA_TBS_PRIVS | X | O | O | O | O | |
DBA_USERS | X | O | O | O | O | |
DBA_VIEWS | X | O | O | O | O | |
Views of USER_family | USER_ALL_TABLES | X | O | O | O | O |
USER_ARGUMENTS | X | X | O | O | O | |
USER_CATALOG | X | O | O | O | O | |
USER_CLUSTER_TABLES | X | X | O | O | O | |
USER_COL_COMMENTS | X | O | O | O | O | |
USER_COL_PLACE | X | X | O | X | X | |
USER_COL_PRIVS | X | O | O | O | O | |
USER_COL_PRIVS_MADE | X | O | O | O | O | |
USER_COL_PRIVS_RECD | X | O | O | O | O | |
USER_CONSTRAINTS | X | O | O | O | O | |
USER_CONS_COLUMNS | X | O | O | O | O | |
USER_DEPENDENCIES | X | X | O | O | O | |
USER_EXTENTS | X | O | O | O | O | |
USER_GLOBAL_SECONDARY_INDEXES | X | X | O | O | O | |
USER_GSI_PLACE | X | X | O | O | O | |
USER_INDEXES | X | O | O | O | O | |
USER_IND_COLUMNS | X | O | O | O | O | |
USER_IND_PLACE | X | X | O | O | O | |
USER_OBJECTS | X | O | O | O | O | |
USER_PACKAGE_PRIVS | X | X | X | X | O | |
USER_PACKAGE_PRIVS_MADE | X | X | X | X | O | |
USER_PACKAGE_PRIVS_RECD | X | X | X | X | O | |
USER_PROCEDURES | X | X | O | O | O | |
USER_PROC_PRIVS | X | X | O | O | O | |
USER_PROC_PRIVS_MADE | X | X | O | O | O | |
USER_PROC_PRIVS_RECD | X | X | O | O | O | |
USER_RECYCLEBIN | X | X | X | X | O | |
USER_SCHEMAS | X | O | O | O | O | |
USER_SCHEMA_PATH | X | O | O | O | O | |
USER_SCHEMA_PRIVS | X | O | O | O | O | |
USER_SCHEMA_PRIVS_MADE | X | O | O | O | O | |
USER_SCHEMA_PRIVS_RECD | X | O | O | O | O | |
USER_SEQUENCES | X | O | O | O | O | |
USER_SEQ_PRIVS | X | O | O | O | O | |
USER_SEQ_PRIVS_MADE | X | O | O | O | O | |
USER_SEQ_PRIVS_RECD | X | O | O | O | O | |
USER_SHARD_KEY_COLUMNS | X | X | O | O | O | |
USER_SOURCE | X | X | O | O | O | |
USER_SYNONYMS | X | O | O | O | O | |
USER_SYS_PRIVS | X | O | O | O | O | |
USER_TABLES | X | O | O | O | O | |
USER_TABLESPACES | X | O | O | O | O | |
USER_TAB_COLS | X | O | O | O | O | |
USER_TAB_COLUMNS | X | O | O | O | O | |
USER_TAB_COMMENTS | X | O | O | O | O | |
USER_TAB_IDENTITY_COLS | X | O | O | O | O | |
USER_TAB_PLACE | X | X | O | O | O | |
USER_TAB_PRIVS | X | O | O | O | O | |
USER_TAB_PRIVS_MADE | X | O | O | O | O | |
USER_TAB_PRIVS_RECD | X | O | O | O | O | |
USER_TAB_SHARDS | X | X | O | O | O | |
USER_USERS | X | O | O | O | O | |
USER_VIEWS | X | O | O | O | O | |
Other views | AUDIT_POLICIES | X | X | X | O | O |
AUDIT_POLICY_ENABLED | X | X | X | O | O | |
AUDIT_POLICY_OPTIONS | X | X | X | O | O | |
AUDIT_TRAIL | X | X | X | O | O | |
DATABASE_PROPERTIES | X | O | O | O | O | |
DBC_TABLE_TYPE_INFO | X | O | O | O | O | |
DICTIONARY | X | O | O | O | O | |
DICT_COLUMNS | X | O | O | O | O | |
DUAL | X | X | O | O | O | |
IMPLEMENTATION_INFO | X | O | O | O | O | |
IMPLEMENTATION_INFO_BASE | X | O | O | O | O | |
JDBC_CLIENT_PROPS | X | O | O | O | O | |
PRODUCT | X | O | O | O | O | |
SESSION_PRIVS | X | O | O | O | O | |
SUPPLEMENTAL_LOG_TABLE_INFO | X | O | O | O | O | |
Aliased synonym | COLS | X | O | O | O | O |
DICT | X | O | O | O | O | |
IND | X | O | O | O | O | |
OBJ | X | O | O | O | O | |
RECYCLEBIN | X | X | X | X | O | |
SEQ | X | O | O | O | O | |
TABS | X | O | O | O | O |
INFORMATION_SCHEMA Schema
The following is a feature matrix for INFORMATION_SCHEMA schema.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
COLUMNS | X | O | O | O | O |
COLUMN_PRIVILEGES | X | O | O | O | O |
CONSTRAINT_COLUMN_USAGE | X | O | O | O | O |
CONSTRAINT_TABLE_USAGE | X | O | O | O | O |
INFORMATION_SCHEMA_CATALOG_NAME | X | O | O | O | O |
KEY_COLUMN_USAGE | X | O | O | O | O |
MODULES | X | X | X | X | O |
MODULE_BODY | X | X | X | X | O |
MODULE_BODY_MODULE_USAGE | X | X | X | X | O |
MODULE_BODY_ROUTINE_USAGE | X | X | X | X | O |
MODULE_BODY_SEQUENCE_USAGE | X | X | X | X | O |
MODULEBODY_TABLE_USAGE | X | X | X | X | O |
MODULE_MODULE_USAGE | X | X | X | X | O |
MODULE_PRIVILEGES | X | X | X | X | O |
MODULE_ROUTINE_USAGE | X | X | X | X | O |
MODULE_SEQUENCE_USAGE | X | X | X | X | O |
MODULE_TABLE_USAGE | X | X | X | X | O |
PARAMETERS | X | X | O | O | O |
REFERENTIAL_CONSTRAINTS | X | O | O | O | O |
ROUTINES | X | X | O | O | O |
ROUTINE_MODULE_USAGE | X | X | X | X | O |
ROUTINE_PRIVILEGES | X | X | O | O | O |
ROUTINE_ROUTINE_USAGE | X | X | O | O | O |
ROUTINE_SEQUENCE_USAGE | X | X | O | O | O |
ROUTINE_TABLE_USAGE | X | X | O | O | O |
SCHEMATA | X | O | O | O | O |
SEQUENCES | X | O | O | O | O |
SQL_FEATURES | X | O | O | O | O |
SQL_IMPLEMENTATION_INFO | X | O | O | O | O |
SQL_PACKAGES | X | O | O | O | O |
SQL_PARTS | X | O | O | O | O |
SQL_SIZING | X | O | O | O | O |
STATISTICS | X | O | O | O | O |
TABLES | X | O | O | O | O |
TABLE_CONSTRAINTS | X | O | O | O | O |
TABLE_PRIVILEGES | X | O | O | O | O |
USAGE_PRIVILEGES | X | O | O | O | O |
VIEWS | X | O | O | O | O |
VIEW_MODULE_USAGE | X | X | X | X | O |
VIEW_ROUTINE_USAGE | X | X | O | O | O |
VIEW_TABLE_USAGE | X | O | O | O | O |
PERFORMANCE_VIEW_SCHEMA Schema
The following is a feature matrix for PERFORMANCE_VIEW_SCHEMA schema.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
GV$____ | X | X | O | O | O |
V$AGABLE_INFO | X | X | O | O | O |
V$ARCHIVELOG | X | O | O | O | O |
V$AUDITABLE_DB_PRIVILEGES | X | X | X | O | O |
V$AUDITABLE_SYSTEM_ACTIONS | X | X | X | O | O |
V$BACKUP | X | O | O | O | O |
V$BALANCER | X | O | O | O | O |
V$BCH | X | X | X | X | O |
V$BUFFER_STAT | X | X | X | X | O |
V$CLUSTER_DISPATCHER | X | X | O | O | O |
V$CLUSTER_LOCATION | X | X | O | O | O |
V$CLUSTER_MEMBER | X | X | O | O | O |
V$COLUMNS | X | O | O | O | O |
V$CONTROLFILE | X | O | O | O | O |
V$DATAFILE | X | O | O | O | O |
V$DB_CHANGE_TRACKING | X | X | X | X | O |
V$DB_FILE | X | O | O | O | O |
V$DISPATCHER | X | O | O | O | O |
V$ERROR_CODE | X | O | O | O | O |
V$GLOBAL_TRANSACTION | X | O | O | O | O |
V$JOURNALING | X | X | O | O | O |
V$INCREMENTAL_BACKUP | X | O | O | O | O |
V$INSTANCE | X | O | O | O | O |
V$KEYWORDS | X | O | O | O | O |
V$LATCH | X | O | O | O | O |
V$LOCK_WAIT | X | O | O | O | O |
V$LOCKED_OBJECT | X | X | X | X | O |
V$LOGFILE | X | O | O | O | O |
V$PROCESS_MEM_STAT | X | O | O | O | O |
V$PROCESS_SQL_STAT | X | O | O | O | O |
V$PROCESS_STAT | X | O | O | O | O |
V$PROPERTY | X | O | O | O | O |
V$PSM_RESERVED_WORDS | X | X | O | O | O |
V$QUEUE | X | O | O | O | O |
V$RESERVED_WORDS | X | O | O | O | O |
V$SESSION | X | O | O | O | O |
V$SESSION_AUDIT | X | X | X | O | O |
V$SESSION_CONNECT_INFO | X | O | O | O | O |
V$SESSION_EVENT | X | X | O | O | O |
V$SESSION_MEM_STAT | X | O | O | O | O |
V$SESSION_SQL_STAT | X | O | O | O | O |
V$SESSION_STAT | X | O | O | O | O |
V$SESSION_WAIT | X | X | O | O | O |
V$SHARED_MODE | X | O | O | O | O |
V$SHARED_SERVER | X | O | O | O | O |
V$SHM_SEGMENT | X | O | O | O | O |
V$SPROPERTY | X | O | O | O | O |
V$SQLFN_METADATA | X | O | O | O | O |
V$SQL_CACHE | X | O | O | O | O |
V$SQL_COMMAND | X | X | O | O | O |
V$SQL_HISTORY | X | X | O | O | O |
V$STATEMENT | X | O | O | O | O |
V$SYSTEM_EVENT | X | X | O | O | O |
V$SYSTEM_MEM_STAT | X | O | O | O | O |
V$SYSTEM_SQL_STAT | X | O | O | O | O |
V$SYSTEM_STAT | X | O | O | O | O |
V$TABLES | X | O | O | O | O |
V$TABLESPACE | X | O | O | O | O |
V$TABLESPACE_STAT | X | X | O | O | O |
V$TRANSACTION | X | O | O | O | O |
V$WAIT_EVENT_CLASS_NAME | X | X | O | O | O |
V$WAIT_EVENT_NAME | X | X | O | O | O |
V$XA_TRANSATION | X | X | O | O | O |
Server Property
The following is a feature matrix for server property.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
AGING_INTERVAL | O | O | O | O | O |
AGING_PLAN_INTERVAL | X | O | O | O | O |
ARCHIVELOG_DIR | O | O | X | X | X |
ARCHIVELOG_DIR_1 ~ DIR_10 | X | O | O | O | O |
ARCHIVELOG_FILE | X | O | O | O | O |
ARCHIVELOG_MODE | X | O | O | O | O |
BACKUP_DIR_1 ~ DIR_10 | X | O | O | O | O |
BLOCK_READ_COUNT | O | O | O | O | O |
BROADCAST_INDEX_REBUILD_PROTOCOL | X | X | X | X | O |
BROADCAST_REBALANCE_PROTOCOL | X | X | X | X | O |
BUFFER_CACHE_SIZE | X | X | X | X | O |
BUFFER_CHECKPOINT_LIST_COUNT | X | X | X | X | O |
BUFFER_FLUSH_THREADS | X | X | X | X | O |
BUFFER_FLUSHING_INTERVAL | X | X | X | X | O |
BUFFER_FREE_LIST_COUNT | X | X | X | X | O |
BUFFER_HASH_BUCKETS | X | X | X | X | O |
BUFFER_HOT_REGION_CRITERIA | X | X | X | X | O |
BUFFER_HOT_REGION_PERCENT | X | X | X | X | O |
BUFFER_LRU_LIST_COUNT | X | X | X | X | O |
BUFFER_MULTIPAGE_READ_COUNT | X | X | X | X | O |
BULK_IO_PAGE_COUNT | X | O | O | O | O |
CDISPATCHER_HOT_POLICY_INTERVAL | X | X | O | O | O |
CDISPATCHER_LOCKLESS_THREADS | X | X | X | X | O |
CDISPATCHER_SOCKET_BUFFER_SIZE | X | X | O | O | O |
CDISPATCHER_THREADS | X | X | O | O | O |
CHANGE_TRACKING | X | X | X | X | O |
CHANGE_TRACKING_EXTENT_SIZE | X | X | X | X | O |
CHANGE_TRACKING_FILE | X | X | X | X | O |
CHAR_LENGTH_UNITS | X | O | O | O | O |
CHARACTER_SET | X | O | O | O | O |
CHECK_DEDICATE_CONNECTION_INTERVAL | X | X | O | O | O |
CHECK_DEDICATE_SOCKET | X | X | O | X | X |
CLIENT_MAX_COUNT | O | O | O | O | O |
CLIENT_NUMA_POLICY | X | X | O | O | O |
CLOSE_PSM_CHILD_STMTS | X | X | O | O | O |
CLUSTER_ASYNC_COMMIT | X | X | O | O | O |
CLUSTER_ASYNC_REPLICATION | X | X | O | O | O |
CLUSTER_CM_BUFFER_COUNT | X | X | O | O | O |
CLUSTER_CM_BUFFER_SIZE | X | X | O | O | O |
CLUSTER_CM_READ_BUFFER_SIZE | X | X | O | O | O |
CLUSTER_COMMIT_SLAVES | X | X | O | O | O |
CLUSTER_COMMIT_STREAM_ISOLATION | X | X | O | O | O |
CLUSTER_CONNECTION | X | X | O | O | O |
CLUSTER_CONNECTION_TIMEOUT_SEC | X | X | O | O | O |
CLUSTER_DATA_SYNC_SERVERS | X | X | O | O | O |
CLUSTER_DEADLOCK_TIMEOUT | X | X | X | X | O |
CLUSTER_DISPATCHER_IN_QUEUE_SIZE | X | X | O | O | O |
CLUSTER_DISPATCHER_NUMA_STREAM_MAP | X | X | O | O | O |
CLUSTER_DISPATCHER_OUT_QUEUE_SIZE | X | X | O | O | O |
CLUSTER_HEARTBEAT_INTERVAL | X | X | O | O | O |
CLUSTER_HEARTBEAT_RETRY_COUNT | X | X | O | O | O |
CLUSTER_IGNORE_INACTIVE_MEMBER | X | X | O | O | O |
CLUSTER_MAX_PACKET_SIZE | X | X | O | O | O |
CLUSTER_MAX_PAYLOAD_SIZE | X | X | O | O | O |
CLUSTER_PACKET_ALLOCATION_TIMEOUT | X | X | O | O | O |
CLUSTER_SERVER_RESPONSE_QUEUE_SIZE | X | X | O | O | O |
CLUSTER_SESSION_HASH_BUCKETS | X | X | X | X | O |
CLUSTER_SPLIT_BRAIN_RESOLUTION_POLICY | X | X | O | O | O |
CLUSTER_SPLIT_BRAIN_RETRY_COUNT | X | X | O | O | O |
COMMITTER_HOT_POLICY_INTERVAL | X | X | O | O | O |
CONTROL_FILE_0 ~ FILE_7 | X | O | O | O | O |
CONTROL_FILE_COUNT | X | O | O | O | O |
CONTROL_FILE_TEMP_NAME | X | O | O | O | O |
COORDINATOR_COMMIT_WRITE_MODE | X | X | O | O | O |
CSERVERS | X | X | O | O | O |
DA_CLIENT_NUMA_MODE | X | X | O | O | O |
DATA_STORE_MODE | O | O | O | O | O |
DATABASE_ACCESS_MODE | X | O | O | O | O |
DATABASE_INSTANCE_NAME | X | X | O | O | O |
DDL_AUTOCOMMIT | X | O | O | O | O |
DDL_LOCK_TIMEOUT | O | O | O | O | O |
DEADLOCK_PRIORITY | X | X | X | X | O |
DEFAULT_GLOBAL_SECONDARY_INDEX_CREATION | X | X | O | O | O |
DEFAULT_INDEX_LOGGING | X | O | O | O | X |
DEFAULT_INDEX_PCTFREE | X | X | 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 | X | O | O | O | O |
DEFAULT_REMOVAL_OBSOLETE_BACKUP_LIST | X | O | O | O | O |
DEFAULT_SHARDING | X | X | O | O | O |
DISABLE_DDL_CDC_GIVEUP | X | O | O | O | O |
DISABLE_UPDATE_PK_CDC_GIVEUP | X | O | O | O | O |
DISALLOWED_PROTOCOL_TARGETTYPE | X | X | O | O | O |
DISALLOWED_PROTOCOL_TARGETTYPE_WITH_ALL | X | X | X | O | O |
DISALLOWED_PROTOCOL_TARGETTYPE_WITH_NAME | X | X | O | O | O |
DISPATCHERS | X | O | O | O | O |
DISPATCHER_CM_BUFFER_SIZE | X | O | O | O | O |
DISPATCHER_CM_UNIT_SIZE | X | O | O | O | O |
DISPATCHER_CONNECTIONS | X | O | O | O | O |
DISPATCHER_HOT_POLICY_INTERVAL | X | X | O | O | O |
DISPATCHER_LOAD_BALANCING | X | X | O | O | O |
DISPATCHER_NUMA_STREAM_MAP | X | X | O | O | O |
DISPATCHER_QUEUE_SIZE | X | O | O | O | O |
DISPATCHER_REQUEST_MINI_QUEUE_COUNT | X | X | O | O | O |
DISPATCHER_RESPONSE_MINI_QUEUE_COUNT | X | X | O | O | O |
FETCH_FAILOVER | X | X | O | O | O |
GLOBAL_CONNECTION_ALLOW_SESSION_DEPENDENCY | X | X | X | O | O |
GLOBAL_JOURNAL_BUFFER_SIZE | X | X | O | O | O |
GLOBAL_JOURNAL_BUFFER_TOTAL_MAX_SIZE | X | X | O | O | O |
GLOBAL_PROPERTY_LOCK_TIMEOUT | X | X | O | O | O |
GLOBAL_TRANSACTION_COMMIT_WRITE_MODE | X | X | O | O | O |
GLOBAL_TRANSACTION_ISOLATION_SCOPE | X | X | O | O | O |
GLOBAL_TRANSACTION_LOG_DIR | X | X | O | O | O |
GLOBAL_TRANSACTION_LOG_FILE_SIZE | X | X | O | O | O |
GMASTER_NUMA_NODE | X | X | O | O | O |
GMON_AUTOSTART | X | X | O | O | O |
HINT_ERROR | X | O | O | O | O |
IDLE_TIMEOUT | O | O | O | O | O |
IN_DOUBT_DECISION | X | O | O | O | O |
IN_KEY_RANGE_ARRAY_COUNT | X | X | X | X | O |
INCREMENTAL_BACKUP_SCAN_BUFFER_SIZE | X | X | X | X | O |
INDEX_BUILD_PARALLEL_FACTOR | X | O | O | O | O |
INDEX_REBUILD_BLOCK_READ_COUNT | X | X | X | X | O |
INDEX_TREE_MERGE_PARALLEL_FACTOR | X | X | O | O | O |
INST_ALLOCATOR_COUNT | X | X | O | O | O |
INST_TABLE_BLOCK_SIZE | X | X | O | O | O |
JOURNAL_TEMP_DIR | X | X | O | O | O |
KEEPALIVE_IDLE_TIME | X | O | O | O | O |
LOCAL_CLUSTER_MEMBER | X | X | O | O | O |
LOCAL_CLUSTER_MEMBER_HOST | X | X | O | O | O |
LOCAL_CLUSTER_MEMBER_PORT | X | X | O | O | O |
LOCAL_JOURNAL_BUFFER_SIZE | X | X | O | O | O |
LOCATION_FILE | X | X | O | O | O |
LOCATOR_QUERY_TIMEOUT | X | X | O | O | O |
LOCK_HASH_TABLE_SIZE | X | O | O | O | O |
LOCKLESS_CSERVERS | 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 | X | O | O | O | O |
LOG_MIRROR_SHARED_MEMORY_STATIC_SIZE | X | O | O | O | O |
LOG_MIRROR_TIMEOUT | X | O | O | O | O |
LOG_SYNC_INTERVAL | X | O | O | O | O |
LOG_SYNC_INTERVAL_MSEC | X | X | O | O | O |
MAX_GROUP_COUNT | X | X | O | O | O |
MAX_JOURNAL_FILE_SIZE | X | X | O | O | O |
MAX_NODE_COUNT | X | X | O | O | O |
MAXIMUM_CONCURRENT_ACTIVITIES | X | O | O | O | O |
MAXIMUM_FLANGE_COUNT | X | X | O | 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 | X | X | O |
MAXIMUM_JOURNAL_REPLAY_COUNT | X | X | X | O | O |
MAXIMUM_NAMED_CURSOR_COUNT | X | O | O | O | O |
MAXIMUM_SESSION_CM_BUFFER_SIZE | X | O | O | O | O |
MEASURE_CLUSTER_LATENCY | X | X | O | O | O |
MEDIA_RECOVERY_LOG_BUFFER_SIZE | X | O | X | X | X |
MEMORY_MERGE_RUN_COUNT | X | O | O | O | O |
MEMORY_SORT_RUN_SIZE | X | O | O | O | O |
MIN_SAMPLE_ROW_COUNT | X | X | O | O | O |
MINIMUM_UNDO_PAGE_COUNT | O | O | O | O | O |
NET_BUFFER_SIZE | X | O | O | O | O |
NLS_DATE_FORMAT | X | O | O | O | O |
NLS_TIME_FORMAT | X | O | O | O | O |
NLS_TIME_WITH_TIME_ZONE_FORMAT | X | O | O | O | O |
NLS_TIMESTAMP_FORMAT | X | O | O | O | O |
NLS_TIMESTAMP_WITH_TIME_ZONE_FORMAT | X | O | O | O | O |
NUMA | X | X | O | O | O |
NUMA_MAP | X | X | O | O | O |
OFFLINE_MEMBER_AFTER_FAILOVER | X | X | O | O | O |
ONLINE_INDEX_REBUILD_JOURNAL_REPLAY_THRESHOLD | X | X | X | X | O |
ONLINE_JOURNAL_REPLAY_THRESHOLD | X | X | X | O | O |
OS_GROUP_ACCESS | X | X | O | O | O |
PACKET_COMPRESSION_THRESHOLD | X | X | X | X | O |
PAGE_CHECKSUM_TYPE | X | 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 | X | O | O | O | O |
PLAN_CACHE_SIZE | X | O | O | O | O |
PRIVATE_STATIC_AREA_INIT_SIZE | X | X | X | X | O |
PRIVATE_STATIC_AREA_NEXT_SIZE | X | X | X | X | O |
PRIVATE_STATIC_AREA_SHRINK_THRESHOLD | X | X | X | X | O |
PRIVATE_STATIC_AREA_SIZE | X | O | O | O | O |
PROCESS_MAX_COUNT | O | O | O | O | O |
QUERY_TIMEOUT | O | O | O | O | O |
READABLE_ARCHIVELOG_DIR_COUNT | X | O | O | O | O |
READABLE_BACKUP_DIR_COUNT | X | O | O | O | O |
REBALANCE_BLOCK_READ_COUNT | X | X | O | O | O |
RECOMPILE_CHECK_MINIMUM_PAGE_COUNT | X | O | O | X | X |
RECOMPILE_PAGE_PERCENT | X | O | O | X | X |
RECOVERY_LOG_BUFFER_SIZE | X | X | O | O | O |
RECYCLEBIN | X | X | X | X | O |
REDO_LOG_COMPRESSION_THRESHOLD | X | X | X | O | O |
REFINE_RELATION | X | O | O | O | O |
SESSION_FATAL_BEHAVIOR | X | O | O | O | O |
SESSION_MEMORY_INIT_SIZE | X | X | X | O | O |
SESSION_MEMORY_SHRINK_THRESHOLD | X | X | X | O | 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 | X | O | O | O | O |
SHARED_SERVERS | X | O | O | O | O |
SHARED_SESSION | X | O | O | O | O |
SNAPSHOT_STATEMENT_TIMEOUT | X | O | O | O | O |
SQL_HISTORY_SIZE | X | X | O | O | O |
SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY | X | O | O | O | O |
SYSTEM_DISK_DATA_TABLESPACE_SIZE | X | X | X | X | O |
SYSTEM_FILE_IO | X | O | O | O | O |
SYSTEM_LOGGER_DIR | X | O | O | O | O |
SYSTEM_MEMORY_AUX_TABLESPACE_SIZE | X | X | X | 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 | X | O | O | O |
TCP_NODELAY | X | X | O | O | O |
TEMP_SEGMENT_CACHE_SIZE | X | X | X | O | O |
TEMP_UNDO_ENABLED | X | X | X | O | O |
TIMED_STATISTICS | X | X | O | O | O |
TIMER_INTERVAL | O | O | X | X | X |
TIMEZONE | X | O | O | O | O |
TRACE_ALTER_SYSTEM | X | O | O | O | O |
TRACE_DDL | O | O | O | O | O |
TRACE_LOG_ID | X | O | O | O | O |
TRACE_LOG_MSGBUG_SIZE | X | X | O | O | O |
TRACE_LOG_TIME_DETAIL | X | O | O | O | O |
TRACE_LOGGER | X | X | O | O | O |
TRACE_LOGGER_REMOTE_HOST | X | X | O | O | O |
TRACE_LOGGER_REMOTE_PORT | X | X | O | O | O |
TRACE_LOGIN | X | O | O | O | O |
TRACE_LONG_RUN_CURSOR | X | O | O | O | O |
TRACE_LONG_RUN_SQL | X | O | O | O | O |
TRACE_LONG_RUN_TIMER | X | X | X | X | O |
TRACE_XA | X | O | O | O | O |
TRANSACTION_ALLOCATION_TIMEOUT | X | X | X | O | O |
TRANSACTION_COMMIT_WRITE_MODE | O | O | O | O | O |
TRANSACTION_MAXIMUM_UNDO_PAGE_COUNT | X | O | O | O | O |
TRANSACTION_TABLE_SIZE | O | O | O | O | O |
TRANSACTION_TIMEOUT | X | X | O | O | O |
UNDO_RELATION_ALLOCATION_TIMEOUT | X | X | X | O | O |
UNDO_RELATION_COUNT | O | O | O | O | O |
UNDO_SHRINK_THRESHOLD | X | O | O | O | O |
USE_LARGE_PAGES | X | X | X | X | O |
USER_DATA_TABLESPACE_MEDIA_TYPE | X | X | X | X | O |
USER_DATA_TABLESPACE_SIZE | X | X | X | X | O |
USER_DISK_DATA_TABLESPACE_NEXTSIZE | X | X | X | X | O |
USER_TEMP_TABLESPACE_SIZE | O | O | O | O | O |
XA_TRANSACTION_IDLE_TIMEOUT | X | X | X | X | O |
SQL
SQL Element
Data Type
The following is a feature matrix for data type.
Type | Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|---|
Character string type | CHAR | O | O | O | O | O |
VARCHAR | O | O | O | O | O | |
LONG VARCHAR | X | O | O | O | O | |
Binary string type | BINARY | O | O | O | O | O |
VARBINARY | O | O | O | O | O | |
LONG VARBINARY | X | O | O | O | O | |
Decimal number type | SMALLINT | X | O | O | O | O |
INTEGER | X | O | O | O | O | |
BIGINT | X | O | O | O | O | |
NUMERIC | O | O | O | O | O | |
DECIMAL | X | X | O | O | O | |
NUMBER | X | O | O | O | O | |
REAL | X | O | O | O | O | |
DOUBLE PRECISION | X | O | O | O | O | |
FLOAT | X | O | O | O | O | |
Binary number type | NATIVE_SMALLINT | X | O | O | O | O |
NATIVE_INTEGER | X | O | O | O | O | |
NATIVE_BIGINT | X | O | O | O | O | |
NATIVE_REAL | X | O | O | O | O | |
NATIVE_DOUBLE | X | 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 | X | O | O | O | O |
Function
The following is a feature matrix for function.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
expr1 * expr2 | O | O | O | O | O |
expr1 + expr2 | O | O | O | O | O |
datetime + interval | X | O | O | O | O |
+ expr | O | O | O | O | O |
expr1 - expr2 | O | O | O | O | O |
datetime - interval | X | 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 ) | X | O | O | O | O |
( subquery ) <comp> expr | X | O | O | O | O |
( subquery ) <comp> ( subquery ) | X | O | O | O | O |
( expr, ... ) <comp> ( expr, ... ) | X | O | O | O | O |
( expr, ... ) <comp> ( subquery ) | X | O | O | O | O |
( subquery ) <comp> ( expr, ... ) | X | O | O | O | O |
expr <comp> {ALL|ANY|SOME} ( expr, ... ) | X | O | O | O | O |
expr <comp> {ALL|ANY|SOME} ( subquery ) | X | O | O | O | O |
( subquery ) <comp> {ALL|ANY|SOME} ( expr, ... ) | X | O | O | O | O |
( subquery ) <comp> {ALL|ANY|SOME} ( subquery ) | X | O | O | O | O |
( expr, ... ) <comp> {ALL|ANY|SOME} ( expr_list, ... ) | X | O | O | O | O |
( expr, ... ) <comp> {ALL|ANY|SOME} ( subquery ) | X | O | O | O | O |
( subquery ) <comp> {ALL|ANY|SOME} ( expr_list, ... ) | X | O | O | O | O |
ABS( num ) | O | O | O | O | O |
ACOS( num ) | O | O | O | O | O |
ADDDATE( date, interval ) | X | O | O | O | O |
ADDDATE( expr, days ) | X | O | O | O | O |
ADDTIME( expr1, expr2 ) | X | O | O | O | O |
ADD_MONTHS( date, number ) | X | O | O | O | O |
AND | O | O | O | O | O |
ASCII( char ) | X | X | 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 ) | X | O | O | O | O |
expr1 [NOT] BETWEEN [ASYMMETRIC|SYMMETRIC] expr2 AND expr3 | X | 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 | X | O | O | O | O |
CASE2( condition, result, ... ) | X | 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 | X | 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 ) | X | O | O | O | O |
CONCAT( str1, str2 ) | O | O | O | O | O |
CONCATENATE( str1, str2 ) | O | O | O | O | O |
COS( num ) | O | O | O | O | O |
COT( num ) | O | O | O | O | O |
COUNT( expr ) | X | O | O | O | O |
COUNT(*) | X | O | O | O | 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 ) | X | O | O | O | O |
DATE_ADD( date, interval ) | X | O | O | O | O |
DATE_PART( field, datetime ) | X | O | O | O | O |
DECODE( expr, comparison, result, ... ) | X | O | O | O | O |
DEGREES( radians ) | O | O | O | O | O |
DIGEST ( data, type ) | X | X | O | O | O |
DUMP( expr ) | X | O | O | O | O |
EXISTS( subquery ) | X | O | O | O | O |
EXP( num ) | O | O | O | O | O |
EXTRACT( field FROM datetime ) | X | O | O | O | O |
FACTORIAL( num ) | O | O | O | O | O |
FLOOR( num ) | O | O | O | O | O |
FROM_BASE64( str ) | X | X | O | O | O |
GREATEST( expr, ... ) | X | O | O | O | O |
HEX( str ) | X | X | O | O | O |
expr1 [NOT] IN ( expr, ... ) | X | O | O | O | O |
expr1 [NOT] IN ( subquery ) | X | O | O | O | O |
subquery [NOT] IN ( <expr_list> ) | X | O | O | O | O |
subquery [NOT] IN ( subquery ) | X | O | O | O | O |
<expr_list> [NOT] IN ( <expr_list>, ... ) | X | O | O | O | O |
<expr_list> [NOT] IN ( subquery ) | X | O | O | O | O |
subquery [NOT] IN ( <expr_list>, ... ) | X | O | O | O | O |
INITCAP( str ) | X | O | O | O | O |
INSTR( str, substr, ... ) | X | O | O | O | O |
IS NOT NULL | O | O | O | O | O |
IS NULL | O | O | O | O | O |
LAST_DAY( date ) | X | O | O | O | O |
LAST_IDENTITY_VALUE() | X | X | O | O | O |
LEAST( expr, ... ) | X | O | O | O | O |
LENGTH( str ) | O | O | O | O | O |
LENGTHB( str ) | O | O | O | O | O |
string [NOT] LIKE pattern ESCAPE escape_char | X | O | O | O | O |
LN( num ) | O | O | O | O | O |
LNNVL( expr ) | X | X | X | X | O |
LOCALTIME | O | O | O | O | O |
LOCALTIMESTAMP | O | O | O | O | O |
LOCAL_GROUP_ID() | X | X | O | O | O |
LOCAL_GROUP_NAME() | X | X | O | O | O |
LOCAL_MEMBER_ID() | X | X | O | O | O |
LOCAL_MEMBER_NAME() | X | X | O | O | O |
LOG( num2 ) | O | O | O | O | O |
LOG( num1, num2 ) | O | O | O | O | O |
LOGON_USER() | X | O | O | O | O |
LOWER( str ) | O | O | O | O | O |
LPAD( str, length, fill ) | X | O | O | O | O |
LTRIM( str, [ str ] ) | X | O | O | O | O |
MAX( expr ) | X | O | O | O | O |
MIN( expr ) | X | O | O | O | O |
MOD( num1, num2 ) | O | O | O | O | O |
MONTHS_BETWEEN( date1, date2 ) | X | X | X | O | O |
NEXT_DAY( date, day ) | X | X | 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 | X | O | O | O | O |
NULLIF( expr1, expr2 ) | X | O | O | O | O |
NUMTODSINTERVAL( num, interval_indicator ) | X | X | X | X | O |
NUMTODSINTERVAL( num, interval_indicator ) | X | X | X | X | O |
NVL( expr1, expr2 ) | X | O | O | O | O |
NVL2( expr1, expr2, expr3 ) | X | O | O | O | O |
OCTET_LENGTH( str ) | O | O | O | O | O |
OVERLAY( str1 PLACING str2 FROM start FOR length ) | X | O | O | O | O |
OR | X | O | O | O | O |
PHYSICAL_LENGTH( expr ) | X | X | X | X | O |
PI() | O | O | O | O | O |
POSITION( str1 IN str2 ) | O | O | O | O | O |
POWER( num1, num2 ) | O | O | O | O | O |
RADIANS( degrees ) | O | O | O | O | O |
RANDOM( min, max ) | O | O | O | O | O |
REPEAT( str, num ) | X | O | O | O | O |
REPLACE( str, from, to ) | X | O | O | O | O |
REVERSE( str ) | X | X | X | O | O |
ROUND( num ) | X | O | O | O | O |
ROUND( date, fmt ) | X | O | O | O | O |
ROWID_GRID_BLOCK_ID( rowid ) | X | X | O | O | O |
ROWID_GRID_BLOCK_SEQ( rowid ) | X | X | O | O | O |
ROWID_MEMBER_ID( rowid ) | X | X | O | O | O |
ROWID_OBJECT_ID( rowid ) | X | O | O | O | O |
ROWID_PAGE_ID( rowid ) | X | O | O | O | O |
ROWID_ROW_NUMBER( rowid ) | X | O | O | O | O |
ROWID_SHARD_ID( rowid ) | X | X | O | O | O |
ROWID_TABLESPACE_ID( rowid ) | X | O | O | O | O |
ROWNUM | X | X | O | O | O |
RPAD( str, length, fill ) | X | O | O | O | O |
RTRIM( str, [ str ] ) | X | O | O | O | O |
SESSION_ID() | X | O | O | O | O |
SESSION_SERIAL() | X | O | O | O | O |
SESSION_USER | X | O | O | O | O |
SHARD_GROUP_ID( table, expr ) | X | X | O | O | O |
SHARD_GROUP_NAME( table_name, shard_key_value [, ...] ) | X | X | O | O | O |
SHARD_ID( table, expr ) | X | X | O | O | O |
SHARD_NAME( table_name, shard_key_value [, ...] ) | X | X | 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 ) | X | 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() | X | O | O | O | O |
STATEMENT_VIEW_SCN_DCN() | X | X | O | O | O |
STATEMENT_VIEW_SCN_GCN() | X | X | O | O | O |
STATEMENT_VIEW_SCN_LCN() | X | X | O | O | O |
STDDEV( [ ALL | DISTINCT ] expr ) | X | X | X | O | O |
STDDEV_POP( expr ) | X | X | X | O | O |
STDDEV_SAMP( expr ) | X | X | X | O | O |
SUBSTR( str FROM start FOR length ) | X | O | O | O | O |
SUBSTR( str, start, length ) | X | O | O | O | O |
SUBSTRB( str, start, length ) | X | O | O | O | O |
SUBSTRING( str FROM start FOR length ) | X | O | O | O | O |
SUBSTRING( str, start, length ) | X | O | O | O | O |
SUM( expr ) | X | O | O | O | O |
SYSDATE | O | O | O | O | O |
SYS_EXTRACT_UTC( datetime_with_timezone ) | X | X | 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 ) | X | O | O | O | O |
TO_CHAR( number, fmt ) | X | O | O | O | O |
TO_BASE64( str ) | X | X | O | O | O |
TO_DATE( str, fmt ) | X | O | O | O | O |
TO_NATIVE_BIGNIT( str, fmt ) | X | X | X | X | O |
TO_NATIVE_DOUBLE( str, fmt ) | X | O | O | O | O |
TO_NATIVE_INTEGER( str, fmt ) | X | X | X | X | O |
TO_NATIVE_REAL( str, fmt ) | X | O | O | O | O |
TO_NATIVE_SMALLINT( str, fmt ) | X | X | X | X | O |
TO_NUMBER( num, fmt ) | X | O | O | O | O |
TO_TIME( str, fmt ) | X | O | O | O | O |
TO_TIME_TZ( str, fmt ) | X | O | O | O | O |
TO_TIME_WITH_TIME_ZONE( str, fmt ) | X | O | O | O | O |
TO_TIMESTAMP( str, fmt ) | X | O | O | O | O |
TO_TIMESTAMP_TZ( str, fmt ) | X | O | O | O | O |
TO_TIMESTAMP_WITH_TIME_ZONE( str, fmt ) | X | 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 ) | X | O | O | O | O |
TRIM( LEADING|TRAILING|BOTH trim_char FROM source ) | O | O | O | O | O |
TRUNC( num, scale ) | X | O | O | O | O |
TRUNC( date, fmt ) | X | O | O | O | O |
UPPER( str ) | O | O | O | O | O |
UNHEX( str ) | X | X | O | O | O |
UNHEX_TO_CHARSTR( str ) | X | X | O | O | O |
USER_ID() | O | O | O | O | O |
UUID() | X | X | O | O | O |
VAR_POP( expr ) | X | X | X | O | O |
VAR_SAMP( expr ) | X | X | X | O | O |
VARIANCE( [ ALL | DISTINCT ] expr ) | X | X | X | O | 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.
Object | Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|---|
Database object | ALTER DATABASE ARCHIVELOG | X | O | O | O | O |
ALTER DATABASE ADD LOGFILE | X | O | O | O | O | |
ALTER DATABASE DROP LOGFILE | X | O | O | O | O | |
ALTER DATABASE RENAME LOGFILE | X | O | O | O | O | |
ALTER DATABASE BEGIN/END BACKUP | X | O | O | O | O | |
ALTER DATABASE RECOVER | X | O | O | O | O | |
ALTER DATABASE RECOVER TABLESPACE | X | O | O | O | O | |
ALTER DATABASE REGISTER | X | O | O | O | O | |
ALTER DATABASE RESTORE | X | O | O | O | O | |
ANALYZE SYSTEM | X | X | O | O | O | |
COMMENT ON object IS .. | X | O | O | O | O | |
Profile object | CREATE PROFILE | X | O | O | O | O |
DROP PROFILE | X | O | O | O | O | |
ALTER PROFILE | X | O | O | O | O | |
Audit policy object | CREATE AUDIT POLICY | X | X | X | O | O |
DROP AUDIT POLICY | X | X | X | O | O | |
ALTER AUDIT POLICY | X | X | X | O | O | |
AUDIT POLICY | X | X | X | O | O | |
NOAUDIT POLICY | X | X | X | O | O | |
Authorization object | CREATE USER | X | O | O | O | O |
DROP USER | X | O | O | O | O | |
ALTER USER | X | O | O | O | O | |
GRANT privileges TO | X | O | O | O | O | |
REVOKE privileges FROM | X | O | O | O | O | |
Schema object | CREATE SCHEMA | X | O | O | O | O |
DROP SCHEMA | X | O | O | O | O | |
Tablespace object | CREATE MEMORY DATA TABLESPACE | X | O | O | O | O |
CREATE MEMORY TEMPORARY TABLESPACE | X | O | O | O | O | |
DROP TABLESPACE | X | O | O | O | O | |
ALTER TABLESPACE .. RENAME TO | X | O | O | O | O | |
ALTER TABLESPACE .. BEGIN/END BACKUP | X | O | O | O | O | |
ALTER TABLESPACE .. ADD [DATAFILE|MEMORY] | O | O | O | O | O | |
ALTER TABLESPACE .. DROP [DATAFILE|MEMORY] | X | O | O | O | O | |
ALTER TABLESPACE .. RENAME DATAFILE | X | O | O | O | O | |
ALTER TABLESPACE .. { ONLINE | OFFLINE } | X | O | O | O | O | |
Table object | CREATE TABLE | O | O | O | O | O |
CREATE TABLE AS SELECT | X | O | O | O | O | |
CREATE GLOBAL TEMPORARY TABLE | X | X | X | O | O | |
CREATE GLOBAL TEMPORARY TABLE AS SELECT | X | X | X | O | O | |
CREATE IMMUTABLE TABLE | X | X | X | X | O | |
CREATE IMMUTABLE TABLE AS SELECT | X | X | X | X | O | |
DROP TABLE | O | O | O | O | O | |
TRUNCATE TABLE | X | O | O | O | O | |
ALTER TABLE .. STORAGE | X | O | O | O | O | |
ALTER TABLE .. RENAME TO | X | O | O | O | O | |
ALTER TABLE .. ADD COLUMN | X | O | O | O | O | |
ALTER TABLE .. SET UNUSED COLUMN | X | O | O | O | O | |
ALTER TABLE .. ALTER COLUMN | X | O | O | O | O | |
ALTER TABLE .. RENAME COLUMN | X | O | O | O | O | |
ALTER TABLE .. RENAME CONSTRAINT | X | X | X | O | O | |
ALTER TABLE .. ADD CONSTRAINT | X | O | O | O | O | |
ALTER TABLE .. DROP CONSTRAINT | X | O | O | O | O | |
ALTER TABLE .. ALTER CONSTRAINT | X | O | O | O | O | |
ALTER TABLE .. ADD SUPPLEMENTAL LOG | X | O | O | O | O | |
ALTER TABLE .. DROP SUPPLEMENTAL LOG | X | O | O | O | O | |
ALTER TABLE .. READ { ONLY | WRITE } | X | X | X | O | O | |
ANALYZE TABLE | X | X | O | O | O | |
FLASHBACK TABLE | X | X | X | X | O | |
PURGE | X | X | X | X | O | |
View object | CREATE VIEW | X | O | O | O | O |
DROP VIEW | X | O | O | O | O | |
ALTER VIEW | X | O | O | O | O | |
Index object | CREATE INDEX | O | O | O | O | O |
DROP INDEX | O | O | O | O | O | |
ALTER INDEX .. AGING | X | X | O | O | O | |
ALTER INDEX .. STORAGE | X | O | O | O | O | |
ALTER INDEX .. RENAME | X | X | X | O | O | |
ALTER INDEX .. REBUILD | X | X | X | X | O | |
Sequence object | CREATE SEQUENCE | O | O | O | O | O |
DROP SEQUENCE | O | O | O | O | O | |
ALTER SEQUENCE | X | O | O | O | O | |
Synonym object | CREATE SYNONYM | X | O | O | O | O |
DROP SYNONYM | X | O | O | O | O | |
CREATE PUBLIC SYNONYM | X | O | O | O | O | |
DROP PUBLIC SYNONYM | X | O | O | O | O | |
Stored procedure object | CREATE PROCEDURE | X | X | O | O | O |
DROP PROCEDURE | X | X | O | O | O | |
ALTER PROCEDURE | X | X | O | O | O | |
Stored function object | CREATE FUNCTION | X | X | O | O | O |
DROP FUNCTION | X | X | O | O | O | |
ALTER FUNCTION | X | X | O | O | O | |
Package object | CREATE PACKAGE | X | X | X | X | O |
CREATE PACKAGE BODY | X | X | X | X | O | |
ALTER PACKAGE | X | X | X | X | O | |
DROP PACKAGE | X | X | X | X | O |
Cluster Object
The following is a feature matrix for DDL which creates/ drops/ alters a cluster object.
Object | Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|---|
Cluster system object | ALTER DATABASE REBALANCE | X | X | O | O | O |
ALTER DATABASE DROP INACTIVE CLUSTER MEMBERS | X | X | O | O | O | |
Cluster group object | CREATE CLUSTER GROUP | X | X | O | O | O |
DROP CLUSTER GROUP | X | X | O | O | O | |
Cluster member object | ALTER CLUSTER GROUP name ADD MEMBER | X | X | O | O | O |
ALTER CLUSTER GROUP name OFFLINE MEMBER | X | X | O | O | O | |
ALTER DATABASE RESET LOCAL CLUSTER MEMBER | X | X | O | O | O | |
ALTER SYSTEM IRRECOVERABLE CLUSTER MEMBER | X | X | X | O | O | |
ALTER SYSTEM JOIN DATABASE | X | X | O | O | O | |
Cluster location object | CREATE CLUSTER LOCATION | X | X | O | O | O |
DROP CLUSTER LOCATION | X | X | O | O | O | |
ALTER CLUSTER LOCATION | X | X | O | O | O | |
Cluster table and shard object | ALTER TABLE name REBALANCE | X | X | O | O | O |
ALTER TABLE name MERGE SHARDS | X | X | X | X | O | |
ALTER TABLE name MOVE SHARD | X | X | O | O | O | |
ALTER TABLE name SPLIT SHARD | X | X | O | O | O | |
ALTER TABLE name RENAME SHARD | X | X | X | O | O | |
Global secondary index object | ALTER TABLE name ADD GLOBAL SECONDARY INDEX | X | X | O | O | O |
ALTER TABLE name DROP GLOBAL SECONDARY INDEX | X | X | O | O | O | |
ALTER TABLE name ALTER GLOBAL SECONDARY INDEX | X | X | O | O | O | |
ALTER TABLE name REBUILD GLOBAL SECONDARY INDEX | X | X | X | X | O |
SQL Language
DML
The following is a feature matrix for DML which manipulates data.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
INSERT INTO .. | O | O | O | O | O |
INSERT INTO .. RETURNING query | X | O | O | O | O |
INSERT INTO .. RETURNING .. INTO .. | X | O | O | O | O |
DELETE FROM .. | O | O | O | O | O |
DELETE FROM .. RETURNING query | X | O | O | O | O |
DELETE FROM .. RETURNING .. INTO .. | X | O | O | O | O |
DELETE FROM .. WHERE CURRENT OF cursor | X | O | O | O | O |
UPDATE .. | O | O | O | O | O |
UPDATE .. RETURNING query | X | O | O | O | O |
UPDATE .. RETURNING .. INTO .. | X | O | O | O | O |
UPDATE .. WHERE CURRENT OF cursor | X | O | O | O | O |
CALL proc_name | X | X | O | O | O |
Query
The following is a feature matrix for SELECT statement which enquires data.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.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> | X | O | O | O | O |
<where clause> | O | O | O | O | O |
<group by clause> | X | O | O | O | O |
<order by clause> | X | O | O | O | O |
<offset limit clause> | O | O | O | O | O |
<set operator> | X | O | O | O | O |
<subquery> | X | O | O | O | O |
<hint clause> | X | O | O | O | O |
Control Language
The following is a feature matrix for control statement.
Control statement | Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|---|
Transaction | COMMIT | O | O | O | O | O |
ROLLBACK | O | O | O | O | O | |
SAVEPOINT | X | O | O | O | O | |
RELEASE SAVEPOINT | X | O | O | O | O | |
LOCK TABLE | X | O | O | O | O | |
SET CONSTRAINTS | X | O | O | O | O | |
SET TRANSACTION | X | O | O | O | O | |
Session | SET SESSION CHARACTERISTICS AS | X | O | O | O | O |
SET SESSION AUTHORIZATION | X | O | O | O | O | |
SET TIME ZONE | X | O | O | O | O | |
ALTER SESSION SET property | O | O | O | O | O | |
System | ALTER SYSTEM {OPEN|MOUNT} DATABASE | X | O | O | O | O |
ALTER SYSTEM CHECKPOINT | O | O | O | O | O | |
ALTER SYSTEM KILL SESSION | X | O | O | O | O | |
ALTER SYSTEM RECONNECT GLOBAL CONNECTION | X | X | X | O | O | |
ALTER SYSTEM SWITCH LOGFILE | X | O | O | O | O | |
ALTER SYSTEM SET property | X | O | O | O | O | |
ALTER SYSTEM RESET property | X | O | O | O | O |
PSM Language
The following is a feature matrix for Persistent Stored Module (PSM) language element.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
Assignment Statement | X | X | O | O | O |
Basic LOOP Statement | X | X | O | O | O |
Block (BEGIN .. END) | X | X | O | O | O |
CASE Statement | X | X | O | O | O |
CLOSE Statement | X | X | O | O | O |
Collection Method Invocation | X | X | O | O | O |
Collection Variable Declaration | X | X | O | O | O |
CONTINUE Statement | X | X | O | O | O |
Cursor FOR LOOP Statement | X | X | O | O | O |
Cursor Variable Declaration | X | X | O | O | O |
DELETE Statement Extension | X | X | O | O | O |
EXCEPTION_INIT Pragma | X | X | O | O | O |
Exception Declaration | X | X | O | O | O |
Exception Handler | X | X | O | O | O |
EXECUTE IMMEDIATE Statement | X | X | O | O | O |
EXIT Statement | X | X | O | O | O |
Explicit Cursor Declaration and Definition | X | X | O | O | O |
FETCH Statement | X | X | O | O | O |
FOR LOOP Statement | X | X | O | O | O |
GOTO Statement | X | X | O | O | O |
IF Statement | X | X | O | O | O |
Implicit Cursor Attribute | X | X | O | O | O |
INSERT Statement Extension | X | X | O | O | O |
Named Cursor Attribute | X | X | O | O | O |
NULL Statement | X | X | O | O | O |
OPEN Statement | X | X | O | O | O |
OPEN FOR Statement | X | X | O | O | O |
Procedure Call | X | X | O | O | O |
Procedure Declaration and Definition | X | X | O | O | O |
RAISE Statement | X | X | O | O | O |
Record Variable Declaration | X | X | O | O | O |
RETURN Statement | X | X | O | O | O |
RETURNING INTO clause | X | X | O | O | O |
%ROWTYPE Attribute | X | X | O | O | O |
Scalar Variable Declaration | X | X | O | O | O |
SELECT INTO Statement | X | X | O | O | O |
SQLCODE Function | X | X | O | O | O |
SQLERRM Function | X | X | O | O | O |
%TYPE Attribute | X | X | O | O | O |
UPDATE Statement Extension | X | X | O | O | O |
WHILE LOOP Statement | X | X | O | O | O |
The following is a feature matrix for the Built-In Package.
Package | Sub Routine | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|---|
DBMS_LOCK | SLEEP() | X | X | X | X | O |
DBMS_OUTPUT | DISABLE() | X | X | X | O | O |
ENABLE() | X | X | X | O | O | |
GET_LINE() | X | X | X | O | O | |
NEW_LINE() | X | X | X | X | X | |
PUT() | X | X | X | X | X | |
PUT_LINE() | X | X | O | O | O | |
SET_LOG() | X | X | X | O | O | |
DBMS_SQL | RETURN_RESULT() | X | X | X | X | X |
DBMS_STANDARD | RAISE_APPLICATION_ERROR() | X | X | O | O | O |
API
ODBC
The following is a feature matrix for the ODBC standard API.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.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() | X | O | O | O | O |
SQLColumnPrivileges() | X | O | O | O | O |
SQLColumns() | X | 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() | X | O | O | O | O |
SQLEndTran() | O | O | O | O | O |
SQLExecDirect() | O | O | O | O | O |
SQLExecute() | O | O | O | O | O |
SQLExtendedFetch() | X | O | O | O | O |
SQLFetch() | O | O | O | O | O |
SQLFetchScroll() | X | O | O | O | O |
SQLForeignKeys() | X | O | O | O | O |
SQLFreeHandle() | O | O | O | O | O |
SQLFreeStmt() | O | O | O | O | O |
SQLGetConnectAttr() | O | O | O | O | O |
SQLGetCursorName() | X | O | O | O | O |
SQLGetData() | X | 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() | X | O | O | O | O |
SQLGetStmtAttr() | O | O | O | O | O |
SQLGetTypeInfo() | X | O | O | O | O |
SQLMoreResults() | X | O | O | O | O |
SQLNumParams() | O | O | O | O | O |
SQLNumResultCols() | O | O | O | O | O |
SQLParamData() | X | O | O | O | O |
SQLPrepare() | O | O | O | O | O |
SQLPrimaryKeys() | X | O | O | O | O |
SQLProcedureColumns() | X | O | O | O | O |
SQLProcedures() | X | O | O | O | O |
SQLPutData() | X | O | O | O | O |
SQLRowCount() | O | O | O | O | O |
SQLSetConnectAttr() | O | O | O | O | O |
SQLSetCursorName() | X | O | O | O | O |
SQLSetDescField() | O | O | O | O | O |
SQLSetDescRec() | O | O | O | O | O |
SQLSetEnvAttr() | O | O | O | O | O |
SQLSetPos() | X | O | O | O | O |
SQLSetStmtAttr() | O | O | O | O | O |
SQLSpecialColumns() | X | O | O | O | O |
SQLStatistics() | X | O | O | O | O |
SQLTablePrivileges() | X | O | O | O | O |
SQLTables() | X | O | O | O | O |
The following is a feature matrix for API other than the ODBC standard API.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
xa_open | X | O | O | O | O |
xa_close | X | O | O | O | O |
xa_start | X | O | O | O | O |
xa_end | X | O | O | O | O |
xa_rollback | X | O | O | O | O |
xa_prepare | X | O | O | O | O |
xa_commit | X | O | O | O | O |
xa_recover | X | O | O | O | O |
xa_forget | X | O | O | O | O |
SQLGetXaSwitch | X | O | O | O | O |
SQLGetXaConnectionHandle | X | O | O | O | O |
SQLGetGroupCount | X | X | X | O | O |
SQLGetGroupIDs | X | X | X | O | O |
SQLGetGroupName | X | X | X | O | O |
SQLGetSuitableGroupID | X | X | X | O | O |
JDBC
The following is a class feature matrix for JDBC.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
CallableStatement | X | X | O | O | O |
CommonDataSource | X | O | O | O | O |
Connection | X | O | O | O | O |
ConnectionPoolDataSource | X | O | O | O | O |
DatabaseMetaData | X | O | O | O | O |
DataSource | X | O | O | O | O |
Driver | X | O | O | O | O |
ParameterMetaData | X | O | O | O | O |
PooledConnection | X | O | O | O | O |
PreparedStatement | X | O | O | O | O |
ResultSet | X | O | O | O | O |
ResultSetMetaData | X | O | O | O | O |
RowId | X | O | O | O | O |
Savepoint | X | O | O | O | O |
Statement | X | O | O | O | O |
XAConnection | X | O | O | O | O |
XADataSource | X | O | O | O | O |
XAResource | X | O | O | O | O |
GoldilocksInterval | X | O | O | O | O |
GoldilocksTypes | X | O | O | O | O |
Embedded SQL
Precompiler Option
The following is a feature matrix for precompiler option.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
--help | X | O | O | O | O |
--include-path | X | O | O | O | O |
--no-prompt | X | O | O | O | O |
--output | X | O | O | O | O |
--unsafe-null | X | O | O | O | O |
--version | X | O | O | O | O |
--no-lineinfo | X | X | X | O | O |
--char_map | X | X | X | O | O |
--cumulative | X | X | X | X | O |
--parse | X | X | X | X | O |
Embedded SQL-only Syntax
The following is a feature matrix of embedded SQL-only syntax.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
EXEC SQL AT | X | O | O | O | O |
EXEC SQL ATOMIC INSERT | X | O | O | O | O |
EXEC SQL AUTOCOMMIT | X | O | O | O | O |
EXEC SQL BEGIN DECLARE SECTION | X | O | O | O | O |
EXEC SQL COMMIT RELEASE | X | O | O | O | O |
EXEC SQL CONNECT | X | O | O | O | O |
EXEC SQL CONTEXT ALLOCATE | X | O | O | O | O |
EXEC SQL CONTEXT FREE | X | O | O | O | O |
EXEC SQL CONTEXT USE | X | O | O | O | O |
EXEC SQL DISCONNECT | X | O | O | O | O |
EXEC SQL END DECLARE SECTION | X | O | O | O | O |
EXEC SQL FOR | X | O | O | O | O |
EXEC SQL GET GROUPID | X | X | X | O | O |
EXEC SQL INCLUDE | X | O | O | O | O |
EXEC SQL INCLUDE SQLCA | X | O | O | O | O |
EXEC SQL OPTION | X | O | O | O | O |
EXEC SQL ROLLBACK RELEASE | X | O | O | O | O |
EXEC SQL WHENEVER | X | O | O | 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 | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
C native type | X | O | O | O | O |
struct, union | X | O | O | O | O |
typedef | X | O | O | O | O |
VARCHAR | X | O | O | O | O |
LONG VARCHAR | X | O | O | O | O |
BINARY | X | O | O | O | O |
LONG VARBINARY | X | O | O | O | O |
BOOLEAN | X | O | O | O | O |
NUMBER | X | O | O | O | O |
DATE | X | O | O | O | O |
TIME | X | O | O | O | O |
TIME WITH TIMEZONE | X | O | O | O | O |
TIMESTAMP | X | O | O | O | O |
TIMESTAMP WITH TIMEZONE | X | O | O | O | O |
INTERVAL YEAR | X | O | O | O | O |
INTERVAL MONTH | X | O | O | O | O |
INTERVAL DAY | X | O | O | O | O |
INTERVAL HOUR | X | O | O | O | O |
INTERVAL MINUTE | X | O | O | O | O |
INTERVAL SECOND | X | O | O | O | O |
INTERVAL YEAR TO MONTH | X | O | O | O | O |
INTERVAL DAY TO HOUR | X | O | O | O | O |
INTERVAL DAY TO MINUTE | X | O | O | O | O |
INTERVAL DAY TO SECOND | X | O | O | O | O |
INTERVAL HOUR TO MINUTE | X | O | O | O | O |
INTERVAL HOUR TO SECOND | X | O | O | O | O |
INTERVAL MINUTE TO SECOND | X | O | O | O | O |
Dynamic SQL
The following is a feature matrix for dynamic SQL.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
SELECT .. INTO | X | O | O | O | O |
EXECUTE IMMEDIATE sql | X | O | O | O | O |
PREPARE stmt | X | O | O | O | O |
EXECUTE stmt | X | O | O | O | O |
DECLARE cursor FOR sql | X | O | O | O | O |
DECLARE cursor FOR stmt | X | O | O | O | O |
OPEN cursor | X | O | O | O | O |
OPEN cursor USING | X | O | O | O | O |
FETCH cursor INTO | X | O | O | O | O |
CLOSE cursor | X | O | O | O | O |
DELETE .. WHERE CURRENT OF cursor | X | O | O | O | O |
UPDATE .. WHERE CURRENT OF cursor | X | O | O | O | O |
PyDBC
Module
The following is a method feature matrix for pygoldilocks provided by PyDBC.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
connect | X | X | X | O | O |
Date | X | X | X | O | O |
Time | X | X | X | O | O |
Timestamp | X | X | X | O | O |
DateFromTicks | X | X | X | O | O |
TimeFromTicks | X | X | X | O | O |
TimestampFromTicks | X | X | X | O | O |
Binary | X | X | X | O | O |
STRING | X | X | X | O | O |
BINARY | X | X | X | O | O |
NUMBER | X | X | X | O | O |
DATETIME | X | X | X | O | O |
ROWID | X | X | X | O | O |
getDecimalSeparator | X | X | X | O | O |
setDecimalSeparator | X | X | X | O | O |
The following is an attribute feature matrix for pygoldilocks module.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
apilevel | X | X | X | O | O |
threadsafety | X | X | X | O | O |
paramstyle | X | X | X | O | O |
version | X | X | X | O | O |
lowercase | X | X | X | O | O |
Connection
The following is a method feature matrix for connection object.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
cursor | X | X | X | O | O |
commit | X | X | X | O | O |
rollback | X | X | X | O | O |
close | X | X | X | O | O |
getinfo | X | X | X | O | O |
execute | X | X | X | O | O |
set_attr | X | X | X | O | O |
The following is an attribute feature matrix for connection object.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
autocommit | X | X | X | O | O |
searchescape | X | X | X | O | O |
timeout | X | X | X | O | O |
Cursor
The following is a method feature matrix for cursor object.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
excute | X | X | X | O | O |
executemany | X | X | X | O | O |
fetchone | X | X | X | O | O |
fetchall | X | X | X | O | O |
fetchmany | X | X | X | O | O |
commit | X | X | X | O | O |
rollback | X | X | X | O | O |
skip | X | X | X | O | O |
nextset | X | X | X | O | O |
close | X | X | X | O | O |
setinputsizes | X | X | X | O | O |
setoutputsize | X | X | X | O | O |
callproc | X | X | X | O | O |
callfunc | X | X | X | O | O |
tables | X | X | X | O | O |
columns | X | X | X | O | O |
statistics | X | X | X | O | O |
rowIdColumns | X | X | X | O | O |
rowVerColumns | X | X | X | O | O |
primaryKeys | X | X | X | O | O |
foreignKeys | X | X | X | O | O |
procedures | X | X | X | O | O |
getTypeInfo | X | X | X | O | O |
The following is an attribute feature matrix for cursor object.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
Description | X | X | X | O | O |
rowcount | X | X | X | O | O |
arraysize | X | X | X | O | O |
connection | X | X | X | O | O |
fast_executemany | X | X | X | O | O |
Row
The following is an attribute feature matrix for row object.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
cursor_description | X | X | X | O | O |
Utility
gcreatedb
Command Usage
The following is a feature matrix for command usage of gcreatedb.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
--character_set | O | O | O | O | O |
--char_length_units | X | O | O | O | O |
--cluster | X | X | O | O | O |
--db_comment | O | O | O | O | O |
--help | O | O | O | O | O |
--host | X | X | O | O | O |
--member | X | X | O | O | O |
--port | X | X | O | O | O |
--silent | O | O | O | O | O |
--timezone | X | O | O | O | O |
glsnr
Command Usage
The following is a feature matrix for command usage of glsnr.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
--help | X | O | O | O | O |
--home | X | X | O | O | O |
--silent | X | O | O | O | O |
--start | X | O | O | O | O |
--status | X | O | O | O | O |
--stop | X | O | O | O | O |
Configuration File
The following is a feature matrix for configuration of glsnr.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
BACKLOG | X | O | O | O | O |
DEFAULT_CS_MODE | X | O | O | O | O |
LISTENER_LOG_DIR | X | X | O | O | O |
LISTEN_PORT | X | O | O | O | O |
TCP_EXCLUDED | X | O | O | O | O |
TCP_INVITED | X | O | O | O | O |
TCP_HOST | X | O | O | O | O |
TCP_VALIDNODE_CHECKING | X | O | O | O | O |
TIMEOUT | X | O | O | O | O |
USR_DIR | X | X | O | O | O |
gsql/ gsqlnet
Command Usage
The following is a feature matrix for command usage of gsql.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
username password | O | O | O | O | O |
--as {SYSDBA|ADMIN} | X | O | O | O | O |
--conn-string | X | O | O | O | O |
--dsn | X | 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 | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
| O | O | O | O | O |
| X | O | O | O | O |
| X | X | O | O | O |
| X | X | O | O | O |
| X | X | O | O | O |
| X | O | O | O | O |
| X | O | O | O | O |
| X | O | O | O | O |
| X | X | X | O | O |
| X | O | O | O | O |
| X | O | O | O | O |
| X | O | O | O | O |
| X | O | O | O | O |
| X | O | O | O | O |
| X | O | O | O | O |
| X | O | O | O | O |
| X | O | O | O | O |
| X | O | O | O | O |
| X | X | O | O | O |
| X | X | X | O | O |
| O | O | O | O | O |
| X | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| X | X | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| X | O | O | O | O |
| X | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| X | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| O | O | O | O | O |
| X | O | O | O | O |
| X | O | O | O | O |
| O | O | O | O | O |
gloader/ gloadernet
Command Usage
The following is a feature matrix for command usage of gloader.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.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 | X | O | O | O | O |
--commit | O | O | O | O | O |
--control | O | O | O | O | O |
--data | O | O | O | O | O |
--dsn | X | O | O | O | O |
--errors | X | O | O | O | O |
--export | O | O | O | O | O |
--fieldterm | X | X | O | O | O |
--filesize | X | O | O | O | O |
--format | X | O | O | O | O |
--help | O | O | O | O | O |
--import | O | O | O | O | O |
--lineterm | X | X | O | O | O |
--log | O | O | O | O | O |
--no-prompt | O | O | O | O | O |
--parallel | O | O | O | O | O |
--propagation | X | O | O | O | O |
--qualifier | X | X | O | O | O |
--silent | O | O | O | O | O |
--AsTIMESTAMP | X | O | O | O | O |
--where | X | X | X | O | O |
--group-id | X | X | X | O | O |
--directio-size | X | X | X | O | O |
Control File Syntax
The following is a feature matrix for control file syntax of gloader.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
CHARACTERSET | X | 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 | X | O | O | O | O |
LTRIM | X | X | O | O | O |
RTRIM | X | X | O | O | O |
LINES TERMINATED BY | X | X | O | O | O |
WHERE | X | X | X | O | O |
gdump
Command Usage
The following is a feature matrix for command usage of gdump.
Item | Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|---|
Common arguments | --silent | X | O | O | O | O |
File type | BACKUP | X | O | O | O | O |
COMMIT_LOG | X | X | O | O | O | |
CONTROL | X | O | O | O | O | |
DATA | X | O | O | O | O | |
LOG | X | O | O | O | O | |
LOG_BUFFER | X | X | O | O | O | |
PEND_BUFFER | X | X | O | O | O | |
PROPERTY | X | O | O | O | O | |
BACKUP file arguments | --body | X | O | O | O | O |
--tbs | X | O | O | O | O | |
--number | X | O | O | O | O | |
--fetch | X | O | O | O | O | |
CONTROL file arguments | --section | X | O | O | O | O |
DATA file arguments | --header | X | O | O | O | O |
--number | X | O | O | O | O | |
--fetch | X | O | O | O | O | |
LOG file arguments | --all | X | X | O | O | O |
--fetch | X | O | O | O | O | |
--header | X | X | O | O | O | |
--number | X | O | O | O | O | |
--offset | X | O | O | O | O |
tablediff
Configuration File
The following is a feature matrix for configuration file of tablediff.
Item | Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|---|
Source table | SOURCE_PASSWORD | X | O | O | O | O |
SOURCE_SCHEMA | X | O | O | O | O | |
SOURCE_TABLE | X | O | O | O | O | |
SOURCE_URL | X | O | O | O | O | |
SOURCE_USER | X | O | O | O | O | |
Target table | TARGET_PASSWORD | X | O | O | O | O |
TARGET_SCHEMA | X | O | O | O | O | |
TARGET_TABLE | X | O | O | O | O | |
TARGET_URL | X | O | O | O | O | |
TARGET_USER | X | O | O | O | O | |
Sync operation | TARGET_INSERT | X | O | O | O | O |
TARGET_UPDATE | X | O | O | O | O | |
TARGET_DELETE | X | O | O | O | O | |
SOURCE_INSERT | X | O | O | O | O | |
Operation options | DIFF_BIN_FILE | X | O | O | O | O |
DIFF_OUT_FILE | X | O | O | O | O | |
DISPLAY_CALL_STACK | X | O | O | O | O | |
DISPLAY_ROW_UNIT | X | O | O | O | O | |
EXCLUDE_COLUMNS | X | O | O | O | O | |
LOGGING_ON_DIFF | X | O | O | O | O | |
LOGGING_ON_SUCCESS | X | O | O | O | O | |
JOB_QUEUE_SIZE | X | O | O | O | O | |
JOB_THREAD | X | O | O | O | O | |
JOB_UNIT_SIZE | X | O | O | O | O | |
PARTITION_RANGE | X | O | O | O | O | |
SYNC_OUT_FILE | X | O | O | O | O | |
WHERE_CLAUSE | X | O | O | O | O |
gsyncher
Command Usage
The following is a feature matrix for command usage of gsyncher.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
--log | X | O | O | O | O |
--silent | X | O | O | O | O |
--home | X | X | O | O | O |
--copy-right | X | O | O | O | O |
--backup-path | X | O | O | O | O |
--help | X | O | O | O | O |
gmon
Command Usage
The following is a feature matrix for command usage of gmon.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
--start | X | X | O | O | O |
--stop | X | X | O | O | O |
--status | X | X | O | O | O |
--home | X | X | O | O | O |
--uds_dir | X | X | X | X | O |
--silent | X | X | O | O | O |
--no-copyright | X | X | O | O | O |
--help | X | X | O | O | O |
gtrclogger
Command Usage
The following is a feature matrix for command usage of gtrclogger.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
--dir | X | X | O | O | O |
--help | X | X | O | O | O |
--port | X | X | O | O | O |
--start | X | X | O | O | O |
--stop | X | X | O | O | O |
glocator
Command Usage
The following is a feature matrix for command usage of glocator.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
--create | X | X | O | O | O |
--start | X | X | O | O | O |
--stop | X | X | O | O | O |
--conf | X | X | O | O | O |
--status | X | X | O | O | O |
--sync | X | X | X | O | O |
--silent | X | X | O | O | O |
--no-copyright | X | X | O | O | O |
--help | X | X | O | O | O |
Configuration File
The following is a feature matrix for configuration file of glocator.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
PORT | X | X | O | O | O |
WORKER_COUNT | X | X | O | O | O |
SESSION_QUEUE_SIZE | X | X | O | O | O |
SESSION_ALLOCATOR_SIZE | X | X | O | O | O |
PACKET_ALLOCATOR_SIZE | X | X | O | O | O |
SYSTEM_LOGGER_DIR | X | X | O | O | O |
SYSTEM_UDS_DIR | X | X | O | O | O |
LOCATION_FILE_DIR | X | X | O | O | O |
LOCATION_FILE_SIZE | X | X | O | O | O |
LOCATION_FILE_MAX_SIZE | X | X | O | O | O |
SESSION_TIMEOUT | X | X | O | O | O |
FAILOVER_TIMEOUT | X | X | O | O | O |
ALTERNATE_LOCATORS | X | X | X | O | O |
SYNC_RETRY_COUNT | X | X | X | O | O |
SYNC_RESPONSE_TIMEOUT | X | X | X | O | O |
gagent
Command Usage
The following is a feature matrix for command usage of gagent.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
--start | X | X | O | O | O |
--stop | X | X | O | O | O |
--conf | X | X | O | O | O |
--status | X | X | O | O | O |
--home | X | X | O | O | O |
--silent | X | X | O | O | O |
--no-copyright | X | X | O | O | O |
--help | X | X | O | O | O |
Configuration File
The following is a feature matrix for configuration file of gagent.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
PORT | X | X | O | O | O |
LOCATOR_HOST | X | X | O | O | O |
LOCATOR_PORT | X | X | O | O | O |
COMMAND_QUEUE_SIZE | X | X | O | O | O |
COMMAND_ALLOCATOR_SIZE | X | X | O | O | O |
PACKET_ALLOCATOR_SIZE | X | X | O | O | O |
SYSTEM_LOGGER_DIR | X | X | O | O | O |
SESSION_TIMEOUT | X | X | O | O | O |
UPDATE_LOCATION_TIME | X | X | O | O | O |
ALTERNATE_LOCATORS | X | X | X | O | O |
gloctl
Command Usage
The following is a feature matrix for command usage of gloctl.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
--dsn | X | X | O | X | X |
--conf | X | X | X | O | O |
--ip | X | X | O | O | O |
--port | X | X | O | O | O |
--import | X | X | O | O | O |
--silent | X | X | O | O | O |
--no-copyright | X | X | O | O | O |
--help | X | X | O | O | O |
Configuration File
The following is a feature matrix for configuration file of gloctl.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
PORT | X | X | X | O | O |
LOCATOR_HOST | X | X | X | O | O |
LOCATOR_PORT | X | X | X | O | O |
Replication
cyclone
Command Usage
The following is a feature matrix for command usage of cyclone.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
--conf | X | O | O | O | O |
--encrypt | X | X | O | O | O |
--group | X | O | O | O | O |
--help | X | O | O | O | O |
--key | X | X | O | O | O |
--master | X | O | O | O | O |
--reset | X | O | O | O | O |
--silent | X | O | O | O | O |
--slave | X | O | O | O | O |
--start | X | O | O | O | O |
--status | X | O | O | O | O |
--stop | X | O | O | O | O |
--sync | X | O | O | O | O |
--stand-alone | X | X | X | O | O |
--recovery | X | X | X | O | O |
--local | X | X | X | O | O |
--info | X | O | O | O | O |
Configuration File
The following is a feature matrix for configuration file of cyclone.
Configuration | Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|---|
Common configuration | COMM_CHUNK_COUNT | X | O | O | O | O |
DSN | X | O | O | O | O | |
USER_ENCRYPT_PW | X | X | O | O | O | |
GROUP_NAME | X | O | O | O | O | |
HOST_IP | X | O | O | O | O | |
HOST_EXTERNAL_IP | X | X | O | O | O | |
HOST_PORT | X | O | O | O | O | |
PORT | X | O | O | O | O | |
PROTOCOL | X | X | O | O | O | |
USER_ID | X | O | O | O | O | |
USER_PW | X | O | O | O | O | |
HEARTBEAT_TIMEOUT | X | X | X | X | O | |
MASTER configuration | CAPTURE_TABLE | X | O | O | O | O |
LOG_PATH | X | O | O | O | O | |
READ_LOG_BLOCK_COUNT | X | O | O | O | O | |
TRANS_SORT_AREA_SIZE | X | O | O | O | O | |
TRANS_FILE_PATH | X | O | O | O | O | |
SYNCHER_COUNT | X | O | O | O | O | |
SYNC_ARRAY_SIZE | X | O | O | O | O | |
GIVEUP_INTERVAL | X | O | O | O | O | |
SKIP_COMMENT | X | X | X | X | O | |
LOG_CAPTURE_INTERVAL_1 | X | X | O | O | O | |
LOG_CAPTURE_INTERVAL_2 | X | X | O | O | O | |
SLAVE configuration | APPLIER_COUNT | X | O | O | O | O |
APPLY_ARRAY_SIZE | X | O | X | X | X | |
APPLY_COMMIT_SIZE | X | O | O | O | O | |
APPLY_TABLE | X | O | O | O | O | |
MASTER_IP | X | O | O | O | O | |
PROPAGATE_MODE | X | O | O | O | O | |
CLUSTER | X | X | X | O | O | |
ORACLE_DRIVER | X | X | X | O | O |
logmirror
Command Usage
The following is a feature matrix for command usage of logmirror.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
--conf | X | O | O | O | O |
--help | X | O | O | O | O |
--infiniband | X | O | O | O | O |
--master | X | O | O | O | O |
--silent | X | O | O | O | O |
--slave | X | O | O | O | O |
--start | X | O | O | O | O |
--stop | X | O | O | O | O |
Configuration File
The following is a feature matrix for configuration file of logmirror.
Configuration | Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|---|
Common configuration | PORT | X | O | O | O | O |
MASTER configuration | DSN | X | O | O | O | O |
HOST_IP | X | O | O | O | O | |
HOST_PORT | X | O | O | O | O | |
PROTOCOL | X | X | O | O | O | |
USER_ID | X | O | O | O | O | |
USER_PW | X | O | O | O | O | |
SLAVE configuration | LOG_PATH | X | O | O | O | O |
MASTER_IP | X | O | O | O | O |
cymon
Command Usage
The following is a feature matrix for command usage of cymon.
Feature | 1.x | 2.x | 3.1 | 3.2 | 20c.1 |
|---|---|---|---|---|---|
--conf | X | O | O | O | O |
--help | X | O | O | O | O |
--cycle | X | O | O | O | O |
--key | X | X | O | O | O |
--start | X | O | O | O | O |
--stop | X | O | O | O | O |
--status | X | O | O | O | O |
cyfile
Command Usage
The following is a feature matrix for command usage of cyfile.
Feature | 2.x | 3.1 | 3.2 | 20c.1 | Trunk |
|---|---|---|---|---|---|
--conf | X | X | X | O | O |
--help | X | X | X | O | O |
--reset | X | X | X | O | O |
--key | X | X | X | O | O |
--silent | X | X | X | O | O |
--info | X | X | X | O | O |
--start | X | X | X | O | O |
--stop | X | X | X | O | O |
--group | X | X | X | O | O |
--encrypt | X | X | X | O | O |
--status | X | X | X | O | O |
Configuration File
The following is a feature matrix for configuration file of cyfile.
Feature | 2.x | 3.1 | 3.2 | 20c.1 | Trunk |
|---|---|---|---|---|---|
DSN | X | X | X | O | O |
HOST_IP | X | X | X | O | O |
HOST_PORT | X | X | X | O | O |
PROTOCOL | X | X | X | O | O |
USER_ID | X | X | X | O | O |
USER_PW | X | X | X | O | O |
GROUP_NAME | X | X | X | O | O |
USER_ENCRYPT_PW | X | X | X | O | O |
CAPTURE_TABLE | X | X | X | O | O |
READ_LOG_BLOCK_COUNT | X | X | X | O | O |
TRANS_SORT_AREA_SIZE | X | X | X | O | O |
TRANS_FILE_PATH | X | X | X | O | O |
LOG_CAPTURE_INTERVAL_1 | X | X | X | O | O |
LOG_CAPTURE_INTERVAL_2 | X | X | X | O | O |
DATA_FILE_PATH | X | X | X | O | O |
DATA_FILE_PREFIX | X | X | X | O | O |
DATA_FILE_SIZE | X | X | X | O | O |
UPDATE_BEFORE_VALUE | X | X | X | O | O |
What's New in GOLDILOCKS 20c.1
This chapter briefly describes the features added to GOLDILOCKS 20c.1.
Architecture
System Architecture
The available platform has been changed.
linux-powerpc-64 has been added.
aix6-powerpc-64 has been deleted.
aix7-powerpc-64 has been added.
Storage Internal
Tables and indexes can be stored in the disk tablespace. Pages in the disk tablespace should be read by using s separate memory space, so the buffer cache feature also has been added for that.
Also, the incremental backup for the disk tablespace is determined after scanning the entire data file looking for updated pages after the previous backup. Therefore, if the data file size is big, then the backup speed is slow even when the number of updated pages is small. Therefore, change tracking feature has been added to fix the problem of the incremental backup for the disk tablespace.
Transaction Control
It has not been changed.
Backup & Recovery
It has not been changed.
Database Information
DICTIONARY_SCHEMA
The following views have been added to retrieve the recyclebin object information.
The following views have been added to retrieve the PSM package object information.
INFORMATION_SCHEMA
The following views have been added to retrieve the PSM package object information.
PERFORMANCE_VIEW_SCHEMA
The following views have been added to retrieve the statistics information about the buffer cache and to retrieve all page frames of the buffer cache for caching the disk tablespace pages.
V$DB_CHANGE_TRACKING has been added to retrieve the change tracking information which is used for the disk tablespace incremental backup.
Server Property
The property for the recyclebin
RECYCLEBIN property has been added to activate the recyclebin feature.
CLUSTER_SESSION_HASH_BUCKETS
CLUSTER_SESSION_HASH_BUCKETS property has been added to control the number of hash buckets of the cluster session.
DEADLOCK_PRIORITY
DEADLOCK_PRIORITY property has been added to select a specific transaction as a victim for resolving the deadlock which occurred while simultaneously processing multiple transactions.
USE_LARGE_PAGES
USE_LARGE_PAGES property has been added to use HugePage.
BUFFER_CACHE_SIZE
BUFFER_CACHE_SIZE property has been added to set the size of the buffer cache which cashes the disk tablespace.
BUFFER_CHECKPOINT_LIST_COUNT
BUFFER_CHECKPOINT_LIST_COUNT property has been added to set the number of checkpoint lists to link for flushing the updated pages in the buffer cache to the disk when performing the checkpoint.
BUFFER_FLUSH_THREADS
BUFFER_FLUSH_THREADS property has been added to set the number of threads which flushes the database system buffers.
BUFFER_FLUSHING_INTERVAL
BUFFER_FLUSHING_INTERVAL property has been added to set the idle time of when the buffer flush thread does not have any task to process.
BUFFER_FREE_LIST_COUNT
BUFFER_FREE_LIST_COUNT property has been added to set the number of lists linking bch which is instantly available in the buffer cache.
BUFFER_HASH_BUCKETS
BUFFER_HASH_BUCKETS property has been added to set the number of hash buckets to lookup the pages cached in the buffer cache.
BUFFER_HOT_REGION_CRITERIA
BUFFER_HOT_REGION_CRITERIA property has been added to set touch count to transfer pages to the hot region in buffer lru list.
BUFFER_HOT_REGION_PERCENT
BUFFER_HOT_REGION_PERCENT property has been added to set the proportion (percentage) of pages to leave in hot region to the entire page in the buffer lru list.
BUFFER_LRU_LIST_COUNT
BUFFER_LRU_LIST_COUNT property has been added to set the number of buffer lru lists to be used in the database system.
BUFFER_MULTIPAGE_READ_COUNT
BUFFER_MULTIPAGE_READ_COUNT property has been added to set the maximum number of pages to be used for one time disk IO when full scanning the disk table.
CHANGE_TRACKING
CHANGE_TRACKING property has been added to set whether to track the updated pages to perform the incremental backup of disk tablespace.
CHANGE_TRACKING_EXTENT_SIZE
CHANGE_TRACKING_EXTENT_SIZE property has been added to set the number of pages to be included in one extent when performing change tracking.
CHANGE_TRACKING_FILE
CHANGE_TRACKING_FILE property has been added to set the file directory which stores the change tracking, and the file name.
INCREMENTAL_BACKUP_SCAN_BUFFER_SIZE
INCREMENTAL_BACKUP_SCAN_BUFFER_SIZE property has been added to set the maximum number of pages to be read by one time disk IO when performing the incremental backup of disk tablespace.
REDO_LOG_COMPRESSION_THRESHOLD
REDO_LOG_COMPRESSION_THRESHOLD property has been added to set the threshold size when compressing the log.
SYSTEM_DISK_DATA_TABLESPACE_SIZE
SYSTEM_DISK_DATA_TABLESPACE_SIZE property has been added to set DISK_DATA_TBS tablespace size when creating the database.
USER_DATA_TABLESPACE_MEDIA_TYPE
USER_DATA_TABLESPACE_MEDIA_TYPE property has been added to set the default media type to use if the tablespace media type is omitted when creating the user data tablespace.
USER_DATA_TABLESPACE_SIZE
USER_DATA_TABLESPACE_SIZE property has been added to set the default size to use if the data file size is omitted when creating the user data tablespace or adding the data file.
USER_DISK_DATA_TABLESPACE_NEXTSIZE
USER_DISK_DATA_TABLESPACE_NEXTSIZE property has been added to set the default size to use if the size to be extended is not set when it is required to extend the data file of the user disk data tablespace.
USER_TEMP_TABLESPACE_SIZE
USER_TEMP_TABLESPACE_SIZE property has been added to set the default size to use if the data file size is omitted when creating the user temp tablespace or adding the data file.
IN_KEY_RANGE_ARRAY_COUNT
IN_KEY_RANGE_ARRAY_COUNT property has been added to set the array size of the in key range scan based on array.
BROADCAST_INDEX_REBUILD_PROTOCOL
BROADCAST_INDEX_REBUILD_PROTOCOL property has been added to set whether to simultaneously rebuild the indexes on all members when rebuilding the index in cluster environment.
SQL
Improved Cluster Query Performance
The performance of processing the complex query in cluster has been improved.
The performance is changed as follows according to the increase of cluster groups per each query in TPC-H(scale factor 10) test.
The following is a graph of version 20c.1. The response time of most queries are decreased when cluster groups increase.
The response time per each query when cluster groups of TPC-H SF10 increase in version 20c.1
For more information about query processing in cluster environment, refer to the followings.
SQL Element
Data Type
It has not been changed.
Function
The following formatting functions have been added.
PHYSICAL_LENGTH function has been added.
LNNVL function has been added.
Pseudo Column
CLUSTER_SHARD_ID Pseudo Column has been added.
Object
Package Object
The PSM package object has been added.
SQL Language
Table DDL
The recyclebin feature has been added to the table.
Restoring an object stored in the recyclebin.
Dropping an object stored in the recyclebin.
ALTER TABLE name MERGE SHARDS has been added to merge shards.
REBUILD GLOBAL SECONDARY INDEX has been added to rebuild the global secondary index.
Index DDL
ALTER INDEX name REBUILD has been added to rebuild the index.
Immutable Table
The feature which prevents the record stored in the table from being altered or deleted and prevents the table from being dropped has been added.
Assigning position When Performing ADD MEMBER
The statement assigning the member position when adding the cluster member has been added.
<member position> in ALTER CLUSTER GROUP name ADD MEMBER
<member position> in CREATE CLUSTER GROUP
PSM Package-related DDL
DDLs to create or drop PSM package have been added.
Performance Measuring
ALTER SYSTEM CLEANUP BUFFER_CACHE has been added to clear buffer pages in the disk buffer cache.
API
ODBC
DOT_NET_FOR_ODBC has been added to Keywords in the data source specification section.
Data Source Configuration
trace, tracefile and include_synonyms have been added to data source configuration.
JDBC
Statement Pooling feature has been added.
The getNetworkTimeout() and setNetworkTimeout() methods of the Connection class are supported.
Connection Property
tcp_nodelay, login_timeout and include_synonyms have been added to connection property.
Embedded SQL
Precompiler(gpec)
--cumulative option has been added.
The --parse option has been added to gpec.
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
\ddl_package feature has been added to export DDL statement of the package objects.
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
The method to communicate with gagent is changed to TCP.
FAILOVER_TIMEOUT is deleted from configure file.
MAX_NODE_COUNT has been added to configure file.
KEEPALIVE_IDLE_TIME, KEEPALIVE_COUNT, KEEPALIVE_INTERVAL have been added to configure file.
gagent
The method to communicate with glocator is changed to TCP.
COMMAND_QUEUE_SIZE is deleted from configure file.
COMMAND_ALLOCATOR_SIZE is deleted from configure file.
PACKET_ALLOCATOR_SIZE is deleted from configure file.
UPDATE_LOCATION_TIME is deleted from configure file.
SESSION_TIMEOUT is deleted from configure file.
SYSTEM_UDS_DIR has been added to configure file.
PORT is deleted, and REQUEST_PORT, RESPONSE_PORT have been added to configure file.
KEEPALIVE_IDLE_TIME, KEEPALIVE_COUNT, KEEPALIVE_INTERVAL have been added to configure file.
gloctl
It has not been changed.
Replication
cyclone
It has not been changed.
logmirror
It has not been changed.
cymon
It has not been changed.
cyfile
A tool which uses CDC method to store/ record the transaction of the original database in CSV format file has been added.
Patch Notes
20c.1.30 Patch Notes
ISSUE-4478 The setNetworkTimeout behavior of the JDBC connection class has been changed from asynchronous to synchronous.
Description
The internal setNetworkTimeout() behavior of of the Connection class has been changed from asynchronous to synchronous.
Symptom
In the previous asynchronous implementation, requests to configure the network timeout returned immediately, while the actual timeout configuration was performed in a separate thread. As a result, SQL statements executed immediately after calling setNetworkTimeout() could run before the new timeout value was applied. Consequently, the timeout might not behave as expected, and the timing of the timeout configuration could be inconsistent.
Workaround
Wait for a certain period of time after calling setNetworkTimeout(), or execute SQL statements only after the timeout setting is expected to be applied.
ISSUE-8272 During view projection pruning, aggregations referenced by other targets were incorrectly removed when unused columns were pruned from a view, and this issue has been fixed.
Description
During view projection pruning, aggregations referenced by other targets were incorrectly removed when unused columns were pruned from a view.
Symptom
Executing the following query causes an abnormal termination.
DROP VIEW IF EXISTS v1;
CREATE VIEW v1( sum1, sum2 )
AS
SELECT
SUM(c2),
SUM(c2) - SUM(c2)
FROM ( SELECT 1, 2 FROM dual
UNION ALL
SELECT 1, 2 FROM dual ) as v2( c1, c2 )
GROUP BY c1
ORDER BY c1;
COMMIT;
--# Query that causes an abnormal termination
SELECT sum2 FROM v1;After the fix, the above query executes successfully and returns the following result.
DROP VIEW IF EXISTS v1;
CREATE VIEW v1( sum1, sum2 )
AS
SELECT
SUM(c2),
SUM(c2) - SUM(c2)
FROM ( SELECT 1, 2 FROM dual
UNION ALL
SELECT 1, 2 FROM dual ) as v2( c1, c2 )
GROUP BY c1
ORDER BY c1;
COMMIT;
SELECT sum2 FROM v1;
SUM2
----
0
1 row selected.Workaround
The patch is required.
20c.1.29 Patch Notes
ISSUE-4478 The getNetworkTimeout and setNetworkTimeout methods of the JDBC connection class are supported.
Description
The getNetworkTimeout and setNetworkTimeout methods of the connection class are supported.
Symptom
N/A
Workaround
The patch is required.
ISSUE-8058 The pthread_yield compatibility issue in glibc 2.34 has been fixed.
Description
In the glibc 2.34 environment, referencing pthread_yield() caused a compatibility issue that could lead to a link failure of the GOLDILOCKS shared library. To address this, the thread yield implementation has been modified to preferentially use the standard sched_yield() API, ensuring build compatibility with glibc 2.34-based systems.
Symptom
When building an application in a glibc 2.34 environment, the final linking stage could fail because the GOLDILOCKS shared library was unable to resolve the pthread_yield symbol. A representative error message is shown below:
• undefined reference to 'pthread_yield'Workaround
Use an environment with a glibc version earlier than 2.34.
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.
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-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");
#endifThe 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");
#endifISSUE-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.
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-6574 The boundary of the member info array may be violated during the GSI REBUILD process.
Description
If rebuilding the GSI after dropping a cluster member, the system may terminate abnormally.
Symptom
Clearing the cluster member and rebuilding the GSI after dropping one or more cluster nodes as follows below may cause the system to terminate abnormally.
ALTER DATABASE DROP INACTIVE CLUSTER MEMBERS; Database altered. ALTER TABLE T1 REBALANCE; Table altered. ALTER TABLE T1 REBUILD GLOBAL SECONDARY INDEX;
Workaround
The patch is required.
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.
The left outer join was transformed into an inner join.
The full outer join was transformed into a left outer join.
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 planAfter 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 planWorkaround
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 planISSUE-4334 It fails to join the node due to the SCN difference when ascending to Global Open.
Description
It fails to join a cluster because the scn of a specific member is smaller than a maximum scn of the cluster, and this error has been fixed.
Symptom
It can not ascend to Global Open with the following error.
gSQL> ALTER SYSTEM OPEN GLOBAL DATABASE; ERR-42000(16410): Startup driver node must have the latest data - a suitable startup driver node is 'G1N1' member
Workaround
The patch is required.
ISSUE-6129 When executing prepare/execute on the global connection, a valid plan cache may be dropped.
Description
It has been occurred from version 20c.1.12.
When executing prepare/execute on the global connection, a valid plan cache is dropped at the first execute and the new plan cache is created, and this error has been fixed.
Symptom
Execute prepare/execute with multiple gsqlnet in the global connection environment as follows.
gSQL> \var v1 INTEGER gSQL> \exec :v1 := 1111 gSQL> \prepare sql SELECT * FROM t1 WHERE sk = :v1; SQL prepared. gSQL> \exec SK ---- 1111 1 row selected.
Then, enquire the status of the plan cache to find the dropped plan cache as follows.
SELECT COUNT(*) FROM x$sql_cache WHERE dropped IS TRUE;
COUNT(*)
--------
2
1 row selected.Workaround
The patch is required.
ISSUE-4575 The identical SQL statement is redundantly cached in the embedded SQL.
Description
The embedded SQL reuses the identical SQL by caching DML and the query statement when using the identical SQL. If char pointer is used as a host variable, then the identical SQL statement is redundantly cached.
Symptom
If a char pointer is used as a host variable and the string length of this char pointer changes as follows, then a new SQL statement is created.
void func(char * data)
{
EXEC SQL BEGIN DECLARE SECTION;
char * strPtr;
EXEC SQL END DECLARE SECTION;
strPtr = data;
EXEC SQL DELETE FROM TEST WHERE C1 = :strPtr;
if(sqlca.sqlcode == 0 )
....
}Workaround
Use a char array instead of using the char pointer as a host variable.
20c.1.28 Patch Notes
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 planThe 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-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 planThe 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 planWorkaround
Use a hint other than USE_INL(t1). For example, use USE_NL(t1), USE_HASH(t1) or USE_MERGE(t1).
ISSUE-4863 The lock is not switched to the optimistic mode after REBALANCE.
Description
The lock which is switched to the pessimistic mode during ALTER TABLE REBALANCE, is not switched to the optimistic mode, and it may downgrade the performance.
Symptom
If performing ALTER TABLE REBALANCE ONLINE when DML occurs, then it may downgrade the performance.
Workaround
The patch is required.
20c.1.27 Patch Notes
ISSUE-4334 It fails to join the node due to the SCN difference when ascending to Global Open.
Description
It fails to join a cluster because the scn of a specific member is smaller than a maximum scn of the cluster, and this error has been fixed.
Symptom
It can not ascend to Global Open with the following error.
gSQL> ALTER SYSTEM OPEN GLOBAL DATABASE; ERR-42000(16410): Startup driver node must have the latest data - a suitable startup driver node is 'G1N1' member
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-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-5367 Statement pooling feature has been added in JDBC.
Description
It supports the statement pooling feature.
Symptom
N/A
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.
group by or order by exists within a view.
expr to be deleted from the view's select list is an argument of another function expression.
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-4234 When performing PSM DDL after ADD MEMBER, then a dictionary integrity constraint violation occurs for the ROUTINE primary key.
Description
When performing PSM DDL after ADD MEMBER, then a dictionary integrity constraint violation occurs for the ROUTINE primary key, and this error has been fixed.
Symptom
When creating a routine and adding a cluster member then creating a routine again, an error occurs as follows.
gSQL>
CREATE OR REPLACE FUNCTION u1.func1 ()
RETURN INTEGER
AS
BEGIN
RETURN 0;
END;
/
Function created.
gSQL>
CREATE OR REPLACE FUNCTION u1.func2 ()
RETURN INTEGER
AS
BEGIN
RETURN 0;
END;
/
Function created.
gSQL>
CREATE OR REPLACE FUNCTION u1.func3 ()
RETURN INTEGER
AS
BEGIN
RETURN 0;
END;
/
Function created.
gSQL>
CREATE OR REPLACE FUNCTION u1.func4 ()
RETURN INTEGER
AS
BEGIN
RETURN 0;
END;
/
Function created.\connect as sysdba gSQL> ALTER CLUSTER GROUP G3 ADD CLUSTER MEMBER G3N3 HOST '127.0.0.1' PORT 13350;
gSQL>
CREATE OR REPLACE FUNCTION u1.func5 ()
RETURN INTEGER
AS
BEGIN
RETURN 0;
END;
/
ERR-23000(15006): MEMBER(G3N3): "ROUTINES_PRIMARY_KEY": dictionary integrity constraint violation by concurrent DDL executionWorkaround
The patch is required.
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.
KEEPALIVE_IDLE_TIME
KEEPALIVE_INTERVAL
KEEPALIVE_COUNT
Or, alter the following kernel attributes, so that it can quickly detect the network disconnection.
net.ipv4.tcp_keepalive_intvl
net.ipv4.tcp_keepalive_probes
net.ipv4.tcp_keepalive_time
net.ipv4.tcp_retries2
ISSUE-5124 If it fails to allocating dynamic memory, then it may kill the server due to the simultaneity issue.
Description
If it fails to allocating dynamic memory, then it may kill the server due to the simultaneity issue.
Symptom
If it fails while multiple threads allocate a single dynamic memory, then it may kill the server due to the simultaneity issue.
Workaround
The patch is required.
20c.1.26 Patch Notes
ISSUE-4933 If the server becomes unavailable while using JDBC XA, then it should transfer XA error to the client.
Description
If the server becomes unavailable while using JDBC XA, then it should transfer XA error to the client.
Symptom
If the server becomes unavailable while using JDBC XA, then it should transfer XA error to the client. However, in reality, it does not transfer XA error and it is operated as if it succeeds.
Workaround
The patch is required.
ISSUE-4873 It supports XA rollback feature for XA transaction which is not dissociated from the session.
Description
XA transaction is associated with the session until performing xa end, and to commit or rollback the XA transaction, it should be dissociated from the session. However, other DBMS support the rollback feature even when the transaction is not dissociated from the session. Therefore, it has been improved to support the same feature.
Symptom
If performing xa rollback without performing xa end for the XA transaction in progress in the session, then an error occurs. However, it is normally operated if performing xa rollback after performing xa end.
gSQL> XA START 10 XA transaction started gSQL> INSERT INTO T1 VALUES ( 1 ); 1 row created. gSQL> XA ROLLBACK 10 ERR-HY000(40035): resource manager unavailable gSQL> XA END 10 SUCCESS XA transaction ended gSQL> XA ROLLBACK 10 Rollback completed
Workaround
The patch is required.
ISSUE-4753 When enquiring USER_TABLES, the global temporary table is not viewed.
Description
When enquiring the dictionary view such as USER_TABLES, ALL_TABLES and DBA_TABLES, the global temporary table is not viewed.
Symptom
Even though enquiring the global temporary table through USER_TABLES after the global temporary table has been created as follows, but the global temporary table is not viewed.
gSQL> CREATE GLOBAL TEMPORARY TABLE gt1 ( c1 INTEGER ) ON COMMIT DELETE ROWS;
Table created.
gSQL> CREATE GLOBAL TEMPORARY TABLE gt2 ( c1 INTEGER ) ON COMMIT PRESERVE ROWS;
Table created.
gSQL> COMMIT;
Commit complete.
gSQL>
SELECT table_schema
, table_name
, temporary
, duration
FROM USER_TABLES
WHERE table_name IN ( 'GT1', 'GT2' )
ORDER BY 2
;
no rows selected.The correct result is viewed as follows after patching.
gSQL>
SELECT table_schema
, table_name
, table_type
, commit_action
FROM TABLES
WHERE table_name IN ( 'GT1', 'GT2' )
ORDER BY 2
;
TABLE_SCHEMA TABLE_NAME TABLE_TYPE COMMIT_ACTION
------------ ---------- ---------------- -------------
PUBLIC GT1 GLOBAL TEMPORARY DELETE
PUBLIC GT2 GLOBAL TEMPORARY PRESERVE
2 rows selected.Execute DictionarySchema.sql to apply the patch as follows.
Standalone
% gsql sys gliese --as sysdba --import $GOLDILOCKS_HOME/admin/standalone/DictionarySchema.sql
Cluster
% gsql sys gliese --as sysdba --import $GOLDILOCKS_HOME/admin/cluster/DictionarySchema.sql
Workaround
Enquire the SQL standard INFORMATION_SCHEMA.TABLES.
gSQL>
SELECT table_schema
, table_name
, table_type
, commit_action
FROM TABLES
WHERE table_name IN ( 'GT1', 'GT2' )
ORDER BY 2
;
TABLE_SCHEMA TABLE_NAME TABLE_TYPE COMMIT_ACTION
------------ ---------- ---------------- -------------
PUBLIC GT1 GLOBAL TEMPORARY DELETE
PUBLIC GT2 GLOBAL TEMPORARY PRESERVE
2 rows selected.ISSUE-4709 Query execution for the local node may fail on local open phase.
Description
If enquiring the table by connecting to the node on local open phase in cluster environment, then an error occurs.
Symptom
If the connected node is on local open phase, then it can not access the remote node but it can access the local node. However, if it determines that the node on local open phase can not access the local node, then the query fails.
The following is an example of an error occurred when executing the query on G1N1 on local open phase.
gSQL> SELECT * FROM v$datafile; ERR-HY000(16354): connection of member 'G1N1' is broken
It determines whether the current node can access a specific node based on the connection information. However, if it can not refer to the connection information in case when it is on local open phase, then it may determine that it can not access the current node either.
It is modified to determine that it can access the current node even when it can not refer to the connection information.
Workaround
The patch is required.
ISSUE-4696 View columns have been added to view the update master information of the cluster table.
Description
The update master in the cluster table is a member node where DML is first performed when DML occurs in the table.
The followings affect determining the update master of each cluster table.
Positioning cluster table
Position of members in the cluster group
Whether it is online/ offline
Whether to perform rebalance
IS_UPDATE_MASTER column has been added to the following dictionary views to easily view the update master information which is subject to change during the operation.
Symptom
View it as follows.
SELECT group_name, member_name, is_update_master FROM user_tab_place WHERE table_name = 'R'; GROUP_NAME MEMBER_NAME IS_UPDATE_MASTER ---------- ----------- ---------------- G1 G1N1 TRUE G1 G1N2 FALSE G2 G2N1 TRUE G2 G2N2 FALSE G3 G3N1 TRUE G3 G3N2 FALSE 6 rows selected.
Cluster table R is located in groups G1, G2, G3, and the member corresponding to update master in each group is G1N1, G2N1 and G3N1.
Workaround
The patch is required.
ISSUE-4609 When using two or more subquery expressions including a join combine, then a segment fault occurs.
Description
When referring to the information of the subquery expression in the statement in which two or more subquery expressions including a join combine are used, then a segment fault occurs.
The error occurred in the following clauses.
TARGET clause
WHERE clause
HAVING clause
ORDER BY clause
Symptom
When building the information to refer to the subquery expression in the clause including the subquery expression, then it can not find the related expression, so it never stops searching for the expression. Therefore, the segment fault occurs.
CREATE TABLE T1(
C1 NUMBER,
C2 NUMBER,
C3 NUMBER,
C4 NUMBER );
CREATE TABLE T2(
C1 NUMBER,
C2 NUMBER,
C3 NUMBER,
C4 NUMBER );
--# Segment Fault
SELECT
(
SELECT t1.c1
FROM T1
INNER
JOIN
T2
ON ( t1.c3 = t2.c2 OR t1.c3 = t2.c3 )
)
, (
SELECT t1.c1
FROM T1
INNER
JOIN
T2
ON ( t1.c3 = t2.c2 OR t1.c3 = t2.c3 )
) AS DS2
FROM dual;Workaround
The patch is required.
ISSUE-4589 Complex view merging was executed even though SELECT FOR UPDATE, UPDATE, DELETE does not support the complex view merging.
Description
Complex view merging was executed even though SELECT FOR UPDATE, UPDATE, DELETE does not support the complex view merging.
Symptom
The complex view merging should not be executed for the following query. However, the complex view merging is executed after the subquery unnesting, so the server is abnormally terminated.
DROP TABLE IF EXISTS t1;
CREATE TABLE t1
(
c1 INTEGER
, c2 INTEGER
, c3 INTEGER
, c4 INTEGER
);
COMMIT;
UPDATE t1
SET c1 = 1
WHERE ( c1, c2, c3, c4 )
IN ( SELECT c1, c2, c3, c4
FROM t1
GROUP BY c1, c2, c3, c4
);Workaround
The patch is required.
ISSUE-4566 It can not process the overflow even when the number of digits increased after the rounding off while converting the numeric type to NUMBER type.
Description
It can not process the overflow even when the number of digits increased after the rounding off while converting the numeric type to NUMBER type.
Symptom
The following query was supposed to cause an overflow error.
gSQL> SELECT CAST( 9999999999.9 AS NUMBER(10,0)) FROM dual;
CAST( 9999999999.9 AS NUMBER(10,0))
-----------------------------------
10000000000
1 row selected.Workaround
Convert it to NUMBER type after convert it to the character type.
gSQL> SELECT CAST( TO_CHAR( 9999999999.9 ) AS NUMBER(10,0) ) FROM dual;
ERR-22003(12060): data is outside the range of the data type to which the number is being converted :
SELECT CAST( TO_CHAR( 9999999999.9 ) AS NUMBER(10,0) ) FROM dual
*
ERROR at line 1:ISSUE-4559 The trace log is output as TRACE_LONG_RUN_CURSOR even when the cursor does not exist in SELECT INTO statement.
Description
TRACE_LONG_RUN_CURSOR property records the long run cursor which exceeds the specified time on the trace log. However, the trace log is output as TRACE_LONG_RUN_CURSOR even though SELECT INTO statement does not require the cursor, and this error has been fixed.
Symptom
If SELECT INTO statement fails as follows, it is determined as TRACE_LONG_RUN_CURSOR so it records the trace log.
gSQL> CREATE TABLE r ( c1 INTEGER ); Table created. gSQL> INSERT INTO r VALUES ( 1 ); 1 row created. --# It is the long run cursor trace which takes more than 1 second gSQL> ALTER SYSTEM SET TRACE_LONG_RUN_CURSOR = 1000; System altered. gSQL> \var v1 INTEGER gSQL> \prepare sql SELECT c1 INTO :v1 FROM r WHERE c1 = 1 FOR UPDATE; SQL prepared. --# It is not recorded as TRACE_LONG_RUN_CURSOR on the trace log. gSQL> \exec V1 -- 1 1 row selected. gSQL> INSERT INTO r VALUES ( 1 ); 1 row created. --# Execute after 2 seconds. --# It is recorded as TRACE_LONG_RUN_CURSOR on the trace log. gSQL> \exec ERR-42000(16289): into clause can have only one row
Workaround
The patch is required.
ISSUE-4537 When performing ADD MEMBER after the incorrect DROP TABLESPACE statement succeeds, then the new member is abnormally terminated.
Description
If performing ADD MEMBER when DROP TABLESPACE statement succeeds though it was supposed to fail, then the newly added cluster member is abnormally terminated, so ADD MEMBER fails.
It is modified to cause an error when the DROP TABLESPACE's target tablespace was set as the user's default tablespace.
gSQL> CREATE USER u1 IDENTIFIED BY u1
TEMPORARY TABLESPACE temp_tbs;
User created.
gSQL> DROP TABLESPACE temp_tbs CASCADE;
ERR-42000(16133): cannot drop tablespace: "TEMP_TBS" is default tablespace of user "U1"To drop the tablespace, modify the user's default tablespace as follows first then drop it.
gSQL> ALTER USER u1 TEMPORARY TABLESPACE mem_temp_tbs; User altered. gSQL> DROP TABLESPACE temp_tbs CASCADE; Tablespace dropped.
Symptom
DROP TABLESPACE succeeds as follows though the user's default tablespace was unable to drop.
gSQL> CREATE USER u1 IDENTIFIED BY u1
TEMPORARY TABLESPACE temp_tbs;
User created.
gSQL> DROP TABLESPACE temp_tbs CASCADE;
Tablespace dropped.Then, if a new cluster member is added as follows, then the new member(g2n3) is abnormally terminated, so ADD MEMBER fails.
gSQL> ALTER CLUSTER GROUP g2 ADD CLUSTER MEMBER g2n3 HOST '127.0.0.1' PORT 12350;
Workaround
Before performing ADD MEMBER, it is required to find the user violating DROP TABLESPACE integrity and modify the user's default tablespace as follows.
If the result of the following query exists, then it is required to modify the user's default tablespace.
SELECT auth.authorization_name
FROM definition_schema.authorizations@local AS auth
, definition_schema.users@local AS usr
WHERE auth.auth_id = usr.auth_id
AND NOT EXISTS ( SELECT *
FROM definition_schema.tablespaces@local AS tbs
WHERE tbs.tablespace_id = usr.default_data_tablespace_id );If the result of the following query exists, then it is required to modify the user's temporary tablespace.
SELECT auth.authorization_name
FROM definition_schema.authorizations@local AS auth
, definition_schema.users@local AS usr
WHERE auth.auth_id = usr.auth_id
AND NOT EXISTS ( SELECT *
FROM definition_schema.tablespaces@local AS tbs
WHERE tbs.tablespace_id = usr.default_temp_tablespace_id );If the result of the following query exists, then it is required to modify the user's index tablespace.
SELECT auth.authorization_name
FROM definition_schema.authorizations@local AS auth
, definition_schema.users@local AS usr
WHERE auth.auth_id = usr.auth_id
AND NOT EXISTS ( SELECT *
FROM definition_schema.tablespaces@local AS tbs
WHERE tbs.tablespace_id = usr.default_index_tablespace_id )
;ISSUE-4500 If performing the index scan by using another OR condition when the join condition includes OR condition, then the query waits infinitely.
Description
When the join combine method is selected by the join condition including OR condition, and the column included in the join combine is referenced in the relation to which another join belongs, then it waits infinitely.
Symptom
When referring to the column included in the join which consists of join combine as follows, then it can not find the column information, so it waits infinitely.
gSQL> CREATE TABLE T1( C1 INT, C2 INT );
Table created.
gSQL> CREATE INDEX IDX_T1_C1 ON T1( C1 );
Index created.
gSQL> CREATE INDEX IDX_T1_C2 ON T1( C2 );
Index created.
gSQL> INSERT INTO T1 VALUES ( 1, 1 );
1 row created.
--# Infinite waiting
gSQL> SELECT *
FROM T1 A, T1 B
WHERE ( A.C1 = B.C1 OR A.C1 = B.C2 )
AND EXISTS( SELECT 1
FROM T1 C
WHERE ( C.C1 = A.C1 OR C.C2 = A.C1 ) );Workaround
Use NO_USE_JOIN_COMBINE hint as follows so that JOIN COMBINE would not be configured.
gSQL> SELECT /*+ NO_USE_JOIN_COMBINE( A ) */ *
FROM T1 A, T1 B
WHERE ( A.C1 = B.C1 OR A.C1 = B.C2 )
AND EXISTS( SELECT 1
FROM T1 C
WHERE ( C.C1 = A.C1 OR C.C2 = A.C1 ) );
C1 C2 C1 C2
-- -- -- --
1 1 1 1
1 rows selected.ISSUE-4480 When defining %TYPE which refers to the column whose reserved word is the column name, then an error occurs.
Description
When defining %TYPE which refers to the column whose reserved word is the column name, then an error occurs.
Symptom
An error occurs because it can not find the column information though OFFSET column exists in the table as follows.
gSQL> CREATE TABLE t1( "OFFSET" INTEGER, LENGTH INTEGER );
Table created.
gSQL> COMMIT;
Commit complete.
gSQL> CREATE OR REPLACE PROCEDURE proc1( p1 public.t1."OFFSET"%TYPE )
AS
BEGIN
NULL;
END;
/
ERR-2F000(17012): unknown type name :
CREATE OR REPLACE PROCEDURE proc1( p1 public.t1."OFFSET"%TYPE )Workaround
The patch is required.
ISSUE-4472 When outputting DDL_DB, the schema privilege DDL is not output.
Description
If outputting DDL_DB when two or more schema are created, then only part of them are output and other are not output.
Symptom
Three schema privilege DDLs should have been created in the example below, but actually only one DDL is created.
gSQL> CREATE SCHEMA s1;
Schema created.
gSQL> CREATE SCHEMA s2;
Schema created.
gSQL> CREATE SCHEMA s3;
Schema created.
gSQL> COMMIT;
Commit complete.
gSQL> CREATE USER u1 IDENTIFIED BY u1 WITHOUT SCHEMA;
User created.
gSQL> CREATE USER u2 IDENTIFIED BY u2 WITHOUT SCHEMA;
User created.
gSQL> CREATE USER u3 IDENTIFIED BY u3 WITHOUT SCHEMA;
User created.
gSQL> COMMIT;
Commit complete.
gSQL> GRANT CREATE TABLE ON SCHEMA s1 TO u1;
Grant succeeded.
gSQL> GRANT CREATE VIEW ON SCHEMA s2 TO u2, u3;
Grant succeeded.
gSQL> COMMIT;
Commit complete.
gSQL> \ddl_db
--#####################################################
--# Database DDL
--#####################################################
SET SESSION AUTHORIZATION "SYS";
COMMENT
ON DATABASE
IS 'goldilocks database'
;
COMMIT;
...Ellipsis...
--#####################################################
--# Schema Privilege DDL
--#####################################################
SET SESSION AUTHORIZATION "SYS";
GRANT
CREATE TABLE ON SCHEMA "S1"
TO "U1"
;
COMMIT;
--#####################################################
--# Public Synonym DDL
--#####################################################
...Ellipsis...Three schema privilege DDLs are created after solving the problem.
gSQL> CREATE SCHEMA s1;
Schema created.
gSQL> CREATE SCHEMA s2;
Schema created.
gSQL> CREATE SCHEMA s3;
Schema created.
gSQL> COMMIT;
Commit complete.
gSQL> CREATE USER u1 IDENTIFIED BY u1 WITHOUT SCHEMA;
User created.
gSQL> CREATE USER u2 IDENTIFIED BY u2 WITHOUT SCHEMA;
User created.
gSQL> CREATE USER u3 IDENTIFIED BY u3 WITHOUT SCHEMA;
User created.
gSQL> COMMIT;
Commit complete.
gSQL> GRANT CREATE TABLE ON SCHEMA s1 TO u1;
Grant succeeded.
gSQL> GRANT CREATE VIEW ON SCHEMA s2 TO u2, u3;
Grant succeeded.
gSQL> COMMIT;
Commit complete.
gSQL> \ddl_db
--#####################################################
--# Database DDL
--#####################################################
SET SESSION AUTHORIZATION "SYS";
COMMENT
ON DATABASE
IS 'goldilocks database'
;
COMMIT;
...Ellipsis...
--#####################################################
--# Schema Privilege DDL
--#####################################################
SET SESSION AUTHORIZATION "SYS";
GRANT
CREATE TABLE ON SCHEMA "S1"
TO "U1"
;
COMMIT;
SET SESSION AUTHORIZATION "SYS";
GRANT
CREATE VIEW ON SCHEMA "S2"
TO "U2"
;
COMMIT;
SET SESSION AUTHORIZATION "SYS";
GRANT
CREATE VIEW ON SCHEMA "S2"
TO "U3"
;
COMMIT;
--#####################################################
--# Public Synonym DDL
--#####################################################
...Ellipsis...Workaround
Output GRANT information per each schema.
gSQL> \ddl_schema s1 GRANT
SET SESSION AUTHORIZATION "SYS";
GRANT
CREATE TABLE ON SCHEMA "S1"
TO "U1"
;
COMMIT;
gSQL> \ddl_schema s2 GRANT
SET SESSION AUTHORIZATION "SYS";
GRANT
CREATE VIEW ON SCHEMA "S2"
TO "U2"
;
COMMIT;
SET SESSION AUTHORIZATION "SYS";
GRANT
CREATE VIEW ON SCHEMA "S2"
TO "U3"
;
COMMIT;ISSUE-4471 When creating TABLESPACE with DISK TABLESPACE statement which was output with DDL_DB command, then a syntax error occurs.
Description
When creating TABLESPACE with CREATE DISK TABLESPACE statement which was output with DDL_DB command, then a syntax error occurs.
Symptom
Create the tablespace.
gSQL> CREATE DISK DATA TABLESPACE disk_test_01 DATAFILE 'DISK_TEST_01.dbf' SIZE 100M; COMMIT;
Input \ddl_db.
gSQL> \ddl_db
--#####################################################
--# Database DDL
--#####################################################
SET SESSION AUTHORIZATION "SYS";
COMMENT
ON DATABASE
IS 'goldilocks database'
;
COMMIT;
--#####################################################
--# Tablespace DDL
--#####################################################
SET SESSION AUTHORIZATION "SYS";
CREATE DISK DATA TABLESPACE "DISK_TEST_01"
DATAFILE
'/home/product/Gliese/home/g1n1_home/db/DISK_TEST_01.dbf'
SIZE 104857600 REUSE
AT "G1N1"
AUTOEXTEND OFF
,
'/home/product/Gliese/home/g2n1_home/db/DISK_TEST_01.dbf'
SIZE 104857600 REUSE
AT "G2N1"
AUTOEXTEND OFF
ONLINE
EXTSIZE 262144
;
COMMIT;
... Ellipsis ...Input tablespace DDL statement which was output by executing \ddl_db command in step 2.
gSQL> CREATE DISK DATA TABLESPACE "DISK_TEST_01"
DATAFILE
'/home/product/Gliese/home/g1n1_home/db/DISK_TEST_01.dbf'
SIZE 104857600 REUSE
AT "G1N1"
AUTOEXTEND OFF
,
'/home/product/Gliese/home/g2n1_home/db/DISK_TEST_01.dbf'
SIZE 104857600 REUSE
AT "G2N1"
AUTOEXTEND OFF
ONLINE
EXTSIZE 262144
;
ERR-42000(40000): syntax error:
AUTOEXTEND OFF
^ ^
Error at line 6Workaround
Modify the location of AUTOEXTEND OFF and AT <domain_name> in CREATE TABLESPACE statement which was output with \ddl_db, then execute it.
gSQL> CREATE DISK DATA TABLESPACE "DISK_TEST_01"
DATAFILE
'/home/product/Gliese/home/g1n1_home/db/DISK_TEST_01.dbf'
SIZE 104857600 REUSE
AUTOEXTEND OFF
AT "G1N1"
,
'/home/product/Gliese/home/g2n1_home/db/DISK_TEST_01.dbf'
SIZE 104857600 REUSE
AUTOEXTEND OFF
AT "G2N1"
ONLINE
EXTSIZE 262144
;
Tablespace created.ISSUE-4454 When TRACE_LOG_ID = xxxxx1 is set, the performance time of the query per section is not output on the trace log.
Description
When TRACE_LOG_ID = xxxxx1 is set, the performance time of the query per section is not output on the trace log. The ones place in TRACE_LOG_ID is the flag which determines whether to output the performance time per section, and it outputs the time when the value is 1.
Symptom
When TRACE_LOG_ID = xxxxx1 is set, the performance time of the query per section is not output on the trace log.
[S][0.000000] SELECT * FROM dual ... Ellipsis ... < Time Info > ====================================================== | Module | Time | Rate | Call | ------------------------------------------------------ | Parse | 0:00:00.000000 | 0.00 % | 1 | | Validate | 0:00:00.000000 | 0.00 % | 1 | | Cost Opt | 0:00:00.000000 | 0.00 % | 1 | | Code Opt | 0:00:00.000000 | 0.00 % | 1 | | Data Opt | 0:00:00.000000 | 0.00 % | 1 | | Execute | 0:00:00.000000 | 0.00 % | 1 | | Fetch | 0:00:00.000000 | 0.00 % | 1 | | Total | 0:00:00.000000 | 100.00 % | | ======================================================
Workaround
The patch is required.
ISSUE-4317 It supports SQL_ATTR_CONNECTION_TIMEOUT property.
Description
If the network is unstable, then the client can not receive the response and stays in blocking status, after sending a query to the server. Therefore, it supports SQL_ATTR_CONNECTION_TIMEOUT property of SQLSetConnectAttr() to solve this problem.
If SQL_ATTR_CONNECTION_TIMEOUT value is set, then the client sends a query to the server and waits for the response as long as the set time. If it can not get the response for the set time, then the client cuts the connection to the server and returns HYT01 Connection timeout expired error.
Symptom
If the network is unstable, then the client waits for the set time after requesting the response to the server.
Workaround
Alter the kernel property value as follows, so that it can quickly detects whether the connection between the client and the server has an error.
net.ipv4.tcp_keepalive_time = 3 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_keepalive_intvl = 3 net.ipv4.tcp_retries2 = 5
ISSUE-4031 The column name of the table is not properly displayed in .Net Framework.
Description
When querying the column name in SQLColAttribute() and SQLGetDescField(), SQL_DESC_LABEL property, SQL_DESC_NAME property or SQL_DESC_BASE_COLUMN_NAME property is used. SQL_DESC_LABEL returns the label, when the column has a label. SQL_DESC_NAME returns an alias when the column has an alias. And, SQL_DESC_BASE_COLUMN_NAME returns the column name.
.Net Framework, data provider for ODBC, uses SQL_DESC_NAME when querying the column name, and the column name is unintentionally retrieved when the label is given to the column. Therefore, DOT_NET_FOR_ODBC, the connection property, has been added for Net Framework to solve this problem.
Symptom
If executing the following query in gsql, then the column name is retrieved as follows.
gSQL> SELECT I1, I1 + I1, I1 AS C1 FROM TEST; I1 I1 + I1 C1 -- ------- -- 1 2 1
If executing the query above in .Net Framework, data provider for ODBC, then the query result is as follows.
SELECT I1, I1 + I1, I1 AS C1 FROM TEST; I1 NULL C1 -- ---- -- 1 2 1
Workaround
The patch is required.
ISSUE-4254 When executing a subquery containing DISTINCT in the cluster system, then a syntax error occurs in the remote server.
Description
If configuring a cluster query by using the query and executing it when the subquery containing DISTINCT is described and the subquery target which is not referenced exists in the cluster system, then a syntax error occurs in the remote server. It is because the number of target expressions in the created cluster query and that of view column names do not match.
Symptom
gSQL> CREATE TABLE t1 ( i1 INTEGER, i2 INTEGER ) SHARDING BY HASH( i1 );
Table created.
gSQL> commit;
Commit complete.
gSQL> SELECT v1.i1 FROM ( SELECT DISTINCT i1, i2 FROM t1) v1;
ERR-42000(16241): MEMBER(G2N1): invalid number of column names specified :
SELECT /*+ NO_MERGE( _A1 ) */ * FROM ( SELECT /*+ USE_DISTINCT_HASH(50) FULL( _A2 ) */ DISTINCT "_A2"."I1", "_A2"."I2" FROM "PUBLIC"."T1"@LOCAL AS "_A2" ) AS "_A1"("I1")
*
ERROR at line 1:Workaround
Convert DISTINCT statement into GROUP BY statement.
If GROUP BY is not described within the query in which DISTINCT is described, then define all DISTINCT targets by using GROUP BY and omit DISTINCT.
gSQL> SELECT v1.i1 FROM ( SELECT i1, i2 FROM t1 GROUP BY i1, i2 ) v1; no rows selected.
20c.1.25 Patch Notes
ISSUE-4246 When using AT clause in EXEC SQL AUTOCOMMIT statement, then an error occurs.
Description
AT clause is not recognizable in EXEC SQL AT :db_name AUTOCOMMIT statement, so INVALID HANDLE error occurs.
Symptom
An error occurs in the following syntax.
EXEC SQL BEGIN DECLARE SECTION; char sConnName[10]="con"; EXEC SQL END DECLARE SECTION; EXEC SQL AT :sConnName AUTOCOMMIT ON;
[ERROR] SQL ERROR - SQLCODE : -2 SQLSTATE : HY000 ERROR MSG : Invalid handle FAILURE
Workaround
The patch is required.
ISSUE-4215 If the variable of using clause in EXECUTE IMMEDIATE is IN OUT type, then an error occurs.
Description
If the variable bind type of using clause in EXECUTE IMMEDIATE is IN OUT type, then an error occurs.
Symptom
An error occurs as follows.
CREATE OR REPLACE PROCEDURE proc_inout( p1 IN OUT INTEGER ) AS var1 INTEGER := 0; BEGIN DBMS_OUTPUT.PUT_LINE( 'p1 : ' || p1 ); var1 := p1; p1 := var1 + 10; END; / COMMIT; DECLARE var1 INTEGER; BEGIN var1 := 30; EXECUTE IMMEDIATE 'BEGIN proc_inout( ? ); END;' USING IN OUT var1; DBMS_OUTPUT.PUT_LINE( 'var1 : ' || var1 ); END; / ERR-07006(16098): bind type mismatch of parameter number (1) : BEGIN proc_inout( ? ); END; * ERROR at line 1: ERR-2F000(17041): execution fail : EXECUTE IMMEDIATE 'BEGIN proc_inout( ? ); END;' USING IN OUT var1; * ERROR at line 6:
Workaround
The patch is required.
ISSUE-4189 If creating the procedure whose parameter is consisted in an order of ref cursor, DB type, and executing it, then an error occurs.
Description
If creating the procedure whose parameter is consisted in an order of ref cursor, DB type, and executing it, then an error occurs.
Symptom
If a user calls the parameter as follows, then an error occurs.
CREATE OR REPLACE PROCEDURE p_test( p1 IN OUT SYS_REFCURSOR,
p2 IN INTEGER ) AS
BEGIN
IF p2 = 1 THEN
OPEN p1 FOR SELECT * FROM t1;
ELSIF p2 = 2 THEN
OPEN p1 FOR SELECT * FROM t2;
END IF;
END;
/
Procedure created.
DECLARE
refcur1 SYS_REFCURSOR;
BEGIN
p_test( refcur1 , 1 );
END;
/
ERR-2F000(17032): PSM compilation error :
(1) at (4:21): ERR-2F000(17068): wrong number or types of argumentsWorkaround
Change the order of defining the parameter when declaring the procedure.
CREATE OR REPLACE PROCEDURE p_test( p2 IN INTEGER,
p1 IN OUT SYS_REFCURSOR) AS
BEGIN
IF p2 = 1 THEN
OPEN p1 FOR SELECT * FROM t1;
ELSIF p2 = 2 THEN
OPEN p1 FOR SELECT * FROM t2;
END IF;
END;
/
Procedure created.
DECLARE
refcur1 SYS_REFCURSOR;
BEGIN
p_test( 1, refcur1 );
END;
/
Anonymous PL block executed.20c.1.24 Patch Notes
ISSUE-4178 DBMS_OUTPUT.PUT_LINE() is output twice.
Description
When DBMS_OUTPUT.PUT_LINE() calls a function including an actual parameter, DBMS_OUTPUT.PUT_LINE(), then the contents of the function are output twice.
Symptom
The function which is an actual parameter is executed twice when executing DBMS_OUTPUT.PUT_LINE, so DBMS_OUTPUT.PUT_LINE() within the function is also executed twice.
DECLARE
FUNCTION sub( p1 INTEGER ) RETURN INTEGER AS
BEGIN
DBMS_OUTPUT.PUT_LINE( 'p1 = ' || p1 );
RETURN p1;
END;
BEGIN
DBMS_OUTPUT.PUT_LINE( 'sub(x) = ' || sub(10) );
END;
/
p1 = 10
p1 = 10
sub(x) = 10
Anonymous PL block executed.Workaround
The patch is required.
ISSUE-4135 When a socket error occurs in cluster environment, then the system hangs.
Description
When a socket error occurs on a sender thread in cluster environment, then it can not send the message to the remote member, so the entire system hangs. It has been modified to failover the remote member when a socket error occurs on a sender/ receiver thread to solve this problem.
Symptom
When a network error occurs in cluster, then it checks the heartbeat and failover occurs. In this case, if an error occurs only in a specific socket which is not a heartbeat among threads sending and receiving message with the remote member, then it can not receive the response, so the entire system hangs.
Workaround
The patch is required.
ISSUE-4174 The performance of when the local caches of the global sequence are run out has been improved.
Description
The performance was severely downgraded when the local cache of the global sequence were run out, and this problem has been solved.
Symptom
All servers using sequences proceed the operations to secure local caches from the global cache when the local caches are run out. In this case, they try to competitively secure the remote cserver, so it may downgrade the performance severely.
Workaround
The patch is required.
ISSUE-4182 When restarting cyfile, the recovery may not be operated normally.
Description
If stopping and restarting cyfile while multiple transactions are simultaneously being processed, then the recovery may not be operated normally, and this problem has been solved.
Symptom
If stopping and restarting cyfile while transactions are being processed in multiple sessions, then it causes a trouble because the previously stored transaction is stored again in the data file.
Workaround
The patch is required.
20c.1.23 Patch Notes
ISSUE-4088 If the user explicitly performs OUT binding the bind parameter in the function including an out parameter in ODBC or JDBC, then an error occurs.
Description
If the user explicitly performs OUT binding the bind parameter in the function including an out parameter in ODBC or JDBC, then an error occurs.
Symptom
Though the function parameter is an out type and the user explicitly performed OUT binding the bind parameter according to the parameter type in ODBC program, but an error occurs.
CREATE OR REPLACE FUNCTION func1( a1 OUT INTEGER ) RETURN INTEGER IS BEGIN a1 := 110; RETURN 10; END; /
sRet = SQLPrepare( sStmt1,
(SQLCHAR*)"CALL FUNC1(?) INTO ?",
SQL_NTS );
sRet = SQLBindParameter( sStmt1,
1,
SQL_PARAM_OUTPUT,
SQL_C_SLONG,
SQL_INTEGER,
0,
0,
&sV1,
0,
&sV1Ind );
sRet = SQLBindParameter( sStmt1,
2,
SQL_PARAM_OUTPUT,
SQL_C_SLONG,
SQL_INTEGER,
0,
0,
&sV2,
0,
&sV2Ind ) );
sRet = SQLExecute( sStmt1 );Workaround
The patch is required.
ISSUE-4078 If the type with the default value is defined in the package field and another PSM object refers to it, then an error occurs.
Description
If TYPE with the field including the default value is defined in the package and another PSM object refers to it, then an error occurs.
Symptom
The following is an example of defining the type with the field including the default value in the package. If a procedure refers to it, then the syntax error occurs.
CREATE OR REPLACE PACKAGE pkg1 AS
TYPE rec IS RECORD( f1 VARCHAR(10) := 'abcde' );
v_rec rec;
v_int INTEGER;
END;
/
Package created.
CREATE OR REPLACE PROCEDURE proc1( p1 IN pkg1.rec ) AS
BEGIN
DBMS_OUTPUT.PUT_LINE( 'p1 : ' || p1.f1 );
END;
/
ERR-42000(16062): syntax error :
RETURN RETURN 'abcde'
^ ^
Error at line 1Workaround
The patch is required.
ISSUE-4081 TRACE_LONG_RUN_TIMER property has been added.
Description
TRACE_LONG_RUN_TIMER property has been added, and it controls the precision of the execution when using the following properties.
TRACE_LONG_RUN_CURSOR
TRACE_LONG_RUN_SQL
Symptom
N/A
Workaround
The patch is required.
ISSUE-4045 BROADCAST_INDEX_REBUILD_PROTOCOL property has been added.
Description
BROADCAST_INDEX_REBUILD_PROTOCOL property has been added, and it sets whether to simultaneously rebuild the indexes on all members when rebuilding the index in cluster environment.
Symptom
N/A
Workaround
The patch is required.
20c.1.22 Patch Notes
ISSUE-4062 If an actual parameter does not exist when the formal parameter is %TYPE and has the default value, then an error occurs.
Description
If the actual parameter is not specified when executing PSM object whose formal parameter datatype is %TYPE and which has the default value, then an error occurs.
Symptom
When omitting the actual parameter as follows, then wrong number of parameters error occurs.
CREATE TABLE t1( c1 INTEGER, c2 INTEGER );
Table created.
CREATE OR REPLACE FUNCTION func1( p1 IN t1.c1%type default 100,
p2 IN t1.c2%type default 200 )
RETURN INTEGER AS
BEGIN
RETURN p1 + p2;
END;
/
Function created.
SELECT func1( 10 ) FROM DUAL;Workaround
The patch is required.
20c.1.21 Patch Notes
ISSUE-4049 When an error occurs over the entire CYCLONE slave group in cluster environment, then the data error occurs.
Description
The data error occurs when two or more groups exist in cluster environment. If manipulating the data in the group whose sharding table is terminated while the partial service is available because all members in the specific group are terminated, then the query fails while CYCLONE is normally operated.
Symptom
If ERR-42000(16357) : must be accessible to at least one member of group 'GX' error occurs on slave side, then CYCLONE is normally operated instead of being terminated, so the data error may occur.
Workaround
The patch is required.
20c.1.20 Patch Notes
ISSUE-4039 It rounds up the result of the operation which uses PSM variable in Cursor For Loop, then returns it.
Description
It rounds up the result of the operation which uses PSM variable in SELECT statement of Cursor For Loop, then returns it.
Symptom
It rounds up the result of the operation which uses PSM variable in SELECT statement of Cursor For Loop, then returns it as follows.
DECLARE
v1 NUMBER;
v2 NUMBER;
BEGIN
v1 := 5.02;
v2 := 5.01;
FOR tmp IN ( SELECT v1 + v2 res FROM DUAL ) LOOP
DBMS_OUTPUT.PUT_LINE( tmp.res );
END LOOP;
END;
/
10
Anonymous PL block executed.Workaround
Specify DATA TYPE by using CAST function in PSM variable.
DECLARE
v1 NUMBER;
v2 NUMBER;
BEGIN
v1 := 5.02;
v2 := 5.01;
FOR tmp IN ( SELECT CASE(v1 as NUMBER) + v2 res FROM DUAL ) LOOP
DBMS_OUTPUT.PUT_LINE( tmp.res );
END LOOP;
END;
/
10.03
Anonymous PL block executed.ISSUE-4042 If performing commit statement while performing Cursor For Loop statement, then an error occurs.
Description
If performing commit statement while performing Cursor For Loop statement, then cursor not open error occurs.
Symptom
It closes the open cursor to perform commit, then commits it. Then, if closing the used cursor when terminating cursor for loop statement, cursor is not open error occurs because the cursor already has been closed beforehand.
BEGIN
FOR cur1 IN ( SELECT r_c1 FROM r FOR UPDATE ) LOOP
IF ( cur1.r_c1 = 2 ) THEN
COMMIT;
RETURN;
END IF;
END LOOP;
END;
/Workaround
Specify commit after cursor for loop statement is completed.
BEGIN
FOR cur1 IN ( SELECT r_c1 FROM r FOR UPDATE ) LOOP
IF ( cur1.r_c1 = 2 ) THEN
RETURN;
END IF;
END LOOP;
COMMIT;
END;
/ISSUE-4040 When using sequence after performing ALTER SEQUENCE in PSM, then the SELECT statement waits infinitely.
Description
When using sequence after performing ALTER SEQUENCE in PSM in cluster environment, then the SELECT statement which uses the sequence waits infinitely.
Symptom
When using sequence after performing ALTER SEQUENCE by using EXECUTE IMMEDIATE statement in PSM in cluster environment as follows, then the SELECT statement which uses the sequence waits infinitely.
DECLARE
curr_val INTEGER;
BEGIN
EXECUTE IMMEDIATE 'ALTER SEQUENCE seq CACHE 100';
EXECUTE IMMEDIATE 'SELECT seq.nextval FROM DUAL' INTO curr_val;
END;
/Workaround
Specify COMMIT as follows after performing ALTER SEQUENCE statement.
DECLARE
curr_val INTEGER;
BEGIN
EXECUTE IMMEDIATE 'ALTER SEQUENCE seq CACHE 100';
COMMIT;
EXECUTE IMMEDIATE 'SELECT seq.nextval FROM DUAL' INTO curr_val;
END;
/20c.1.19 Patch Notes
ISSUE-4024 Savepoint hang may occur when an error occurs at the remote member in cluster.
Description
The savepoint statement may hang in a specific situation of cluster.
Symptom
If the savepoint statement is performed after a specific member accessed by a transaction is abnormally terminated, then a hang may occur.
Workaround
The patch is required.
20c.1.18 Patch Notes
ISSUE-4021 The program is abnormally terminated during the fetch cursor in the embedded SQL.
Description
If the array size becomes bigger in FETCH CURSOR when reusing STANDING CURSOR in the embedded SQL, then the client program is abnormally terminated.
Symptom
If the array size becomes bigger during fetching the cursor when reusing the cursor as the following sample code, then the program is abnormally terminated.
int OpenCursor()
{
printf( "DECLARE CRS_ ... \n");
EXEC SQL DECLARE CRS_ CURSOR FOR
SELECT ename FROM emp;
if( sqlca.sqlcode != 0 )
goto FINISH_LABEL;
printf( "OPEN CRS_ ... \n");
EXEC SQL OPEN CRS_;
if( sqlca.sqlcode != 0 )
goto FINISH_LABEL;
return 0;
FINISH_LABEL:
return -1;
}
int FetchCursor()
{
EXEC SQL BEGIN DECLARE SECTION;
char name[100];
EXEC SQL END DECLARE SECTION;
int count = 0;
printf( "ARRAY SIZE: 1\n" );
printf( "FETCH CRS_ ... \n");
while( 1 )
{
EXEC SQL FETCH CRS_ INTO :name;
if( sqlca.sqlcode == 100 )
{
break;
}
if( sqlca.sqlcode != 0 )
goto FINISH_LABEL;
count++;
}
printf( "%d fetched.\n", count );
printf( "CLOSE CRS_ ... \n\n");
EXEC SQL CLOSE CRS_;
if( sqlca.sqlcode != 0 )
goto FINISH_LABEL;
return 0;
FINISH_LABEL:
return -1;
}
int FetchCursorArray()
{
EXEC SQL BEGIN DECLARE SECTION;
char name[20][100];
EXEC SQL END DECLARE SECTION;
int count = 0;
printf( "ARRAY SIZE: 20\n" );
printf( "FETCH CRS_ ... \n");
while( 1 )
{
EXEC SQL FETCH CRS_ INTO :name;
if( sqlca.sqlcode == 100 )
{
break;
}
if( sqlca.sqlcode != 0 )
goto FINISH_LABEL;
count += sqlca.sqlerrd[2];
}
printf( "%d fetched.\n", count );
printf( "CLOSE CRS_ ... \n\n");
EXEC SQL CLOSE CRS_;
if( sqlca.sqlcode != 0 )
goto FINISH_LABEL;
return 0;
FINISH_LABEL:
return -1;
}
int DoJob()
{
if( OpenCursor() == -1 ) goto FINISH_LABEL;
if( FetchCursor() == -1 ) goto FINISH_LABEL;
if( OpenCursor() == -1 ) goto FINISH_LABEL;
if( FetchCursorArray() == -1 ) goto FINISH_LABEL;
return 0;
FINISH_LABEL:
return -1;
}Workaround
Set the size of the host variable used in FETCH CURSOR same when reusing the standing cursor.
ISSUE-4017 Idle timeout feature for XA transaction has been added.
Description
XA_TRANSACTION_IDLE_TIMEOUT property has been added. It is the maximum idle time after the transaction is processed in XA, and the default value is 60 seconds.
Symptom
If the session is terminated when XA transaction has not been committed nor is rolled back, then it may infinitely waits because it is unable to return the resources in the transaction.
Workaround
The patch is required.
20c.1.17 Patch Notes
ISSUE-3994 The options for sqlca.sqlerrd[2] value in an embedded SQL are added.
Description
The number of rows which were executed just before are stored as sqlca.sqlerrd[2] value in the embedded SQL. However, the value can be selected between the accumulated total of rows or the number of fetched rows in FETCH CURSOR statement. For more information, refer to --cumulative of the precompiler gpec option.
Symptom
N/A
Workaround
The patch is required.
ISSUE-3981 include_synonyms property has been added in ODBC and JDBC.
Description
include_synonyms property has been added, and this property sets whether to include the synonym object in SQLColumns() of ODBC and DatabaseMetaData.getColumns() of JDBC.
Symptom
The synonym object information is not included in SQLColumns() of ODBC neither is included in DatabaseMetaData.getColumns() of JDBC.
Workaround
The patch is required.
ISSUE-3900 The uniqueness has been deleted from the cursor name in gpec.
Description
When using gpec, there is a constraint that the cursor name in a single gc file should be unique. gpec processes the gc file as an error with "The cursor name is already declared" message if the gc file declared multiple cursors with the same name. This creates useless codes and reduces the productivity, so the uniqueness has been deleted from the cursor name.
Symptom
When trying to declare a cursor selectively by using the conditional statement as follows, then gpec processes it as an error.
if( isTrue == 1 )
{
EXEC SQL DECLARE CURSOR CUR1 FOR
SELECT I1 FROM T1;
}
else
{
EXEC SQL DECLARE CURSOR CUR1 FOR
SELECT C1 FROM T2;
}When trying to select a cursor by using the conditional statement like as the example, then the cursor name should be declared different and the additional conditional statement should be added to the subordinate code.
if( isTrue == 1 )
{
EXEC SQL DECLARE CURSOR CUR1 FOR
SELECT I1 FROM T1;
}
else
{
EXEC SQL DECLARE CURSOR CUR2 FOR
SELECT C1 FROM T2;
}
if( isTrue == 1 )
{
EXEC SQL OPEN CUR1;
}
else
{
EXEC SQL OPEN CUR2;
}Workaround
The patch is required.
ISSUE-3679 ODBC API trace feature has been added.
Description
The feature to trace ODBC API has been added, so TRACE and TRACEFILE are also added to the connection property.
Symptom
N/A
Workaround
The patch is required.
20c.1.16 Patch Notes
ISSUE-3958 SYNONYM information is not found in SQLTables() of ODBC nor in DatabaseMetaData.getTables() of JDBC.
Description
The information about TABLE, VIEW and SYNONYM should be found in both SQLTables() of ODBC and in DatabaseMetaData.getTables() of JDBC, but currently the SYNONYM information is not found. The SYNONYM information can be found through each function.
Symptom
When calling SQLTables() of ODBC or DatabaseMetaData.getTables() of JDBC, the information about TABLE and VIEW are found, but the SYNONYM information is not found.
Workaround
Use the following SQL statement to find the SYNONYM information.
gSQL> SELECT * FROM DICTIONARY_SCHEMA.ALL_SYNONYMS;
ISSUE-3954 When using SELECT INTO ARRAY clause in an embedded SQL, the result is wrong.
Description
The result value varies upon the number of FETCHED ROW when using SELECT INTO ARRAY clause.
Symptom
The following is a code which uses SELECT INTO ARRAY clause with the array size 3.
EXEC SQL BEGIN DECLARE SECTION;
int sI1[3];
char sI2[3][10];
EXEC SQL END DECLARE SECTION;
SELECT I1, I2 INTO :sI1, :sI2 FROM TEST;
printf( "Fetched Count: %d\n", sqlca.sqlerrd[2] );
if( sqlca.sqlcode != 0 )
{
printf( "SQLCODE: %d\n SQLSTATE: %s\n ERROR MSG: %s\n\n",
sqlca.sqlcode, SQLSTATE, sqlca.sqlerrm.sqlerrmc );
}If the total number of the entire ROW is one, then sqlca.sqlcode value should have been 0, but the actual sqlca.sqlcode value is -23034, and "SELECT INTO returns too many rows" error occurs.
Workaround
The patch is required.
ISSUE-3950 If performing an unsupported PSM query to the user by using JDBC/ ODBC, then the server is abnormally terminated.
Description
If performing a PSM query which is registered in the plan cache though but is not supported through JDBC/ ODBC to the user, then an error occurs, and this error has been fixed so that those queries are not performed.
Symptom
If performing the query registered in the plan cache through ODBC as follows, then the server is abnormally terminated.
sRet = SQLExecDirect( sStmt,
(SQLCHAR*)"PROCEDURE \"PUBLIC\".\"PROC1\" AS BEGIN NULL; END;",
SQL_NTS )
== STL_SUCCESS );If performing the query registered in the plan cache through JDBC as follows, then the server is abnormally terminated.
Statement sStmt = aCon.createStatement();
sStmt.execute("PROCEDURE \"PUBLIC\".\"PROC1\" AS BEGIN NULL; END;);Workaround
Perform the correct query through ODBC as follows.
sRet = SQLExecDirect( sStmt,
(SQLCHAR*)"CALL PROC1;",
SQL_NTS )
== STL_SUCCESS );Perform the correct query through JDBC as follows.
Statement sStmt = aCon.createStatement();
sStmt.execute("CALL PROC1");ISSUE-3959 An access to the deleted handle occurs while synchronizing the global sequence.
Description
An access to the deleted statement handle occurs while it waits for the response from the protocol of the previously used executors as a preliminary work before synchronizing the global sequence.
Symptom
The server is abnormally terminated while trying to access the deleted statement handle.
Workaround
The patch is required.
20c.1.15 Patch Notes
ISSUE-3923 The server is abnormally terminated when using the stored function in group by clause in SELECT statement.
Description
An error occurs when using the stored function in group by clause in SELECT statement, and this error has been fixed.
Symptom
The server is abnormally terminated when using the stored function in group by clause in SELECT statement as follows.
gSQL>
SELECT func1( r_c1, r_c2 )
, SUM( r_c1 )
FROM r
GROUP BY func1( r_c1, r_c2 );Workaround
The patch is required.
20c.1.14 Patch Notes
ISSUE-3909 Features which correspond to the national strategic item are not supported.
Description
The following functions are not supported due to the restriction according to the policy for the national strategic item.
ENCRYPT_STR()
DECRYPT_STR()
Symptom
N/A
Workaround
The patch is required.
ISSUE-3917 An error occurs when executing a procedure in XA environment.
Description
A procedure or an anonymous block is not executable in XA environment, and this error has been fixed.
Symptom
The following error occurs when executing a procedure in XA environment.
gSQL> CALL proc1(); ERR-42000(18009): The command cannot be executed when global transaction is in the ACTIVE state
Workaround
The patch is required.
ISSUE-3913 An option which can specify the permission in DBMS_OUTPUT.SET_LOG() procedure has been added.
Description
It is enabled to specify the permission in DBMS_OUTPUT.SET_LOG() procedure.
gSQL> CALL DBMS_OUTPUT.SET_LOG('a.txt', 640);
Procedure Call complete.Symptom
N/A
Workaround
The patch is required.
20c.1.13 Patch Notes
ISSUE-3884 When repeatedly executing connect in a process while using JDBC, then fd keeps increasing.
Description
When repeatedly executing connect in a process while using JDBC, then pipe and eventpoll fd keep increasing so "can not open files" error occurs.
Symptom
fd is increased when repeatedly executing connect as follows, and it can be seen through lsof.
while (true)
{
Connection con = DriverManager.getConnection("jdbc:goldilocks://127.0.0.1:11100/test", "TEST", "test");
...
con.close();
con = null;
}% lsof -p 359414 | awk '{print $9}' | sort | uniq -c | sort -rn
192 pipe
96 [eventpoll]
65 type=STREAM
...% lsof -p 359414 | awk '{print $9}' | sort | uniq -c | sort -rn
224 pipe
112 [eventpoll]
81 type=STREAM
...Workaround
The patch is required.
ISSUE-3869 The result of row status is wrong when executing array fetch in ODBC.
Description
When executing array fetch in ODBC, the status value of the row can be seen after calling SQLFetch function. If the returned value of SQLFetch is not SQL_SUCCESS, then it is required to check the row status or the diagnostic. However, even when the returned value of SQLFetch is SQL_SUCCESS_WITH_INFO, the diagnostic message is seen but all row statuses are SQL_ROW_SUCCESS, which are wrong.
Symptom
The following is the string data which can not be converted to number.
CREATE TABLE T1 ( I1 VARCHAR(10) ); INSERT INTO T1 VALUES ( '1' ); INSERT INTO T1 VALUES ( '2A' ); INSERT INTO T1 VALUES ( '3' ); INSERT INTO T1 VALUES ( 'AB' ); COMMIT;
The following is a part of an example of executing array fetch after converting the data above to the numeric type.
sRet = SQLPrepare( sStmt,
(SQLCHAR*)"SELECT I1 FROM T1 ORDER BY I1",
SQL_NTS );
sRet = SQLBindCol( sStmt,
1,
SQL_C_LONG,
sI1,
sizeof(SQLINTEGER),
sI1Ind );
sRet = SQLSetStmtAttr( sStmt,
SQL_ATTR_ROW_BIND_TYPE,
(SQLPOINTER)SQL_BIND_BY_COLUMN,
0 );
sRet = SQLSetStmtAttr( sStmt,
SQL_ATTR_ROW_STATUS_PTR,
sRowStatus,
0 );
sRet = SQLExecute( sStmt );
sRet = SQLFetch( sStmt );
switch( sRet )
{
case SQL_SUCCESS_WITH_INFO:
for( i = 0; i < sFetched; i++ )
printf( "row status: %d\n", sRowStatus[i]);
break;
default
break;
}The data can not be converted to number is included, but all row statuses are SQL_ROW_SUCCESS.
row status: 0 row status: 0 row status: 0 row status: 0
Workaround
The patch is required.
20c.1.12 Patch Notes
ISSUE-3859 If the size of an array is smaller than the number of records when using an array in an embedded SQL, SELECT INTO clause, then it should be processed as an error.
Description
Currently, if the size of an array is smaller than the number of fetched records when using an array in SELECT INTO statement of an embedded SQL, no further action is taken. In this case, if the size of an array is smaller than the number of records, then the application can not recognize whether additional records exist. Therefore, if the size of an array is smaller than the number of fetched records, it should be processed as an error.
Symptom
gSQL> SELECT COUNT(*) FROM TEST;
COUNT(*)
--------
20
1 row selected.EXEC SQL BEGIN DECLARE SECTION; int c1[10]; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT C1 INTO :c1 FROM TEST; printf( "SQLCODE: %d\n", sqlca.sqlcode );
When the size of an array is smaller than the number of fetched records as above, then sqlca.sqlcode is normally processed, which is 0.
Workaround
The patch is required.
ISSUE-3846 Core occurs if the property values between members are different in cluster environment when restarting.
Description
Some property values should be same between all members in the cluster environment. If those property values are different between members when restarting, then cserver dies.
Symptom
It compares the property values which are supposed to be same between all members when restarting members in the cluster environment, and if there is a member with the different property value, then cserver dies.
The properties to have same values in the cluster environment are as follows.
gSQL> SELECT PROPERTY_NAME FROM X$PROPERTY@LOCAL WHERE CLUSTER_SCOPE = 'GLOBAL'; PROPERTY_NAME --------------------------------------- TRANSACTION_TABLE_SIZE NLS_DATE_FORMAT NLS_TIME_FORMAT NLS_TIME_WITH_TIME_ZONE_FORMAT NLS_TIMESTAMP_FORMAT NLS_TIMESTAMP_WITH_TIME_ZONE_FORMAT DISABLE_DDL_CDC_GIVEUP DISABLE_UPDATE_PK_CDC_GIVEUP DATABASE_ACCESS_MODE IN_DOUBT_DECISION DATABASE_TEST_OPTION DDL_AUTOCOMMIT SHARED_REQUEST_QUEUE_COUNT CLUSTER_CONNECTION CDISPATCHER_THREADS MAX_NODE_COUNT MAX_GROUP_COUNT CLUSTER_COMMIT_STREAM_ISOLATION DEFAULT_GLOBAL_SECONDARY_INDEX_CREATION TRACE_LOG_MSGBUF_SIZE PROPERTY_NAME ---------------------------------------- DEFAULT_SHARDING LOCATOR_QUERY_TIMEOUT DISALLOWED_PROTOCOL_TARGETTYPE DISALLOWED_PROTOCOL_TARGETTYPE_WITH_NAME DISALLOWED_PROTOCOL_TARGETTYPE_WITH_ALL FAILOVER_DRIVER_MEMBER CDISPATCHER_SYNC_THREADS CLUSTER_SPLIT_BRAIN_RETRY_COUNT CLUSTER_TEST_SBR_POLICY COORDINATOR_COMMIT_WRITE_MODE OFFLINE_MEMBER_AFTER_FAILOVER RECYCLEBIN CDISPATCHER_LOCKLESS_THREADS 33 rows selected.
Workaround
Modify property values of members to be same, then restart it.
ISSUE-3842 gpec omits EXEC SQL WHENEVER NOT FOUND statement in a specific DML statement.
Description
Processing WHENEVER EXCEPTION should be applied to all DML statements when gpec converts the embedded SQL code to C code. However, actually it is applied only to SELECT INTO clause and FETCH clause.
Symptom
gc file before transcoding
EXEC SQL WHENEVER SQLERROR DO callErrorLog( param->param, 0, sqlca.sqlcode, sqlca.sqlerrd[2] );
EXEC SQL WHENEVER NOT FOUND DO callLog( param->param, 0, sqlca.sqlcode, sqlca.sqlerrd[2] );
EXEC SQL DELETE FROM TEST
WHERE ENUMBER = :in.enumber
AND ENAME = :in.ename;c file after transcoding
DBESQL_Execute(NULL, &sqlargs); if(sqlca.sqlcode < 0) callErrorLog(param->param, 0, sqlca.sqlcode, sqlca.sqlerrd[2]);
The code is created without an action code for NOT FOUND.
Workaround
Directly write NOT FOUND processing in gc file as follows.
EXEC SQL DELETE FROM TEST
WHERE ENUMBER = :in.enumber
AND ENAME = :in.ename;
if(sqlca.sqlcode == 0) callLog( ... );ISSUE-3830 XA connection is not available as a default context in embedded SQL.
Description
Use the default context or create the named context to use XA in the embedded SQL.
If executing xa open without the connection name while any connection is not created in the default context when using XA with the default context, then XA connection is supposed to be connected to the default context. However, in practice, it is not connected to the default context.
Symptom
If creating xa connection without the connection name while any connection does not exist in the default context as follows, then XA connection is supposed to be connected to the default context. Also, it should be able to execute SQL statement with the default context.
int main( int argc, char** argv)
{
xa_switch_t * sXaSwitch;
sXaSwitch = SQLGetXaSwitch();
if( (sXaSwitch->xa_open_entry)( "DSN=GOLDILOCKS;UID=test;PWD=test", 0, TMNOFLAGS ) != XA_OK )
{
GOLDILOCKS_SQL_THROW( GOLDILOCKS_FINISH_LABEL );
}
EXEC SQL DROP TABLE IF EXISTS DEPOSIT;
... /* Ellipsis */
}When executing the program created with the code above, then invalid handle error occurs.
[ERROR] SQL ERROR - SQLCODE : -2 SQLSTATE : HY000 ERROR MSG : Invalid handle
Workaround
Create the named context, and use it.
20c.1.11 Patch Notes
ISSUE-3371 Xa transaction is supported in cluster environment.
Description
It supports Xa transaction in cluster environment.
Symptom
N/A
Workaround
The patch is required.
ISSUE-3821 If it fails to use the large page when allocating the shared segment, then the feature to use the normal page is required.
Description
USE_LARGE_PAGES property supports 0 and 1. When it is set to 0, it does not use the large page, and when it is set to 1, then it uses the large page. If it fails to allocate the shared memory when it is set to 1, then an error occurs.
Therefore, the feature to use the normal page when it fails to allocate the shared memory in the large page has been added.
Symptom
When USE_LARGE_PAGE is set to 2, then it tries to allocate the shared memory in the large page first, and if it fails, then it allocates the shared memory in the normal page.
gSQL> alter tablespace mem_data_tbs add datafile 'test1.dbf' size 5G; ERR-HY000(11042): Not enough memory : sthCreate() returned errno(12) gSQL> alter system set use_large_pages = 2; System altered. gSQL> alter tablespace mem_data_tbs add datafile 'test1.dbf' size 5G; Tablespace altered.
Workaround
The patch is required.
ISSUE-3798 When performing DML with protocol method by using synonym in cluster, the system is abnormally terminated or the query processing is infinitely repeated.
Description
If processing DML by a using synonym when the synonym is defined in a schema which is different from the target object in cluster, then the system is abnormally terminated or the query processing is infinitely repeated.
Symptom
When performing insert through a synonym after defining the table and the synonym as follows, then the query processing is infinitely repeated.
gSQL> CREATE USER u1 IDENTIFIED BY u1; User created. gSQL> GRANT ALL PRIVILEGES TO u1; Grant succeeded. gSQL> CREATE USER u2 IDENTIFIED BY u2; User created. gSQL> GRANT ALL PRIVILEGES TO u2; Grant succeeded. gSQL> \CONNECT u2 u2 gSQL> CREATE TABLE u1.t_cloned ( c1 NUMBER ) CLONED; Table created. gSQL> CREATE SYNONYM u2.syn FOR u1.t_cloned; Synonym created. --# hang gSQL> INSERT INTO u2.syn VALUES( 1 );
Workaround
Do not use a synonym when performing DML.
INSERT INTO u1.t_cloned VALUES( 2 );
Or, execute DML based on a query complying with the following constraints in case for delete, update and select for update except for insert.
Do not include a subquery expression nor a non-deterministic expression.
Do not use OFFSET/ LIMIT statement.
Do not use ROWNUM.
Limit UPDATE for a sharding key.
20c.1.10 Patch Notes
ISSUE-3768 Executing IN function during prepare/ execution, then the system is intermittently and abnormally terminated.
Description
When executing the query two or more times after preparing during preparing/ executing the query whose number of the value part of IN function is 10 or more, then the system is intermittently and abnormally terminated.
Symptom
When executing the query two or more times after preparing it when the table was created as follows, then the system is intermittently and abnormally terminated.
gSQL> CREATE TABLE t1 ( c1 INTEGER, c2 VARCHAR(1) );
Table created.
gSQL> INSERT INTO t1 VALUES ( 1, 'A' );
1 row created.
gSQL> INSERT INTO t1 VALUES ( 2, 'B' );
1 row created.
gSQL> CREATE INDEX idx_t1 ON t1 ( c1 );
Index created.
gSQL> \var v1 INTEGER
gSQL> \prepare sql
SELECT *
FROM t1
WHERE c1 = :v1
AND c2 IN ( 'P','T','X','C','W','B','L','M','H','J','Z','G','D' );
2 3 4 5
SQL prepared.
gSQL> \exec
no rows selected.
gSQL> SELECT COUNT(*) FROM t1;
COUNT(*)
--------
2
1 row selected.
gSQL> \exec
no rows selected.
gSQL> \exec :v1 := 2
gSQL> \exec
C1 C2
-- --
2 B
1 row selected.
gSQL> SELECT COUNT(*) FROM t1;
COUNT(*)
--------
2
1 row selected.When repeatedly executing exec, then the system is abnormally terminated.
The location of exec error is not fixed.
gSQL> \exec C1 C2 -- -- 2 B 1 row selected.
Workaround
Configure the number of values in value part of IN function less than 10 to prevent IN_HASH from applying.
\prepare sql SELECT * FROM t1 WHERE c1 = :v1 AND c2 IN ( 'P','T','X','C','W','B','L','M','H','J','Z','G','D' );
When number of values in value part of IN function is more than 10 as above, then divide IN functions and bind it with OR.
\prepare sql
SELECT *
FROM t1
WHERE c1 = :v1
AND (
c2 IN ( 'P','T','X','C','W','B' )
OR
c2 IN ( 'L','M','H','J','Z','G','D' )
);ISSUE-3766 When checking the availability of the remote method of ROWNUM, then checking for the subquery filter is omitted.
Description
The query result may have an error because the subquery filter is dropped in the following query.
SELECT r_sk
, r_nk
FROM r
WHERE r_sk = 202
AND r_nk = ( SELECT r_nk + 999 FROM dual )
AND ROWNUM < 5When all of the following conditions exist as in the query above, then the subquery filter disappears.
r_sk = 202
The sharding key condition which determines a single remote server
r_nk = ( SELECT r_nk + 999 FROM dual )
The subquery condition which can not be unnested
ROWNUM < 5
The ROWNUM condition which limits the number
Symptom
The query result is supposed not to exist after building the table as follows, but actually the query result is created because the subquery filter was dropped.
CREATE TABLE r
(
r_sk INTEGER,
r_nk INTEGER
) SHARDING BY RANGE(r_sk)
SHARD s1 VALUES LESS THAN ( 200 ) AT CLUSTER GROUP g1,
SHARD s2 VALUES LESS THAN ( 300 ) AT CLUSTER GROUP g2,
SHARD s3 VALUES LESS THAN ( MAXVALUE ) AT CLUSTER GROUP g3
;
INSERT INTO r VALUES ( 101, 101 );
INSERT INTO r VALUES ( 202, 202 );
INSERT INTO r VALUES ( 303, 303 );
COMMIT;The query result should not exist.
\explain plan
SELECT r_sk
, r_nk
FROM r
WHERE r_sk = 202
AND r_nk = ( SELECT r_nk + 999 FROM dual )
AND ROWNUM < 5
;
R_SK R_NK
---- ----
202 202
1 row selected.
>>> start print plan
< Execution Plan >
==================================================================================================
| IDX | NODE DESCRIPTION | ROWS |
--------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | 1 |
| 1 | QUERY BLOCK ("$QB_IDX_2") | 1 |
| 2 | PLAN BASED CLUSTER | REMOTE ONLY 1 |
| 3 | COUNT | 0 |
| 4 | TABLE ACCESS ("R") | 0 |
==================================================================================================
1 - TARGET : R.R_SK, R.R_NK
2 - SQL : SELECT /*+ FULL( _A1 ) */ "_A1"."R_SK", "_A1"."R_NK" FROM "PUBLIC"."R"@LOCAL AS "_A1" WHERE "_A1"."R_SK" = :_V0 AND ROWNUM < :_V1
TARGET DOMAIN : G2(G2N1,G2N2) 1 rows
3 - STOP KEY FILTER : ROWNUM < 5
4 - RANGE SHARD ( # 3 )
READ COLUMN : R.R_SK, R.R_NK
PHYSICAL FILTER : R.R_SK = 202
<<< end print planWorkaround
Change ROWNUM condition to LIMIT condition as follows.
\explain plan
SELECT r_sk
, r_nk
FROM r
WHERE r_sk = 202
AND r_nk = ( SELECT r_nk + 999 FROM dual )
LIMIT 4
;
no rows selected.
>>> start print plan
< Execution Plan >
==================================================================================================
| IDX | NODE DESCRIPTION | ROWS |
--------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | 0 |
| 1 | QUERY BLOCK ("$QB_IDX_2") | 0 |
| 2 | PLAN BASED CLUSTER | REMOTE ONLY 0 |
| 3 | TABLE ACCESS ("R") | 0 |
| 4 | SUB QUERY LIST | |
| 5 | INLINE_VIEW ("$V5") | 1 |
| 6 | QUERY BLOCK ("$QB_IDX_6") | 1 |
| 7 | FAST DUAL ACCESS ("DUAL") | 1 |
==================================================================================================
1 - TARGET : R.R_SK, R.R_NK
2 - SQL : SELECT /*+ FULL( _A1 ) */ "_A1"."R_SK", "_A1"."R_NK" FROM "PUBLIC"."R"@LOCAL AS "_A1" WHERE "_A1"."R_SK" = :_V0
TARGET DOMAIN : G2(G2N1,G2N2) 1 rows
POST FILTER : R.R_NK = $V5.$C0
3 - RANGE SHARD ( # 3 )
READ COLUMN : R.R_SK, R.R_NK
PHYSICAL FILTER : R.R_SK = 202
5 - COLUMN : {R.R_NK} + 999 AS $C0
6 - TARGET : {R.R_NK} + 999
7 - READ COLUMN : NOTHING
<<< end print planISSUE-3751 When prepare/ execution, the accumulated information about rows of plans under the cluster puller is output.
Description
When prepare/ execute the query including the cluster puller plan, then the number of result rows for the cluster puller and its subordinate nodes are accumulated whenever it is executed, and output.
It is the matter related to counting result rows, and it does not affect the query execution.
Symptom
When executing the query two times or more after creating the following table and preparing the query, then the wrong result is output.
gSQL> CREATE TABLE T1 ( SK INT, C1 INT ) SHARDING BY HASH ( SK );
Table created.
gSQL> INSERT INTO T1 VALUES ( 1, 10 );
1 row created.
gSQL> \SET AUTOTRACE ON
gSQL> \PREPARE SQL SELECT SUM( SK ) FROM T1 GROUP BY C1;
SQL prepared.
gSQL> \EXEC
SUM( SK )
---------
1
1 row selected.
>>> start print plan
< Execution Plan >
=========================================================================
| IDX | NODE DESCRIPTION | ROWS |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | 1 |
| 1 | QUERY BLOCK ("$QB_IDX_2") | 1 |
| 2 | SINGLE CLUSTER | LOCAL/REMOTE 1 |
| 3 | SELECT STATEMENT | 1 |
| 4 | QUERY BLOCK ("$QB_IDX_2") | 1 |
| 5 | GROUP HASH INSTANT | 1 |
| 6 | TABLE ACCESS ("T1" AS _A1) | 1 |
=========================================================================
1 - TARGET : SUM( T1.SK )
2 - SQL : SELECT /*+ USE_GROUP_HASH(10) FULL( _A1 ) */ "_A1"."C1", SUM( "_A1"."SK" ) FROM "PUBLIC"."T1"@LOCAL AS "_A1" GROUP BY "_A1"."C1"
TARGET DOMAIN : G1(G1N1) 1 rows, G2(G2N1) 0 rows, G3(G3N1) 0 rows
RE-GROUPING
GROUP KEY : T1.C1
AGGREGATION : SUM( SUM( T1.SK ) )
4 - TARGET : _A1.C1, SUM( _A1.SK )
5 - GROUP KEY : _A1.C1
RECORD COLUMN : SUM( _A1.SK )
READ KEY COLUMN : _A1.C1
READ RECORD COLUMN : SUM( _A1.SK )
6 - HASH SHARD ( # 3 )
READ COLUMN : _A1.SK, _A1.C1
<<< end print plan
gSQL> \EXEC
SUM( SK )
---------
1
1 row selected.
>>> start print plan
< Execution Plan >
=========================================================================
| IDX | NODE DESCRIPTION | ROWS |
-------------------------------------------------------------------------
| 0 | SELECT STATEMENT | 1 |
| 1 | QUERY BLOCK ("$QB_IDX_2") | 1 |
| 2 | SINGLE CLUSTER | LOCAL/REMOTE 1 |
| 3 | SELECT STATEMENT | 2 |
| 4 | QUERY BLOCK ("$QB_IDX_2") | 2 |
| 5 | GROUP HASH INSTANT | 2 |
| 6 | TABLE ACCESS ("T1" AS _A1) | 2 |
=========================================================================
1 - TARGET : SUM( T1.SK )
2 - SQL : SELECT /*+ USE_GROUP_HASH(10) FULL( _A1 ) */ "_A1"."C1", SUM( "_A1"."SK" ) FROM "PUBLIC"."T1"@LOCAL AS "_A1" GROUP BY "_A1"."C1"
TARGET DOMAIN : G1(G1N1) 1 rows, G2(G2N1) 0 rows, G3(G3N1) 0 rows
RE-GROUPING
GROUP KEY : T1.C1
AGGREGATION : SUM( SUM( T1.SK ) )
4 - TARGET : _A1.C1, SUM( _A1.SK )
5 - GROUP KEY : _A1.C1
RECORD COLUMN : SUM( _A1.SK )
READ KEY COLUMN : _A1.C1
READ RECORD COLUMN : SUM( _A1.SK )
6 - HASH SHARD ( # 3 )
READ COLUMN : _A1.SK, _A1.C1
<<< end print planWorkaround
The patch is required.
20c.1.9 Patch Notes
ISSUE-3752 If the targets of the query are not all groups but are some groups when using the global connection, then the client may be abnormally terminated.
Description
When using the global connection, the shard information only about groups used in the query are transferred but not about all groups. Therefore, it may refer to the wrong memory when only part of information about the group is transferred. In this case, the client may be abnormally terminated.
When this patch is applied, then the client should be rebuilt.
Symptom
When performing the query in the global connection environment after creating the following table, then the client is abnormally terminated.
gSQL> create table t1 ( i1 integer ) sharding by (i1); Table created. gSQL> insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20),(21),(22),(23),(24); 24 rows created. gSQL> commit; Commit complete. gSQL> select * from t1@g2; I1 -- 12 13 14 15 16 17 18 19 8 rows selected. gSQL> select * from t1@g3; I1 -- 8 9 10 11 20 21 22 23 8 rows selected.
gSQL> \var v1 integer; gSQL> \exec :v1 := 8 gSQL> \prepare sql select * from t1 where i1 = :v1 and i1 in (8,12); SQL prepared.
Client is abnormally terminated.
gSQL> \exec
Workaround
Do not use the global connection.
20c.1.8 Patch Notes
ISSUE-3726 When repeatedly calling Statement.getUpdateCount() in JDBC, the update count should be initialized.
Description
Statement.getUpdateCount() in JDBC can be called only once per a result as quoted below.
Retrieves the current result as an update count; if the result is a ResultSet object or there are no more results, -1 is returned. This method should be called only once per result.
When repeatedly calling Statement.getUpdateCount(), then it returns -1.
Symptom
When repeatedly calling Statement.getUpdateCount(), then it keeps returning the same values.
Workaround
The patch is required.
20c.1.7 Patch Notes
ISSUE-3716 Performing view merging when a sequence exists in the superordinate query and order by exists within a view leads to the wrong result.
Description
view merging should not be performed when a sequence exists in the superordinate query, but view merging is performed in reality, and it leads to the wrong result.
Symptom
Performing the following query leads to the wrong result.
CREATE SEQUENCE seq1;
CREATE TABLE t1 ( col1 INTEGER, col2 INTEGER );
INSERT INTO t1 VALUES(1,1);
INSERT INTO t1 VALUES(2,2);
INSERT INTO t1 VALUES(3,3);
\EXPLAIN PLAN
SELECT seq1.nextval
FROM ( SELECT *
FROM t1
ORDER BY col1 )v1;
NEXTVAL
-------
NULL
NULL
NULL
3 rows selected.Workaround
Add NO_MERGE( view_name) hint.
\EXPLAIN PLAN
SELECT /*+ NO_MERGE(v1) */
seq1.nextval
FROM ( SELECT *
FROM t1 )v1;
NEXTVAL
-------
1
2
3
3 rows selected.
< Execution Plan >
========================================================================
| IDX | NODE DESCRIPTION |
------------------------------------------------------------------------
| 0 | SELECT STATEMENT |
| 1 | QUERY BLOCK ("$QB_IDX_2") |
| 2 | INLINE_VIEW ("V1") |
| 3 | QUERY BLOCK ("$QB_IDX_5") |
| 4 | SORT INSTANT |
| 5 | TABLE ACCESS ("T1") |
========================================================================
1 - TARGET : NEXTVAL(SEQ1)
2 - COLUMN : V1.DUMMY_COL AS DUMMY_COL
3 - TARGET : NOTHING
4 - SORT KEY : "T1.COL1 ASC NULLS LAST"
5 - READ COLUMN : T1.COL1
<<< end print planISSUE-3707 The process is abnormally terminated when a target view of the simple view merging is on the right side of the left outer join, and only one constant exists in the select list of that view.
Description
The process is abnormally terminated when the following conditions are satisfied.
A left outer join exists within a view.
The right side of the left outer join is a view again, and only one constant exists in the select list of that view.
Symptom
The process is abnormally terminated when processing the following query.
\EXPLAIN PLAN
SELECT COUNT(*)
FROM ( SELECT t1.col1
FROM t1 LEFT OUTER JOIN ( SELECT 1 as col1 FROM dual ) v1
ON v1.col1 = t1.col1
) AAA;Workaround
Add NO_MERGE( view_name) hint.
\EXPLAIN PLAN
SELECT COUNT(*)
FROM ( SELECT /*+ NO_MERGE(v1) */ t1.col1
FROM t1 LEFT OUTER JOIN ( SELECT 1 as col1 FROM dual ) v1
ON v1.col1 = t1.col1
) AAA;ISSUE-3699 Recovery fails due to the lack of the space when restarting the database.
Description
The information about transactions of the record and the key is stored in RTS space in table data pages and the index leaf pages. If multiple transactions simultaneously update a single page, then RTS can be expanded. The page compaction is performed to reuse the space of dropped records, and RTS is reduced at this moment when it is possible.
The error occurs when the space is not expanded because it does not satisfy the condition to reduce RTS at the recovery though the space was made by reducing RTS when compacting pages during the service.
Symptom
The recovery fails due to the lack of the page space when restarting the database.
Workaround
The patch is required.
ISSUE-3705 Wrong transitive predicate is created.
Description
When LIKE, NOT LIKE predicate appears after the transitive predicate was created, then the wrong transitive predicate is created.
Symptom
The following is an example of SQL which causes an error.
\EXPLAIN PLAN SELECT r_c1, s_c1 FROM r, s WHERE r_c1 = 'A' 1 The filter creating the transitive predicate is described beforehand. AND s_c2 LIKE '99%' 2 LIKE or NOT LIKE function exists AND r_c1 = s_c1 3 A equi join condition exists. ; no rows selected. >>> start print plan < Execution Plan > ======================================================================== | IDX | NODE DESCRIPTION | ------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | QUERY BLOCK ("$QB_IDX_2") | | 2 | NESTED JOIN (INNER JOIN) | | 3 | INDEX ACCESS ("S", "S_PRIMARY_KEY_INDEX") | | 4 | INDEX ACCESS ("R", "IDX_R_C1") | ======================================================================== 1 - TARGET : R.R_C1, S.S_C1 2 - JOINED COLUMN : R.R_C1, S.S_C1 3 - READ INDEX COLUMN : S.S_C1 READ TABLE COLUMN : S.S_C2 MIN RANGE : S.S_C1 = 'A' AND S.S_C1 LIKE '99%' MAX RANGE : S.S_C1 = 'A' AND S.S_C1 LIKE '99%' LOGICAL KEY FILTER : S.S_C1 LIKE '99%' LOGICAL TABLE FILTER : S.S_C2 LIKE '99%' FETCH ONE ROW 4 - READ INDEX COLUMN : R.R_C1 MIN RANGE : R.R_C1 = {S.S_C1} AND R.R_C1 = 'A' MAX RANGE : R.R_C1 = {S.S_C1} AND R.R_C1 = 'A' <<< end print plan
Workaround
Describe the predicate which includes LIKE, NOT LIKE functions beforehand as follows.
\EXPLAIN PLAN SELECT r_c1, s_c1 FROM r, s WHERE s_c2 LIKE '99%' AND r_c1 = 'A' AND r_c1 = s_c1 ; R_C1 S_C1 ---- ---- A A 1 row selected.
ISSUE-3697 Type qualifier is not output in gpec.
Description
When gpec converts gc file which uses the storage class or the type qualifier in front of the embedded SQL pseudo type into c file, then the storage class and the type qualifier are omitted.
Symptom
The following is a part of gc file.
EXEC SQL BEGIN DECLARE SECTION; static VARCHAR gUid[10]; static char gPwd[10]; EXEC SQL END DECLARE SECTION;
The following is a part of c file which was converted by gpec from gc file created above.
/* EXEC SQL BEGIN DECLARE SECTION; */
#line 16 "test.gc"
/* static VARCHAR gUid[10]; */
struct { int len; char arr[10]; } gUid;
#line 17 "test.gc"
static char gPwd[10];
/* EXEC SQL END DECLARE SECTION; */
#line 19 "test.gc"The static operator is dropped because static Varchar gUid[10] code is converted into C code.
Workaround
The patch is required.
ISSUE-3698 getUpdateCount of JDBC statement class returns an abnormal value.
Description
When executing INSERT INTO statement which used QUERY, then it returns 0 as the result value of getUpdateCount().
Symptom
Statement stmt = conn.createStatement(); stmt.executeUpdate( "CREATE TABLE TEST ( I1 INTEGER )" ); stmt.executeUpdate( "INSERT INTO TEST VALUES ( 1 ) ); stmt.executeUpdate( "INSERT INTO TEST SELECT I1 FROM TEST" ); int count = stmt.getUpdateCount();
It returns 0 as getUpdateCount() value.
Workaround
The patch is required.
20c.1.6 Patch Notes
ISSUE-3690 When the file path is entered in JDBC URL in Windows, the file is unreadable.
Description
Even when the correct file path is entered in URL by using / delimiter in Windows, but the file is unreadable in JDBC.
Symptom
Unreadable File error occurs.
Workaround
The patch is required.
ISSUE-3687 When executing transaction retransmission, it stores the transaction whose size exceeds the sorting block size in a block.
Description
While configuring a sorting block for the transaction retransmission when the coordinator failover occurred, it stores the transaction whose size exceeds the block size, then sorts it, so it invades the unallocated memory area.
Symptom
It is abnormally terminated as SEGV while the coordinator server executes the coordinator failover.
Workaround
The patch is required.
20c.1.5 Patch Notes
ISSUE-3678 JDBC connection property login_timeout is added.
Description
Previously, login timeout can be set by setLoginTimeout method of DriverManager/DataSource class. However, setLoginTimeout method may not be called in a certain situation such as WAS. Therefore, the connection property login_timeout has been added.
Symptom
When connecting to the server in JDBC with the wrong IP or the wrong PORT, it indefinitely waits instead of causing an error.
Workaround
The patch is required.
20c.1.4 Patch Notes
ISSUE-3669 When failover occurs by the heartbeat, the aging information is not reset.
Description
While processing the failover, the aging information of dead nodes managed by active nodes are supposed to be reset, but it is not reset in fact.
Symptom
If active nodes do not reset the aging information of dead nodes, UNDO tablespace may be insufficient.
Workaround
The patch is required.
20c.1.3 Patch Notes
ISSUE-3655 Rebalance protocols are simultaneously performed on multiple members.
Description
When performing table rebalancing, if sequentially transferring protocols to remote members and receiving responses, then the delay occurs. Therefore, BROADCAST_REBALANCE_PROTOCOL property which broadcasts protocols to remote members and simultaneously processes them is added when the protocols can be processes at the same time, so the delay is reduced.
Symptom
When performing table rebalancing, the processing time is delayed as much as the number of target members while locking, or sequentially transferring rebalancing starting protocols to remote members, and receiving responses.
Workaround
The patch is required.
ISSUE-3649 Cluster server which is exclusive for lockless protocols is required
Description
A query which does not need a lock such as SELECT waits because it can not reserve the cluster server.
Symptom
The cluster server using shared connection method may wait in the lock status while the server is reserved when lock wait frequently occurs. Even a query which does not need a lock such as SELECT waits because it can not reserve the cluster server.
Workaround
The patch is required.
ISSUE-3663 If cluster deadlock timeout occurs when performing DML, then the query is performed again.
Description
The cluster deadlock timeout which occurred when performing DML is not a deadlock due to the competition between transactions. so it does not need to be terminated as a query failure. Therefore, it performs the query again after rollback.
Symptom
The cluster deadlock may occur due to the lack of lockable cluster servers. The deadlock is not resolved even after the waiting for the time set in CLUSTER_DEADLOCK_TIMEOUT, then CLUSTER_DEADLOCK_TIMEOUT error occurs.
However, if is DML query, then the query is performed again after the rollback when CLUSTER DEADLOCK TIMEOUT occurs.
Workaround
The patch is required.
20c.1.2 Patch Notes
ISSUE-3648 Incorrect result packet of transaction retransmission when failover
Description
It is supposed to ignore the committed transactions when performing the transaction retransmission during the failover, but it actually configures incorrect response packet and transfers it to the client.
Symptom
The server is abnormally terminated when it accesses to the result packet, and it occurs for the case of triplication or over.
Workaround
The patch is required.
20c.1.1 Patch Notes
ISSUE-3621 MERGE_DISTINCT hint is added.
Description
MERGE_DISTINCT hint has been added.
This hint is available when performing distinct clause in the cluster environment, and it is available when it satisfies the following conditions.
A distinct clause exists.
It can be performed with remote distinct.
The intermediate result ascends from the subordinate node of the distinct node in a state that the order for the distinct key column is guaranteed.
Symptom
The following is an example of using MERGE_DISTINCT hint.
\EXPLAIN PLAN
SELECT /*+ MERGE_DISTINCT */
DISTINCT o_custkey
FROM orders
WHERE o_custkey > 0
ORDER BY o_custkey;
O_CUSTKEY
---------
1
2
4
...
99996 rows selected.
>>> start print plan
< Execution Plan >
==========================================================================
|IDX| NODE DESCRIPTION |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT |
| 1 | QUERY BLOCK ("$QB_IDX_2") |
| 2 | MULTIPLE CLUSTER |
| 3 | SELECT STATEMENT |
| 4 | QUERY BLOCK ("$QB_IDX_2") |
| 5 | GROUP |
| 6 | INDEX ACCESS ("ORDERS" AS _A1, "ORDERS_CUSTKEY_FK") |
==========================================================================
1 - TARGET : ORDERS.O_CUSTKEY
2 - SQL : SELECT /*+ INDEX( _A1, "PUBLIC"."ORDERS_CUSTKEY_FK" ) */
DISTINCT "_A1"."O_CUSTKEY"
FROM "PUBLIC"."ORDERS"@LOCAL AS "_A1"
WHERE "_A1"."O_CUSTKEY" > :_V0
ORDER BY "_A1"."O_CUSTKEY" ASC NULLS LAST
TARGET DOMAIN : G1(G1N1,G1N2) 98218 rows,
G2(G2N1,G2N2) 98174 rows,
G3(G3N1,G3N2) 98138 rows
MERGE GROUPING
SORT KEY : ORDERS.O_CUSTKEY
GROUP KEY : ORDERS.O_CUSTKEY
4 - TARGET : _A1.O_CUSTKEY
5 - GROUP KEY : _A1.O_CUSTKEY
6 - HASH SHARD ( # 3 )
READ INDEX COLUMN : _A1.O_CUSTKEY
MIN RANGE : _A1.O_CUSTKEY > :_V0
MAX RANGE : _A1.O_CUSTKEY IS NOT NULL
<<< end print planIn the execution plan above, MULTIPLE CLUSTER(IDX:2) keeps the order for o_custkey. Therefore, SORT node for ORDER BY is useless, so it is dropped.
Workaround
The patch is required.
ISSUE-3619 Performance of Sampling ANALYZE is improved.
Description
Performance of Sampling ANALYZE for an indexed column in the cluster environment is improved.
Symptom
Sampling ANALYZE for an indexed column is processed in proportion to the entire number of row as follows.
ANALYZE TABLE large_shard_table ESTIMATE STATISTICS
SAMPLE 1000000 ROWS FOR COLUMNS indexed_column;It is modified to process the query above to be processes in proportion to the user-defined SAMPLE n ROWS so that the performance is improved.
Workaround
The patch is required.