Feature Matrix
본 장에서는 각 major version 별로 추가된 주요 기능들에 대해 간략히 설명한다.
Architecture
System Architecture
System architecture에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
Shared Nothing Cluster | X | X | O | O |
DA (Direct Attach) | O | O | O | O |
JDBC DA (Direct Attach) | X | X | O | O |
C/S (Client/Server) Dedicated | X | O | O | O |
C/S (Client/Server) Shared | X | O | O | O |
multi-process applications | O | O | O | O |
multi-threaded applications | O | O | O | O |
Linux platform | O | O | O | O |
HP platform | X | O | O | O |
AIX platform | X | O | O | O |
Windows Client Platform | X | O | O | O |
CDC(Change Data Capture) replication | X | O | O | O |
CDC replication with log mirror | X | O | O | O |
multi-level start up | X | O | O | O |
parallel database loading | O | O | O | O |
parallel index build | X | O | O | O |
SQL plan cache | X | O | O | O |
Storage Internal
Storage internal에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
memory dictionary tablespace | O | O | O | O |
memory data tablespace | O | O | O | O |
memory undo tablespace | O | O | O | O |
memory temporary tablespace | X | O | O | O |
memory bitmap data segment | O | O | O | O |
memory bitmap undo segment | O | O | O | O |
memory bitmap instant segment | X | O | O | O |
memory heap table | O | O | O | O |
memory instant table | X | O | O | O |
memory B-tree index | O | O | O | O |
memory instant B-tree | X | O | O | O |
memory instant hash | X | O | O | O |
global secondary index | X | X | O | O |
Transaction Control
Transaction control에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
CDS(Concurrency Data Store) database mode | O | O | O | O |
TDS(Transactional Data Store) database mode | O | O | O | O |
read-only database | X | O | O | O |
read/write database | O | O | O | O |
flat transaction | O | O | O | O |
distributed transaction | X | O | O | O |
read-only transaction | X | O | O | O |
read/write transaction | O | O | O | O |
READ COMMITTED isolation level | O | O | O | O |
SERIALIZABLE isolation level with SELECT FOR UPDATE | O | O | O | O |
MVCC(Multi Version Concurrency Control) | O | O | O | O |
multi-version read consistency | O | O | O | O |
multi-statement consistent read | O | O | O | O |
implicit lock for DML | O | O | O | O |
writer don't blocks readers | O | O | O | O |
row-level locking | O | O | O | O |
deadlock detection | O | O | O | O |
deadlock resolution | O | O | O | O |
lock granularity | O | O | O | O |
read lock | O | O | O | O |
write lock | O | O | O | O |
intention lock | O | O | O | O |
WAL(Write Ahead Logging) | O | O | O | O |
repeat history | O | O | O | O |
restart recovery | O | O | O | O |
circular logging | O | O | O | O |
buffered logging | O | O | O | O |
logging group | X | O | O | O |
supplemental logging | X | O | O | O |
mirrored logging | X | O | O | O |
synchronous commit | O | O | O | O |
asynchronous commit | O | O | O | O |
grouped commit | O | O | O | O |
total rollback | O | O | O | O |
implicit statement rollback | O | O | O | O |
savepoint management | X | O | O | O |
Backup & Recovery
Backup & recovery에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
off-line backup | O | O | O | O |
on-line backup | X | O | O | O |
full backup | X | O | O | O |
incremental backup | X | O | O | O |
complete recovery | O | O | O | O |
incomplete recovery | X | O | O | O |
auto instance recovery | O | O | O | O |
tablespace recovery | X | O | O | O |
file recovery | X | O | O | O |
Database Information
DICTIONARY_SCHEMA 스키마
DICTIONARY_SCHEMA 스키마에 대한 feature matrix는 다음과 같다.
계열 | Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|---|
ALL_ 계열 view | ALL_ALL_TABLES | X | O | O | O |
ALL_ARGUMENTS | X | X | O | O | |
ALL_CATALOG | X | O | O | O | |
ALL_CLUSTER_TABLES | X | X | O | O | |
ALL_COL_COMMENTS | X | O | O | O | |
ALL_COL_PLACE | X | X | O | X | |
ALL_COL_PRIVS | X | O | O | O | |
ALL_COL_PRIVS_MADE | X | O | O | O | |
ALL_COL_PRIVS_RECD | X | O | O | O | |
ALL_CONSTRAINTS | X | O | O | O | |
ALL_CONS_COLUMNS | X | O | O | O | |
ALL_DB_PRIVS | X | O | O | O | |
ALL_DB_PRIVS_MADE | X | O | O | O | |
ALL_DB_PRIVS_RECD | X | O | O | O | |
ALL_DEPENDENCIES | X | X | O | O | |
ALL_GLOBAL_SECONDARY_INDEXES | X | X | O | O | |
ALL_GSI_PLACE | X | X | O | O | |
ALL_INDEXES | X | O | O | O | |
ALL_IND_COLUMNS | X | O | O | O | |
ALL_IND_PLACE | X | X | O | O | |
ALL_NONSCHEMA_COMMENTS | X | O | O | O | |
ALL_OBJECTS | X | O | O | O | |
ALL_PROCEDURES | X | X | O | O | |
ALL_PROC_PRIVS | X | X | O | O | |
ALL_PROC_PRIV_MADE | X | X | O | O | |
ALL_PROC_PRIV_RECD | X | X | O | O | |
ALL_SCHEMAS | X | O | O | O | |
ALL_SCHEMA_PATH | X | O | O | O | |
ALL_SCHEMA_PRIVS | X | O | O | O | |
ALL_SCHEMA_PRIVS_MADE | X | O | O | O | |
ALL_SCHEMA_PRIVS_RECD | X | O | O | O | |
ALL_SEQUENCES | X | O | O | O | |
ALL_SEQ_PRIVS | X | O | O | O | |
ALL_SEQ_PRIVS_MADE | X | O | O | O | |
ALL_SEQ_PRIVS_RECD | X | O | O | O | |
ALL_SHARD_KEY_COLUMNS | X | X | O | O | |
ALL_SOURCE | X | X | O | O | |
ALL_SYNONYMS | X | O | O | O | |
ALL_TABLES | X | O | O | O | |
ALL_TAB_COLS | X | O | O | O | |
ALL_TAB_COLUMNS | X | O | O | O | |
ALL_TAB_COMMENTS | X | O | O | O | |
ALL_TAB_IDENTITY_COLS | X | O | O | O | |
ALL_TAB_PLACE | X | X | X | O | |
ALL_TAB_SHARDS | X | X | O | O | |
ALL_TAB_PRIVS | X | O | O | O | |
ALL_TAB_PRIVS_MADE | X | O | O | O | |
ALL_TAB_PRIVS_RECD | X | O | O | O | |
ALL_TBS_PRIVS | X | O | O | O | |
ALL_TBS_PRIVS_MADE | X | O | O | O | |
ALL_TBS_PRIVS_RECD | X | O | O | O | |
ALL_USERS | X | O | O | O | |
ALL_VIEWS | X | O | O | O | |
DBA_ 계열 view | DBA_ALL_TABLES | X | O | O | O |
DBA_ARGUMENTS | X | X | O | O | |
DBA_CATALOG | X | O | O | O | |
DBA_CLUSTER | X | X | O | O | |
DBA_CLUSTER_COMMENTS | X | X | O | O | |
DBA_CLUSTER_TABLES | X | X | O | O | |
DBA_COL_COMMENTS | X | O | O | O | |
DBA_COL_PLACE | X | X | O | X | |
DBA_COL_PRIVS | X | O | O | O | |
DBA_CONSTRAINTS | X | O | O | O | |
DBA_CONS_COLUMNS | X | O | O | O | |
DBA_DB_PRIVS | X | O | O | O | |
DBA_DEPENDENCIES | X | X | O | O | |
DBA_EXTENTS | X | O | O | O | |
DBA_GLOBAL_SECONDARY_INDEXES | X | X | O | O | |
DBA_GSI_PLACE | X | X | O | O | |
DBA_INDEXES | X | O | O | O | |
DBA_IND_COLUMNS | X | O | O | O | |
DBA_IND_PLACE | X | X | O | O | |
DBA_NONSCHEMA_COMMENTS | X | O | O | O | |
DBA_OBJECTS | X | O | O | O | |
DBA_PROCEDURES | X | X | O | O | |
DBA_PROC_PRIVS | X | X | O | O | |
DBA_PROFILES | X | O | O | O | |
DBA_SCHEMAS | X | O | O | O | |
DBA_SCHEMA_PATH | X | O | O | O | |
DBA_SCHEMA_PRIVS | X | O | O | O | |
DBA_SEQUENCES | X | O | O | O | |
DBA_SEQ_PRIVS | X | O | O | O | |
DBA_SHARD_KEY_COLUMNS | X | X | O | O | |
DBA_SOURCE | X | X | O | O | |
DBA_STAT_SYSTEM | X | X | O | O | |
DBA_SYNONYMS | X | O | O | O | |
DBA_SYS_PRIVS | X | O | O | O | |
DBA_TABLES | X | O | O | O | |
DBA_TABLESPACES | X | O | O | O | |
DBA_TAB_COLS | X | O | O | O | |
DBA_TAB_COLUMNS | X | O | O | O | |
DBA_TAB_COMMENTS | X | O | O | O | |
DBA_TAB_IDENTITY_COLS | X | O | O | O | |
DBA_TAB_PLACE | X | X | O | O | |
DBA_TAB_PRIVS | X | O | O | O | |
DBA_TAB_SHARDS | X | X | O | O | |
DBA_TBS_PRIVS | X | O | O | O | |
DBA_USERS | X | O | O | O | |
DBA_VIEWS | X | O | O | O | |
USER_ 계열 view | USER_ALL_TABLES | X | O | O | O |
USER_ARGUMENTS | X | X | O | O | |
USER_CATALOG | X | O | O | O | |
USER_CLUSTER_TABLES | X | X | O | O | |
USER_COL_COMMENTS | X | O | O | O | |
USER_COL_PLACE | X | X | O | X | |
USER_COL_PRIVS | X | O | O | O | |
USER_COL_PRIVS_MADE | X | O | O | O | |
USER_COL_PRIVS_RECD | X | O | O | O | |
USER_CONSTRAINTS | X | O | O | O | |
USER_CONS_COLUMNS | X | O | O | O | |
USER_DEPENDENCIES | X | X | O | O | |
USER_EXTENTS | X | O | O | O | |
USER_GLOBAL_SECONDARY_INDEXES | X | X | O | O | |
USER_GSI_PLACE | X | X | O | O | |
USER_INDEXES | X | O | O | O | |
USER_IND_COLUMNS | X | O | O | O | |
USER_IND_PLACE | X | X | O | O | |
USER_OBJECTS | X | O | O | O | |
USER_PROCEDURES | X | X | O | O | |
USER_PROC_PRIVS | X | X | O | O | |
USER_PROC_PRIVS_MADE | X | X | O | O | |
USER_PROC_PRIVS_RECD | X | X | O | O | |
USER_SCHEMAS | X | O | O | O | |
USER_SCHEMA_PATH | X | O | O | O | |
USER_SCHEMA_PRIVS | X | O | O | O | |
USER_SCHEMA_PRIVS_MADE | X | O | O | O | |
USER_SCHEMA_PRIVS_RECD | X | O | O | O | |
USER_SEQUENCES | X | O | O | O | |
USER_SEQ_PRIVS | X | O | O | O | |
USER_SEQ_PRIVS_MADE | X | O | O | O | |
USER_SEQ_PRIVS_RECD | X | O | O | O | |
USER_SHARD_KEY_COLUMNS | X | X | O | O | |
USER_SOURCE | X | X | O | O | |
USER_SYNONYMS | X | O | O | O | |
USER_SYS_PRIVS | X | O | O | O | |
USER_TABLES | X | O | O | O | |
USER_TABLESPACES | X | O | O | O | |
USER_TAB_COLS | X | O | O | O | |
USER_TAB_COLUMNS | X | O | O | O | |
USER_TAB_COMMENTS | X | O | O | O | |
USER_TAB_IDENTITY_COLS | X | O | O | O | |
USER_TAB_PLACE | X | X | O | O | |
USER_TAB_PRIVS | X | O | O | O | |
USER_TAB_PRIVS_MADE | X | O | O | O | |
USER_TAB_PRIVS_RECD | X | O | O | O | |
USER_TAB_SHARDS | X | X | O | O | |
USER_USERS | X | O | O | O | |
USER_VIEWS | X | O | O | O | |
기타 view | AUDIT_POLICIES | X | X | X | O |
AUDIT_POLICY_ENABLED | X | X | X | O | |
AUDIT_POLICY_OPTIONS | X | X | X | O | |
AUDIT_TRAIL | X | X | X | O | |
DATABASE_PROPERTIES | X | O | O | O | |
DBC_TABLE_TYPE_INFO | X | O | O | O | |
DICTIONARY | X | O | O | O | |
DICT_COLUMNS | X | O | O | O | |
IMPLEMENTATION_INFO | X | O | O | O | |
IMPLEMENTATION_INFO_BASE | X | O | O | O | |
JDBC_CLIENT_PROPS | X | O | O | O | |
PRODUCT | X | O | O | O | |
SESSION_PRIVS | X | O | O | O | |
SUPPLEMENTAL_LOG_TABLE_INFO | X | O | O | O | |
Aliased synonym | COLS | X | O | O | O |
DICT | X | O | O | O | |
IND | X | O | O | O | |
OBJ | X | O | O | O | |
SEQ | X | O | O | O | |
TABS | X | O | O | O |
INFORMATION_SCHEMA 스키마
INFORMATION_SCHEMA 스키마에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
COLUMNS | X | O | O | O |
COLUMN_PRIVILEGES | X | O | O | O |
CONSTRAINT_COLUMN_USAGE | X | O | O | O |
CONSTRAINT_TABLE_USAGE | X | O | O | O |
INFORMATION_SCHEMA_CATALOG_NAME | X | O | O | O |
KEY_COLUMN_USAGE | X | O | O | O |
PARAMETERS | X | X | O | O |
REFERENTIAL_CONSTRAINTS | X | O | O | O |
ROUTINES | X | X | O | O |
ROUTINE_PRIVILEGES | X | X | O | O |
ROUTINE_ROUTINE_USAGE | X | X | O | O |
ROUTINE_SEQUENCE_USAGE | X | X | O | O |
ROUTINE_TABLE_USAGE | X | X | O | O |
SCHEMATA | X | O | O | O |
SEQUENCES | X | O | O | O |
SQL_FEATURES | X | O | O | O |
SQL_IMPLEMENTATION_INFO | X | O | O | O |
SQL_PACKAGES | X | O | O | O |
SQL_PARTS | X | O | O | O |
SQL_SIZING | X | O | O | O |
STATISTICS | X | O | O | O |
TABLES | X | O | O | O |
TABLE_CONSTRAINTS | X | O | O | O |
TABLE_PRIVILEGES | X | O | O | O |
USAGE_PRIVILEGES | X | O | O | O |
VIEWS | X | O | O | O |
VIEW_ROUTINE_USAGE | X | X | O | O |
VIEW_TABLE_USAGE | X | O | O | O |
PERFORMANCE_VIEW_SCHEMA 스키마
PERFORMANCE_VIEW_SCHEMA 스키마에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
GV$____ | X | X | O | O |
V$AGABLE_INFO | X | X | O | O |
V$ARCHIVELOG | X | O | O | O |
V$AUDITABLE_DB_PRIVILEGES | X | X | X | O |
V$AUDITABLE_SYSTEM_ACTIONS | X | X | X | O |
V$BACKUP | X | O | O | O |
V$BALANCER | X | O | O | O |
V$CLUSTER_DISPATCHER | X | X | O | O |
V$CLUSTER_LOCATION | X | X | O | O |
V$CLUSTER_MEMBER | X | X | O | O |
V$COLUMNS | X | O | O | O |
V$CONTROLFILE | X | O | O | O |
V$DATAFILE | X | O | O | O |
V$DB_FILE | X | O | O | O |
V$DISPATCHER | X | O | O | O |
V$ERROR_CODE | X | O | O | O |
V$GLOBAL_TRANSACTION | X | O | O | O |
V$JOURNALING | X | X | O | O |
V$INCREMENTAL_BACKUP | X | O | O | O |
V$INSTANCE | X | O | O | O |
V$KEYWORDS | X | O | O | O |
V$LATCH | X | O | O | O |
V$LOCK_WAIT | X | O | O | O |
V$LOGFILE | X | O | O | O |
V$PROCESS_MEM_STAT | X | O | O | O |
V$PROCESS_SQL_STAT | X | O | O | O |
V$PROCESS_STAT | X | O | O | O |
V$PROPERTY | X | O | O | O |
V$PSM_RESERVED_WORDS | X | X | O | O |
V$QUEUE | X | O | O | O |
V$RESERVED_WORDS | X | O | O | O |
V$SESSION | X | O | O | O |
V$SESSION_AUDIT | X | X | X | O |
V$SESSION_CONNECT_INFO | X | O | O | O |
V$SESSION_EVENT | X | X | O | O |
V$SESSION_MEM_STAT | X | O | O | O |
V$SESSION_SQL_STAT | X | O | O | O |
V$SESSION_STAT | X | O | O | O |
V$SESSION_WAIT | X | X | O | O |
V$SHARED_MODE | X | O | O | O |
V$SHARED_SERVER | X | O | O | O |
V$SHM_SEGMENT | X | O | O | O |
V$SPROPERTY | X | O | O | O |
V$SQLFN_METADATA | X | O | O | O |
V$SQL_CACHE | X | O | O | O |
V$SQL_COMMAND | X | X | O | O |
V$SQL_HISTORY | X | X | O | O |
V$STATEMENT | X | O | O | O |
V$SYSTEM_EVENT | X | X | O | O |
V$SYSTEM_MEM_STAT | X | O | O | O |
V$SYSTEM_SQL_STAT | X | O | O | O |
V$SYSTEM_STAT | X | O | O | O |
V$TABLES | X | O | O | O |
V$TABLESPACE | X | O | O | O |
V$TABLESPACE_STAT | X | X | O | O |
V$TRANSACTION | X | O | O | O |
V$WAIT_EVENT_CLASS_NAME | X | X | O | O |
V$WAIT_EVENT_NAME | X | X | O | O |
V$XA_TRANSATION | X | X | O | O |
Server Property
Server Property에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
AGING_INTERVAL | O | O | O | O |
AGING_PLAN_INTERVAL | X | O | O | O |
ARCHIVELOG_DIR | O | O | X | X |
ARCHIVELOG_DIR_1 ~ DIR_10 | X | O | O | O |
ARCHIVELOG_FILE | X | O | O | O |
ARCHIVELOG_MODE | X | O | O | O |
BACKUP_DIR_1 ~ DIR_10 | X | O | O | O |
BLOCK_READ_COUNT | O | O | O | O |
BULK_IO_PAGE_COUNT | X | O | O | O |
CDISPATCHER_HOT_POLICY_INTERVAL | X | X | O | O |
CDISPATCHER_SOCKET_BUFFER_SIZE | X | X | O | O |
CDISPATCHER_THREADS | X | X | O | O |
CHAR_LENGTH_UNITS | X | O | O | O |
CHARACTER_SET | X | O | O | O |
CHECK_DEDICATE_CONNECTION_INTERVAL | X | X | O | O |
CHECK_DEDICATE_SOCKET | X | X | O | X |
CLIENT_MAX_COUNT | O | O | O | O |
CLIENT_NUMA_POLICY | X | X | O | O |
CLOSE_PSM_CHILD_STMTS | X | X | O | O |
CLUSTER_ASYNC_COMMIT | X | X | O | O |
CLUSTER_ASYNC_REPLICATION | X | X | O | O |
CLUSTER_CM_BUFFER_COUNT | X | X | O | O |
CLUSTER_CM_BUFFER_SIZE | X | X | O | O |
CLUSTER_CM_READ_BUFFER_SIZE | X | X | O | O |
CLUSTER_COMMIT_SLAVES | X | X | O | O |
CLUSTER_COMMIT_STREAM_ISOLATION | X | X | O | O |
CLUSTER_CONNECTION | X | X | O | O |
CLUSTER_CONNECTION_TIMEOUT_SEC | X | X | O | O |
CLUSTER_DATA_SYNC_SERVERS | X | X | O | O |
CLUSTER_DISPATCHER_IN_QUEUE_SIZE | X | X | O | O |
CLUSTER_DISPATCHER_NUMA_STREAM_MAP | X | X | O | O |
CLUSTER_DISPATCHER_OUT_QUEUE_SIZE | X | X | O | O |
CLUSTER_HEARTBEAT_INTERVAL | X | X | O | O |
CLUSTER_HEARTBEAT_RETRY_COUNT | X | X | O | O |
CLUSTER_IGNORE_INACTIVE_MEMBER | X | X | O | O |
CLUSTER_MAX_PACKET_SIZE | X | X | O | O |
CLUSTER_MAX_PAYLOAD_SIZE | X | X | O | O |
CLUSTER_PACKET_ALLOCATION_TIMEOUT | X | X | O | O |
CLUSTER_SERVER_RESPONSE_QUEUE_SIZE | X | X | O | O |
CLUSTER_SPLIT_BRAIN_RESOLUTION_POLICY | X | X | O | O |
CLUSTER_SPLIT_BRAIN_RETRY_COUNT | X | X | O | O |
COMMITTER_HOT_POLICY_INTERVAL | X | X | O | O |
CONTROL_FILE_0 ~ FILE_7 | X | O | O | O |
CONTROL_FILE_COUNT | X | O | O | O |
CONTROL_FILE_TEMP_NAME | X | O | O | O |
COORDINATOR_COMMIT_WRITE_MODE | X | X | O | O |
CSERVERS | X | X | O | O |
DA_CLIENT_NUMA_MODE | X | X | O | O |
DATA_STORE_MODE | O | O | O | O |
DATABASE_ACCESS_MODE | X | O | O | O |
DATABASE_INSTANCE_NAME | X | X | O | O |
DDL_AUTOCOMMIT | X | O | O | O |
DDL_LOCK_TIMEOUT | O | O | O | O |
DEFAULT_GLOBAL_SECONDARY_INDEX_CREATION | X | X | O | O |
DEFAULT_INDEX_LOGGING | X | O | O | O |
DEFAULT_INDEX_PCTFREE | X | X | O | O |
DEFAULT_INITRANS | O | O | O | O |
DEFAULT_MAXTRANS | O | O | O | O |
DEFAULT_PCTFREE | O | O | O | O |
DEFAULT_PCTUSED | O | O | O | O |
DEFAULT_REMOVAL_BACKUP_FILE | X | O | O | O |
DEFAULT_REMOVAL_OBSOLETE_BACKUP_LIST | X | O | O | O |
DEFAULT_SHARDING | X | X | O | O |
DISABLE_DDL_CDC_GIVEUP | X | O | O | O |
DISABLE_UPDATE_PK_CDC_GIVEUP | X | O | O | O |
DISALLOWED_PROTOCOL_TARGETTYPE | X | X | O | O |
DISALLOWED_PROTOCOL_TARGETTYPE_WITH_ALL | X | X | X | O |
DISALLOWED_PROTOCOL_TARGETTYPE_WITH_NAME | X | X | O | O |
DISPATCHERS | X | O | O | O |
DISPATCHER_CM_BUFFER_SIZE | X | O | O | O |
DISPATCHER_CM_UNIT_SIZE | X | O | O | O |
DISPATCHER_CONNECTIONS | X | O | O | O |
DISPATCHER_HOT_POLICY_INTERVAL | X | X | O | O |
DISPATCHER_LOAD_BALANCING | X | X | O | O |
DISPATCHER_NUMA_STREAM_MAP | X | X | O | O |
DISPATCHER_QUEUE_SIZE | X | O | O | O |
DISPATCHER_REQUEST_MINI_QUEUE_COUNT | X | X | O | O |
DISPATCHER_RESPONSE_MINI_QUEUE_COUNT | X | X | O | O |
FETCH_FAILOVER | X | X | O | O |
GLOBAL_CONNECTION_ALLOW_SESSION_DEPENDENCY | X | X | X | O |
GLOBAL_JOURNAL_BUFFER_SIZE | X | X | O | O |
GLOBAL_JOURNAL_BUFFER_TOTAL_MAX_SIZE | X | X | O | O |
GLOBAL_PROPERTY_LOCK_TIMEOUT | X | X | O | O |
GLOBAL_TRANSACTION_COMMIT_WRITE_MODE | X | X | O | O |
GLOBAL_TRANSACTION_ISOLATION_SCOPE | X | X | O | O |
GLOBAL_TRANSACTION_LOG_DIR | X | X | O | O |
GLOBAL_TRANSACTION_LOG_FILE_SIZE | X | X | O | O |
GMASTER_NUMA_NODE | X | X | O | O |
GMON_AUTOSTART | X | X | O | O |
HINT_ERROR | X | O | O | O |
IDLE_TIMEOUT | O | O | O | O |
IN_DOUBT_DECISION | X | O | O | O |
INDEX_BUILD_PARALLEL_FACTOR | X | O | O | O |
INDEX_TREE_MERGE_PARALLEL_FACTOR | X | X | O | O |
INST_ALLOCATOR_COUNT | X | X | O | O |
INST_TABLE_BLOCK_SIZE | X | X | O | O |
JOURNAL_TEMP_DIR | X | X | O | O |
KEEPALIVE_IDLE_TIME | X | O | O | O |
LOCAL_CLUSTER_MEMBER | X | X | O | O |
LOCAL_CLUSTER_MEMBER_HOST | X | X | O | O |
LOCAL_CLUSTER_MEMBER_PORT | X | X | O | O |
LOCAL_JOURNAL_BUFFER_SIZE | X | X | O | O |
LOCATION_FILE | X | X | O | O |
LOCATOR_QUERY_TIMEOUT | X | X | O | O |
LOCK_HASH_TABLE_SIZE | X | O | O | O |
LOG_BLOCK_SIZE | O | O | O | O |
LOG_BUFFER_SIZE | O | O | O | O |
LOG_DIR | O | O | O | O |
LOG_FILE_SIZE | O | O | O | O |
LOG_GROUP_COUNT | O | O | O | O |
LOG_MIRROR_MODE | X | O | O | O |
LOG_MIRROR_SHARED_MEMORY_STATIC_SIZE | X | O | O | O |
LOG_MIRROR_TIMEOUT | X | O | O | O |
LOG_SYNC_INTERVAL | X | O | O | O |
LOG_SYNC_INTERVAL_MSEC | X | X | O | O |
MAX_GROUP_COUNT | X | X | O | O |
MAX_JOURNAL_FILE_SIZE | X | X | O | O |
MAX_NODE_COUNT | X | X | O | O |
MAXIMUM_CONCURRENT_ACTIVITIES | X | O | O | O |
MAXIMUM_FLANGE_COUNT | X | X | O | O |
MAXIMUM_FLUSH_LOG_BLOCK_COUNT | O | O | O | O |
MAXIMUM_FLUSH_PAGE_COUNT | O | O | O | O |
MAXIMUM_JOURNAL_REPLAY_COUNT | X | X | X | O |
MAXIMUM_NAMED_CURSOR_COUNT | X | O | O | O |
MAXIMUM_SESSION_CM_BUFFER_SIZE | X | O | O | O |
MEASURE_CLUSTER_LATENCY | X | X | O | O |
MEDIA_RECOVERY_LOG_BUFFER_SIZE | X | O | X | X |
MEMORY_MERGE_RUN_COUNT | X | O | O | O |
MEMORY_SORT_RUN_SIZE | X | O | O | O |
MIN_SAMPLE_ROW_COUNT | X | X | O | O |
MINIMUM_UNDO_PAGE_COUNT | O | O | O | O |
NET_BUFFER_SIZE | X | O | O | O |
NLS_DATE_FORMAT | X | O | O | O |
NLS_TIME_FORMAT | X | O | O | O |
NLS_TIME_WITH_TIME_ZONE_FORMAT | X | O | O | O |
NLS_TIMESTAMP_FORMAT | X | O | O | O |
NLS_TIMESTAMP_WITH_TIME_ZONE_FORMAT | X | O | O | O |
NUMA | X | X | O | O |
NUMA_MAP | X | X | O | O |
OFFLINE_MEMBER_AFTER_FAILOVER | X | X | O | O |
ONLINE_JOURNAL_REPLAY_THRESHOLD | X | X | X | O |
OS_GROUP_ACCESS | X | X | O | O |
PACKET_COMPRESSION_THRESHOLD | X | X | X | O |
PAGE_CHECKSUM_TYPE | X | O | O | O |
PARALLEL_IO_FACTOR | O | O | O | O |
PARALLEL_IO_GROUP_1 ~ GROUP_16 | O | O | O | O |
PARALLEL_LOAD_FACTOR | O | O | O | O |
PENDING_LOG_BUFFER_COUNT | O | O | O | O |
PLAN_CACHE | X | O | O | O |
PLAN_CACHE_SIZE | X | O | O | O |
PRIVATE_STATIC_AREA_SIZE | X | O | O | O |
PROCESS_MAX_COUNT | O | O | O | O |
QUERY_TIMEOUT | O | O | O | O |
READABLE_ARCHIVELOG_DIR_COUNT | X | O | O | O |
READABLE_BACKUP_DIR_COUNT | X | O | O | O |
REBALANCE_BLOCK_READ_COUNT | X | X | O | O |
RECOMPILE_CHECK_MINIMUM_PAGE_COUNT | X | O | O | X |
RECOMPILE_PAGE_PERCENT | X | O | O | X |
RECOVERY_LOG_BUFFER_SIZE | X | X | O | O |
REDO_LOG_COMPRESSION_THRESHOLD | X | X | X | O |
REFINE_RELATION | X | O | O | O |
SESSION_FATAL_BEHAVIOR | X | O | O | O |
SESSION_MEMORY_INIT_SIZE | X | X | X | O |
SESSION_MEMORY_SHRINK_THRESHOLD | X | X | X | O |
SHARED_MEMORY_ADDRESS | O | O | O | O |
SHARED_MEMORY_STATIC_KEY | O | O | O | O |
SHARED_MEMORY_STATIC_NAME | O | O | O | O |
SHARED_MEMORY_STATIC_SIZE | O | O | O | O |
SHARED_REQUEST_QUEUE_COUNT | X | O | O | O |
SHARED_SERVERS | X | O | O | O |
SHARED_SESSION | X | O | O | O |
SNAPSHOT_STATEMENT_TIMEOUT | X | O | O | O |
SQL_HISTORY_SIZE | X | X | O | O |
SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY | X | O | O | O |
SYSTEM_LOGGER_DIR | X | O | O | O |
SYSTEM_MEMORY_AUX_TABLESPACE_SIZE | X | X | X | O |
SYSTEM_MEMORY_DATA_TABLESPACE_SIZE | O | O | O | O |
SYSTEM_MEMORY_DICT_TABLESPACE_SIZE | O | O | O | O |
SYSTEM_MEMORY_TEMP_TABLESPACE_SIZE | O | O | O | O |
SYSTEM_MEMORY_UNDO_TABLESPACE_SIZE | O | O | O | O |
SYSTEM_TABLESPACE_DIR | O | O | O | O |
SYSTEM_UDS_DIR | X | X | O | O |
TCP_NODELAY | X | X | O | O |
TEMP_SEGMENT_CACHE_SIZE | X | X | X | O |
TEMP_UNDO_ENABLED | X | X | X | O |
TIMED_STATISTICS | X | X | O | O |
TIMER_INTERVAL | O | O | X | X |
TIMEZONE | X | O | O | O |
TRACE_ALTER_SYSTEM | X | O | O | O |
TRACE_DDL | O | O | O | O |
TRACE_LOG_ID | X | O | O | O |
TRACE_LOG_MSGBUG_SIZE | X | X | O | O |
TRACE_LOG_TIME_DETAIL | X | O | O | O |
TRACE_LOGGER | X | X | O | O |
TRACE_LOGGER_REMOTE_HOST | X | X | O | O |
TRACE_LOGGER_REMOTE_PORT | X | X | O | O |
TRACE_LOGIN | X | O | O | O |
TRACE_LONG_RUN_CURSOR | X | O | O | O |
TRACE_LONG_RUN_SQL | X | O | O | O |
TRACE_XA | X | O | O | O |
TRANSACTION_ALLOCATION_TIMEOUT | X | X | X | O |
TRANSACTION_COMMIT_WRITE_MODE | O | O | O | O |
TRANSACTION_MAXIMUM_UNDO_PAGE_COUNT | X | O | O | O |
TRANSACTION_TABLE_SIZE | O | O | O | O |
TRANSACTION_TIMEOUT | X | X | O | O |
UNDO_RELATION_ALLOCATION_TIMEOUT | X | X | X | O |
UNDO_RELATION_COUNT | O | O | O | O |
UNDO_SHRINK_THRESHOLD | X | O | O | O |
USE_LARGE_PAGES | X | X | X | O |
SQL
SQL Element
Data Type
데이터 타입에 대한 feature matrix는 다음과 같다.
Type | Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|---|
문자 스트링 타입 | CHAR | O | O | O | O |
VARCHAR | O | O | O | O | |
LONG VARCHAR | X | O | O | O | |
이진 스트링 타입 | BINARY | O | O | O | O |
VARBINARY | O | O | O | O | |
LONG VARBINARY | X | O | O | O | |
십진 숫자 타입 | SMALLINT | X | O | O | O |
INTEGER | X | O | O | O | |
BIGINT | X | O | O | O | |
NUMERIC | O | O | O | O | |
DECIMAL | X | X | O | O | |
NUMBER | X | O | O | O | |
REAL | X | O | O | O | |
DOUBLE PRECISION | X | O | O | O | |
FLOAT | X | O | O | O | |
이진 숫자 타입 | NATIVE_SMALLINT | X | O | O | O |
NATIVE_INTEGER | X | O | O | O | |
NATIVE_BIGINT | X | O | O | O | |
NATIVE_REAL | X | O | O | O | |
NATIVE_DOUBLE | X | O | O | O | |
BOOLEAN 타입 | BOOLEAN | O | O | O | O |
날짜/시간 타입 | DATE | O | O | O | O |
TIME | O | O | O | O | |
TIME WITH TIME ZONE | O | O | O | O | |
TIMESTAMP | O | O | O | O | |
TIMESTAMP WITH TIME ZONE | O | O | O | O | |
INTERVAL 타입 | INTERVAL YEAR TO MONTH | O | O | O | O |
INTERVAL YEAR | O | O | O | O | |
INTERVAL MONTH | O | O | O | O | |
INTERVAL DAY TO SECOND | O | O | O | O | |
INTERVAL DAY | O | O | O | O | |
INTERVAL HOUR | O | O | O | O | |
INTERVAL MINUTE | O | O | O | O | |
INTERVAL SECOND | O | O | O | O | |
INTERVAL DAY TO HOUR | O | O | O | O | |
INTERVAL DAY TO MINUTE | O | O | O | O | |
INTERVAL HOUR TO MINUTE | O | O | O | O | |
INTERVAL HOUR TO SECOND | O | O | O | O | |
INTERVAL MINUTE TO SECOND | O | O | O | O | |
ROWID 타입 | ROWID | X | O | O | O |
Function
함수 및 연산자에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
expr1 * expr2 | O | O | O | O |
expr1 + expr2 | O | O | O | O |
datetime + interval | X | O | O | O |
+ expr | O | O | O | O |
expr1 - expr2 | O | O | O | O |
datetime - interval | X | O | O | O |
- expr | O | O | O | O |
expr1 / expr2 | O | O | O | O |
str1 || str2 | O | O | O | O |
expr <comp> expr | O | O | O | O |
expr <comp> ( subquery ) | X | O | O | O |
( subquery ) <comp> expr | X | O | O | O |
( subquery ) <comp> ( subquery ) | X | O | O | O |
( expr, ... ) <comp> ( expr, ... ) | X | O | O | O |
( expr, ... ) <comp> ( subquery ) | X | O | O | O |
( subquery ) <comp> ( expr, ... ) | X | O | O | O |
expr <comp> {ALL|ANY|SOME} ( expr, ... ) | X | O | O | O |
expr <comp> {ALL|ANY|SOME} ( subquery ) | X | O | O | O |
( subquery ) <comp> {ALL|ANY|SOME} ( expr, ... ) | X | O | O | O |
( subquery ) <comp> {ALL|ANY|SOME} ( subquery ) | X | O | O | O |
( expr, ... ) <comp> {ALL|ANY|SOME} ( expr_list, ... ) | X | O | O | O |
( expr, ... ) <comp> {ALL|ANY|SOME} ( subquery ) | X | O | O | O |
( subquery ) <comp> {ALL|ANY|SOME} ( expr_list, ... ) | X | O | O | O |
ABS( num ) | O | O | O | O |
ACOS( num ) | O | O | O | O |
ADDDATE( date, interval ) | X | O | O | O |
ADDDATE( expr, days ) | X | O | O | O |
ADDTIME( expr1, expr2 ) | X | O | O | O |
ADD_MONTHS( date, number ) | X | O | O | O |
AND | O | O | O | O |
ASCII( char ) | X | X | O | O |
ASIN( num ) | O | O | O | O |
ATAN( num ) | O | O | O | O |
ATAN2( num1, num2 ) | O | O | O | O |
AVG( num ) | X | O | O | O |
expr1 [NOT] BETWEEN [ASYMMETRIC|SYMMETRIC] expr2 AND expr3 | X | O | O | O |
BITAND( num1, num2 ) | O | O | O | O |
BITNOT( num ) | O | O | O | O |
BITOR( num1, num2 ) | O | O | O | O |
BITXOR( num1, num2 ) | O | O | O | O |
BIT_LENGTH( str ) | O | O | O | O |
BYTE_LENGTH( str ) | O | O | O | O |
CASE .. WHEN .. THEN .. ELSE .. END | X | O | O | O |
CASE2( condition, result, ... ) | X | O | O | O |
CAST( expr AS datatype ) | O | O | O | O |
CBRT( num ) | O | O | O | O |
CEIL( num ) | O | O | O | O |
CEILING( num ) | O | O | O | O |
CHAR_LENGTH( str ) | O | O | O | O |
CHARACTER_LENGTH( str ) | O | O | O | O |
CHR( num ) | X | X | O | O |
CLOCK_DATE() | O | O | O | O |
CLOCK_LOCALTIME() | O | O | O | O |
CLOCK_LOCALTIMESTAMP() | O | O | O | O |
CLOCK_TIME() | O | O | O | O |
CLOCK_TIMESTAMP() | O | O | O | O |
COALESCE( expr1, ..., exprN ) | X | O | O | O |
CONCAT( str1, str2 ) | O | O | O | O |
CONCATENATE( str1, str2 ) | O | O | O | O |
COS( num ) | O | O | O | O |
COT( num ) | O | O | O | O |
COUNT( expr ) | X | O | O | O |
COUNT(*) | X | O | O | O |
CURRENT_CATALOG | O | O | O | O |
CURRENT_DATE | O | O | O | O |
CURRENT_SCHEMA | O | O | O | O |
CURRENT_TIME | O | O | O | O |
CURRENT_TIMESTAMP | O | O | O | O |
CURRENT_USER | O | O | O | O |
seq.CURRVAL | O | O | O | O |
CURRVAL( seq ) | O | O | O | O |
DATEADD( datepart, number, date ) | O | O | O | O |
DATEDIFF( datepart, startdate, enddate ) | X | O | O | O |
DATE_ADD( date, interval ) | X | O | O | O |
DATE_PART( field, datetime ) | X | O | O | O |
DECODE( expr, comparison, result, ... ) | X | O | O | O |
DEGREES( radians ) | O | O | O | O |
DIGEST ( data, type ) | X | X | O | O |
DUMP( expr ) | X | O | O | O |
EXISTS( subquery ) | X | O | O | O |
EXP( num ) | O | O | O | O |
EXTRACT( field FROM datetime ) | X | O | O | O |
FACTORIAL( num ) | O | O | O | O |
FLOOR( num ) | O | O | O | O |
FROM_BASE64( str ) | X | X | O | O |
GREATEST( expr, ... ) | X | O | O | O |
HEX( str ) | X | X | O | O |
expr1 [NOT] IN ( expr, ... ) | X | O | O | O |
expr1 [NOT] IN ( subquery ) | X | O | O | O |
subquery [NOT] IN ( <expr_list> ) | X | O | O | O |
subquery [NOT] IN ( subquery ) | X | O | O | O |
<expr_list> [NOT] IN ( <expr_list>, ... ) | X | O | O | O |
<expr_list> [NOT] IN ( subquery ) | X | O | O | O |
subquery [NOT] IN ( <expr_list>, ... ) | X | O | O | O |
INITCAP( str ) | X | O | O | O |
INSTR( str, substr, ... ) | X | O | O | O |
IS NOT NULL | O | O | O | O |
IS NULL | O | O | O | O |
LAST_DAY( date ) | X | O | O | O |
LAST_IDENTITY_VALUE() | X | X | O | O |
LEAST( expr, ... ) | X | O | O | O |
LENGTH( str ) | O | O | O | O |
LENGTHB( str ) | O | O | O | O |
string [NOT] LIKE pattern ESCAPE escape_char | X | O | O | O |
LN( num ) | O | O | O | O |
LOCALTIME | O | O | O | O |
LOCALTIMESTAMP | O | O | O | O |
LOCAL_GROUP_ID() | X | X | O | O |
LOCAL_GROUP_NAME() | X | X | O | O |
LOCAL_MEMBER_ID() | X | X | O | O |
LOCAL_MEMBER_NAME() | X | X | O | O |
LOG( num2 ) | O | O | O | O |
LOG( num1, num2 ) | O | O | O | O |
LOGON_USER() | X | O | O | O |
LOWER( str ) | O | O | O | O |
LPAD( str, length, fill ) | X | O | O | O |
LTRIM( str, [ str ] ) | X | O | O | O |
MAX( expr ) | X | O | O | O |
MIN( expr ) | X | O | O | O |
MOD( num1, num2 ) | O | O | O | O |
MONTHS_BETWEEN( date1, date2 ) | X | X | X | O |
NEXT_DAY( date, day ) | X | X | O | O |
seq.NEXTVAL | O | O | O | O |
NEXTVAL( seq ) | O | O | O | O |
NEXT VALUE FOR seq | O | O | O | O |
NOT | X | O | O | O |
NULLIF( expr1, expr2 ) | X | O | O | O |
NVL( expr1, expr2 ) | X | O | O | O |
NVL2( expr1, expr2, expr3 ) | X | O | O | O |
OCTET_LENGTH( str ) | O | O | O | O |
OVERLAY( str1 PLACING str2 FROM start FOR length ) | X | O | O | O |
OR | X | O | O | O |
PI() | O | O | O | O |
POSITION( str1 IN str2 ) | O | O | O | O |
POWER( num1, num2 ) | O | O | O | O |
RADIANS( degrees ) | O | O | O | O |
RANDOM( min, max ) | O | O | O | O |
REPEAT( str, num ) | X | O | O | O |
REPLACE( str, from, to ) | X | O | O | O |
REVERSE( str ) | X | X | X | O |
ROUND( num ) | X | O | O | O |
ROUND( date, fmt ) | X | O | O | O |
ROWID_GRID_BLOCK_ID( rowid ) | X | X | O | O |
ROWID_GRID_BLOCK_SEQ( rowid ) | X | X | O | O |
ROWID_MEMBER_ID( rowid ) | X | X | O | O |
ROWID_OBJECT_ID( rowid ) | X | O | O | O |
ROWID_PAGE_ID( rowid ) | X | O | O | O |
ROWID_ROW_NUMBER( rowid ) | X | O | O | O |
ROWID_SHARD_ID( rowid ) | X | X | O | O |
ROWID_TABLESPACE_ID( rowid ) | X | O | O | O |
ROWNUM | X | X | O | O |
RPAD( str, length, fill ) | X | O | O | O |
RTRIM( str, [ str ] ) | X | O | O | O |
SESSION_ID() | X | O | O | O |
SESSION_SERIAL() | X | O | O | O |
SESSION_USER | X | O | O | O |
SHARD_GROUP_ID( table, expr ) | X | X | O | O |
SHARD_GROUP_NAME( table_name, shard_key_value [, ...] ) | X | X | O | O |
SHARD_ID( table, expr ) | X | X | O | O |
SHARD_NAME( table_name, shard_key_value [, ...] ) | X | X | O | O |
SHIFT_LEFT( num, cnt ) | O | O | O | O |
SHIFT_RIGHT( num, cnt ) | O | O | O | O |
SIGN( num ) | O | O | O | O |
SIN( num ) | O | O | O | O |
SPLIT_PART( str, delimiter, field ) | X | O | O | O |
SQRT( num ) | O | O | O | O |
STATEMENT_DATE() | O | O | O | O |
STATEMENT_LOCALTIME() | O | O | O | O |
STATEMENT_LOCALTIMESTAMP() | O | O | O | O |
STATEMENT_TIME() | O | O | O | O |
STATEMENT_TIMESTAMP() | O | O | O | O |
STATEMENT_VIEW_SCN() | X | O | O | O |
STATEMENT_VIEW_SCN_DCN() | X | X | O | O |
STATEMENT_VIEW_SCN_GCN() | X | X | O | O |
STATEMENT_VIEW_SCN_LCN() | X | X | O | O |
STDDEV( [ ALL | DISTINCT ] expr ) | X | X | X | O |
STDDEV_POP( expr ) | X | X | X | O |
STDDEV_SAMP( expr ) | X | X | X | O |
SUBSTR( str FROM start FOR length ) | X | O | O | O |
SUBSTR( str, start, length ) | X | O | O | O |
SUBSTRB( str, start, length ) | X | O | O | O |
SUBSTRING( str FROM start FOR length ) | X | O | O | O |
SUBSTRING( str, start, length ) | X | O | O | O |
SUM( expr ) | X | O | O | O |
SYSDATE | O | O | O | O |
SYS_EXTRACT_UTC( datetime_with_timezone ) | X | X | O | O |
SYSTIME | O | O | O | O |
SYSTIMESTAMP | O | O | O | O |
TAN( num ) | O | O | O | O |
TO_CHAR( datetime, fmt ) | X | O | O | O |
TO_CHAR( number, fmt ) | X | O | O | O |
TO_BASE64( str ) | X | X | O | O |
TO_DATE( str, fmt ) | X | O | O | O |
TO_NATIVE_DOUBLE( str, fmt ) | X | O | O | O |
TO_NATIVE_REAL( str, fmt ) | X | O | O | O |
TO_NUMBER( num, fmt ) | X | O | O | O |
TO_TIME( str, fmt ) | X | O | O | O |
TO_TIME_TZ( str, fmt ) | X | O | O | O |
TO_TIME_WITH_TIME_ZONE( str, fmt ) | X | O | O | O |
TO_TIMESTAMP( str, fmt ) | X | O | O | O |
TO_TIMESTAMP_TZ( str, fmt ) | X | O | O | O |
TO_TIMESTAMP_WITH_TIME_ZONE( str, fmt ) | X | O | O | O |
TRANSACTION_DATE() | O | O | O | O |
TRANSACTION_LOCALTIME() | O | O | O | O |
TRANSACTION_LOCALTIMESTAMP() | O | O | O | O |
TRANSACTION_TIME() | O | O | O | O |
TRANSACTION_TIMESTAMP() | O | O | O | O |
TRANSLATE( str, from, to ) | X | O | O | O |
TRIM( LEADING|TRAILING|BOTH trim_char FROM source ) | O | O | O | O |
TRUNC( num, scale ) | X | O | O | O |
TRUNC( date, fmt ) | X | O | O | O |
UPPER( str ) | O | O | O | O |
UNHEX( str ) | X | X | O | O |
UNHEX_TO_CHARSTR( str ) | X | X | O | O |
USER_ID() | O | O | O | O |
UUID() | X | X | O | O |
VAR_POP( expr ) | X | X | X | O |
VAR_SAMP( expr ) | X | X | X | O |
VARIANCE( [ ALL | DISTINCT ] expr ) | X | X | X | O |
VERSION() | O | O | O | O |
WIDTH_BUCKET( num, min, max, cnt ) | O | O | O | O |
Object
SQL Object
SQL 객체를 생성/ 제거/ 변경하는 DDL에 대한 feature matrix는 다음과 같다.
객체 | Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|---|
Database 객체 | ALTER DATABASE ARCHIVELOG | X | O | O | O |
ALTER DATABASE ADD LOGFILE | X | O | O | O | |
ALTER DATABASE DROP LOGFILE | X | O | O | O | |
ALTER DATABASE RENAME LOGFILE | X | O | O | O | |
ALTER DATABASE BEGIN/END BACKUP | X | O | O | O | |
ALTER DATABASE RECOVER | X | O | O | O | |
ALTER DATABASE RECOVER TABLESPACE | X | O | O | O | |
ALTER DATABASE REGISTER | X | O | O | O | |
ALTER DATABASE RESTORE | X | O | O | O | |
ANALYZE SYSTEM | X | X | O | O | |
COMMENT ON object IS .. | X | O | O | O | |
Profile 객체 | CREATE PROFILE | X | O | O | O |
DROP PROFILE | X | O | O | O | |
ALTER PROFILE | X | O | O | O | |
Audit policy 객체 | CREATE AUDIT POLICY | X | X | X | O |
DROP AUDIT POLICY | X | X | X | O | |
ALTER AUDIT POLICY | X | X | X | O | |
AUDIT POLICY | X | X | X | O | |
NOAUDIT POLICY | X | X | X | O | |
Authorization 객체 | CREATE USER | X | O | O | O |
DROP USER | X | O | O | O | |
ALTER USER | X | O | O | O | |
GRANT privileges TO | X | O | O | O | |
REVOKE privileges FROM | X | O | O | O | |
Schema 객체 | CREATE SCHEMA | X | O | O | O |
DROP SCHEMA | X | O | O | O | |
Tablespace 객체 | CREATE MEMORY DATA TABLESPACE | X | O | O | O |
CREATE MEMORY TEMPORARY TABLESPACE | X | O | O | O | |
DROP TABLESPACE | X | O | O | O | |
ALTER TABLESPACE .. RENAME TO | X | O | O | O | |
ALTER TABLESPACE .. BEGIN/END BACKUP | X | O | O | O | |
ALTER TABLESPACE .. ADD [DATAFILE|MEMORY] | O | O | O | O | |
ALTER TABLESPACE .. DROP [DATAFILE|MEMORY] | X | O | O | O | |
ALTER TABLESPACE .. RENAME DATAFILE | X | O | O | O | |
ALTER TABLESPACE .. { ONLINE | OFFLINE } | X | O | O | O | |
Table 객체 | CREATE TABLE | O | O | O | O |
CREATE TABLE AS SELECT | X | O | O | O | |
CREATE GLOBAL TEMPORARY TABLE | X | X | X | O | |
CREATE GLOBAL TEMPORARY TABLE AS SELECT | X | X | X | O | |
DROP TABLE | O | O | O | O | |
TRUNCATE TABLE | X | O | O | O | |
ALTER TABLE .. STORAGE | X | O | O | O | |
ALTER TABLE .. RENAME TO | X | O | O | O | |
ALTER TABLE .. ADD COLUMN | X | O | O | O | |
ALTER TABLE .. SET UNUSED COLUMN | X | O | O | O | |
ALTER TABLE .. ALTER COLUMN | X | O | O | O | |
ALTER TABLE .. RENAME COLUMN | X | O | O | O | |
ALTER TABLE .. RENAME CONSTRAINT | X | X | X | O | |
ALTER TABLE .. ADD CONSTRAINT | X | O | O | O | |
ALTER TABLE .. DROP CONSTRAINT | X | O | O | O | |
ALTER TABLE .. ALTER CONSTRAINT | X | O | O | O | |
ALTER TABLE .. ADD SUPPLEMENTAL LOG | X | O | O | O | |
ALTER TABLE .. DROP SUPPLEMENTAL LOG | X | O | O | O | |
ALTER TABLE .. READ { ONLY | WRITE } | X | X | X | O | |
ANALYZE TABLE | X | X | O | O | |
View 객체 | CREATE VIEW | X | O | O | O |
DROP VIEW | X | O | O | O | |
ALTER VIEW | X | O | O | O | |
Index 객체 | CREATE INDEX | O | O | O | O |
DROP INDEX | O | O | O | O | |
ALTER INDEX .. AGING | X | X | O | O | |
ALTER INDEX .. STORAGE | X | O | O | O | |
ALTER INDEX .. RENAME | X | X | X | O | |
Sequence 객체 | CREATE SEQUENCE | O | O | O | O |
DROP SEQUENCE | O | O | O | O | |
ALTER SEQUENCE | X | O | O | O | |
Synonym 객체 | CREATE SYNONYM | X | O | O | O |
DROP SYNONYM | X | O | O | O | |
CREATE PUBLIC SYNONYM | X | O | O | O | |
DROP PUBLIC SYNONYM | X | O | O | O | |
Stored procedure 객체 | CREATE PROCEDURE | X | X | O | O |
DROP PROCEDURE | X | X | O | O | |
ALTER PROCEDURE | X | X | O | O | |
Stored function 객체 | CREATE FUNCTION | X | X | O | O |
DROP FUNCTION | X | X | O | O | |
ALTER FUNCTION | X | X | O | O |
Cluster Object
Cluster 객체를 생성/ 제거/ 변경하는 DDL에 대한 feature matrix는 다음과 같다.
객체 | Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|---|
Cluster system 객체 | ALTER DATABASE REBALANCE | X | X | O | O |
ALTER DATABASE DROP INACTIVE CLUSTER MEMBERS | X | X | O | O | |
Cluster group 객체 | CREATE CLUSTER GROUP | X | X | O | O |
DROP CLUSTER GROUP | X | X | O | O | |
Cluster member 객체 | ALTER CLUSTER GROUP name ADD MEMBER | X | X | O | O |
ALTER CLUSTER GROUP name OFFLINE MEMBER | X | X | O | O | |
ALTER DATABASE RESET LOCAL CLUSTER MEMBER | X | X | O | O | |
ALTER SYSTEM IRRECOVERABLE CLUSTER MEMBER | X | X | X | O | |
ALTER SYSTEM JOIN DATABASE | X | X | O | O | |
Cluster location 객체 | CREATE CLUSTER LOCATION | X | X | O | O |
DROP CLUSTER LOCATION | X | X | O | O | |
ALTER CLUSTER LOCATION | X | X | O | O | |
Cluster table과 shard 객체 | ALTER TABLE name REBALANCE | X | X | O | O |
ALTER TABLE name MOVE SHARD | X | X | O | O | |
ALTER TABLE name SPLIT SHARD | X | X | O | O | |
ALTER TABLE name RENAME SHARD | X | X | X | O | |
Global secondary index 객체 | ALTER TABLE name ADD GLOBAL SECONDARY INDEX | X | X | O | O |
ALTER TABLE name DROP GLOBAL SECONDARY INDEX | X | X | O | O | |
ALTER TABLE name ALTER GLOBAL SECONDARY INDEX | X | X | O | O |
SQL Language
DML
데이터를 조작하는 DML 구문의 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
INSERT INTO .. | O | O | O | O |
INSERT INTO .. RETURNING query | X | O | O | O |
INSERT INTO .. RETURNING .. INTO .. | X | O | O | O |
DELETE FROM .. | O | O | O | O |
DELETE FROM .. RETURNING query | X | O | O | O |
DELETE FROM .. RETURNING .. INTO .. | X | O | O | O |
DELETE FROM .. WHERE CURRENT OF cursor | X | O | O | O |
UPDATE .. | O | O | O | O |
UPDATE .. RETURNING query | X | O | O | O |
UPDATE .. RETURNING .. INTO .. | X | O | O | O |
UPDATE .. WHERE CURRENT OF cursor | X | O | O | O |
CALL proc_name | X | X | O | O |
Query
데이터를 조회하는 SELECT 구문의 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
<query expression> | O | O | O | O |
<query specification> | O | O | O | O |
<select list> | O | O | O | O |
<from clause> | O | O | O | O |
<joined table> | X | O | O | O |
<where clause> | O | O | O | O |
<group by clause> | X | O | O | O |
<order by clause> | X | O | O | O |
<offset limit clause> | O | O | O | O |
<set operator> | X | O | O | O |
<subquery> | X | O | O | O |
<hint clause> | X | O | O | O |
Control Language
제어 구문의 feature matrix는 다음과 같다.
구분 | Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|---|
Transaction | COMMIT | O | O | O | O |
ROLLBACK | O | O | O | O | |
SAVEPOINT | X | O | O | O | |
RELEASE SAVEPOINT | X | O | O | O | |
LOCK TABLE | X | O | O | O | |
SET CONSTRAINTS | X | O | O | O | |
SET TRANSACTION | X | O | O | O | |
Session | SET SESSION CHARACTERISTICS AS | X | O | O | O |
SET SESSION AUTHORIZATION | X | O | O | O | |
SET TIME ZONE | X | O | O | O | |
ALTER SESSION SET property | O | O | O | O | |
System | ALTER SYSTEM {OPEN|MOUNT} DATABASE | X | O | O | O |
ALTER SYSTEM CHECKPOINT | O | O | O | O | |
ALTER SYSTEM KILL SESSION | X | O | O | O | |
ALTER SYSTEM RECONNECT GLOBAL CONNECTION | X | X | X | O | |
ALTER SYSTEM SWITCH LOGFILE | X | O | O | O | |
ALTER SYSTEM SET property | X | O | O | O | |
ALTER SYSTEM RESET property | X | O | O | O |
PSM Language
Persistent Stored Module (PSM) language element의 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
Assignment Statement | X | X | O | O |
Basic LOOP Statement | X | X | O | O |
Block (BEGIN .. END) | X | X | O | O |
CASE Statement | X | X | O | O |
CLOSE Statement | X | X | O | O |
Collection Method Invocation | X | X | O | O |
Collection Variable Declaration | X | X | O | O |
CONTINUE Statement | X | X | O | O |
Cursor FOR LOOP Statement | X | X | O | O |
Cursor Variable Declaration | X | X | O | O |
DELETE Statement Extension | X | X | O | O |
EXCEPTION_INIT Pragma | X | X | O | O |
Exception Declaration | X | X | O | O |
Exception Handler | X | X | O | O |
EXECUTE IMMEDIATE Statement | X | X | O | O |
EXIT Statement | X | X | O | O |
Explicit Cursor Declaration and Definition | X | X | O | O |
FETCH Statement | X | X | O | O |
FOR LOOP Statement | X | X | O | O |
GOTO Statement | X | X | O | O |
IF Statement | X | X | O | O |
Implicit Cursor Attribute | X | X | O | O |
INSERT Statement Extension | X | X | O | O |
Named Cursor Attribute | X | X | O | O |
NULL Statement | X | X | O | O |
OPEN Statement | X | X | O | O |
OPEN FOR Statement | X | X | O | O |
Procedure Call | X | X | O | O |
Procedure Declaration and Definition | X | X | O | O |
RAISE Statement | X | X | O | O |
Record Variable Declaration | X | X | O | O |
RETURN Statement | X | X | O | O |
RETURNING INTO clause | X | X | O | O |
%ROWTYPE Attribute | X | X | O | O |
Scalar Variable Declaration | X | X | O | O |
SELECT INTO Statement | X | X | O | O |
SQLCODE Function | X | X | O | O |
SQLERRM Function | X | X | O | O |
%TYPE Attribute | X | X | O | O |
UPDATE Statement Extension | X | X | O | O |
WHILE LOOP Statement | X | X | O | O |
API
ODBC
ODBC 표준 API에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
SQLAllocHandle() | O | O | O | O |
SQLBindCol() | O | O | O | O |
SQLBindParameter() | O | O | O | O |
SQLCloseCursor() | O | O | O | O |
SQLColAttribute() | X | O | O | O |
SQLColumnPrivileges() | X | O | O | O |
SQLColumns() | X | O | O | O |
SQLConnect() | O | O | O | O |
SQLDescribeCol() | O | O | O | O |
SQLDescribeParam() | O | O | O | O |
SQLDisconnect() | O | O | O | O |
SQLDriverConnect() | X | O | O | O |
SQLEndTran() | O | O | O | O |
SQLExecDirect() | O | O | O | O |
SQLExecute() | O | O | O | O |
SQLExtendedFetch() | X | O | O | O |
SQLFetch() | O | O | O | O |
SQLFetchScroll() | X | O | O | O |
SQLForeignKeys() | X | O | O | O |
SQLFreeHandle() | O | O | O | O |
SQLFreeStmt() | O | O | O | O |
SQLGetConnectAttr() | O | O | O | O |
SQLGetCursorName() | X | O | O | O |
SQLGetData() | X | O | O | O |
SQLGetDescField() | O | O | O | O |
SQLGetDescRec() | O | O | O | O |
SQLGetDiagField() | O | O | O | O |
SQLGetDiagRec() | O | O | O | O |
SQLGetEnvAttr() | O | O | O | O |
SQLGetFunctions() | O | O | O | O |
SQLGetInfo() | X | O | O | O |
SQLGetStmtAttr() | O | O | O | O |
SQLGetTypeInfo() | X | O | O | O |
SQLMoreResults() | X | O | O | O |
SQLNumParams() | O | O | O | O |
SQLNumResultCols() | O | O | O | O |
SQLParamData() | X | O | O | O |
SQLPrepare() | O | O | O | O |
SQLPrimaryKeys() | X | O | O | O |
SQLProcedureColumns() | X | O | O | O |
SQLProcedures() | X | O | O | O |
SQLPutData() | X | O | O | O |
SQLRowCount() | O | O | O | O |
SQLSetConnectAttr() | O | O | O | O |
SQLSetCursorName() | X | O | O | O |
SQLSetDescField() | O | O | O | O |
SQLSetDescRec() | O | O | O | O |
SQLSetEnvAttr() | O | O | O | O |
SQLSetPos() | X | O | O | O |
SQLSetStmtAttr() | O | O | O | O |
SQLSpecialColumns() | X | O | O | O |
SQLStatistics() | X | O | O | O |
SQLTablePrivileges() | X | O | O | O |
SQLTables() | X | O | O | O |
ODBC 표준 이외의 부가적으로 지원하는 API에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
xa_open | X | O | O | O |
xa_close | X | O | O | O |
xa_start | X | O | O | O |
xa_end | X | O | O | O |
xa_rollback | X | O | O | O |
xa_prepare | X | O | O | O |
xa_commit | X | O | O | O |
xa_recover | X | O | O | O |
xa_forget | X | O | O | O |
SQLGetXaSwitch | X | O | O | O |
SQLGetXaConnectionHandle | X | O | O | O |
SQLGetGroupCount | X | X | X | O |
SQLGetGroupIDs | X | X | X | O |
SQLGetGroupName | X | X | X | O |
SQLGetSuitableGroupID | X | X | X | O |
JDBC
JDBC에 대한 class feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
CallableStatement | X | X | O | O |
CommonDataSource | X | O | O | O |
Connection | X | O | O | O |
ConnectionPoolDataSource | X | O | O | O |
DatabaseMetaData | X | O | O | O |
DataSource | X | O | O | O |
Driver | X | O | O | O |
ParameterMetaData | X | O | O | O |
PooledConnection | X | O | O | O |
PreparedStatement | X | O | O | O |
ResultSet | X | O | O | O |
ResultSetMetaData | X | O | O | O |
RowId | X | O | O | O |
Savepoint | X | O | O | O |
Statement | X | O | O | O |
XAConnection | X | O | O | O |
XADataSource | X | O | O | O |
XAResource | X | O | O | O |
GoldilocksInterval | X | O | O | O |
GoldilocksTypes | X | O | O | O |
Embedded SQL
Precompiler Option
Precompiler의 option에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
--help | X | O | O | O |
--include-path | X | O | O | O |
--no-prompt | X | O | O | O |
--output | X | O | O | O |
--unsafe-null | X | O | O | O |
--version | X | O | O | O |
Embedded SQL 전용 구문
Embedded SQL에서만 사용할 수 있는 SQL 구문에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
EXEC SQL AT | X | O | O | O |
EXEC SQL ATOMIC INSERT | X | O | O | O |
EXEC SQL AUTOCOMMIT | X | O | O | O |
EXEC SQL BEGIN DECLARE SECTION | X | O | O | O |
EXEC SQL COMMIT RELEASE | X | O | O | O |
EXEC SQL CONNECT | X | O | O | O |
EXEC SQL CONTEXT ALLOCATE | X | O | O | O |
EXEC SQL CONTEXT FREE | X | O | O | O |
EXEC SQL CONTEXT USE | X | O | O | O |
EXEC SQL DISCONNECT | X | O | O | O |
EXEC SQL END DECLARE SECTION | X | O | O | O |
EXEC SQL FOR | X | O | O | O |
EXEC SQL GET GROUPID | X | X | X | O |
EXEC SQL INCLUDE | X | O | O | O |
EXEC SQL INCLUDE SQLCA | X | O | O | O |
EXEC SQL OPTION | X | O | O | O |
EXEC SQL ROLLBACK RELEASE | X | O | O | O |
EXEC SQL WHENEVER | X | O | O | O |
Host Variable Data Type
Host 변수에 사용할 수 있는 embbeded SQL data type의 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
C native type | X | O | O | O |
struct, union | X | O | O | O |
typedef | X | O | O | O |
VARCHAR | X | O | O | O |
LONG VARCHAR | X | O | O | O |
BINARY | X | O | O | O |
LONG VARBINARY | X | O | O | O |
BOOLEAN | X | O | O | O |
NUMBER | X | O | O | O |
DATE | X | O | O | O |
TIME | X | O | O | O |
TIME WITH TIMEZONE | X | O | O | O |
TIMESTAMP | X | O | O | O |
TIMESTAMP WITH TIMEZONE | X | O | O | O |
INTERVAL YEAR | X | O | O | O |
INTERVAL MONTH | X | O | O | O |
INTERVAL DAY | X | O | O | O |
INTERVAL HOUR | X | O | O | O |
INTERVAL MINUTE | X | O | O | O |
INTERVAL SECOND | X | O | O | O |
INTERVAL YEAR TO MONTH | X | O | O | O |
INTERVAL DAY TO HOUR | X | O | O | O |
INTERVAL DAY TO MINUTE | X | O | O | O |
INTERVAL DAY TO SECOND | X | O | O | O |
INTERVAL HOUR TO MINUTE | X | O | O | O |
INTERVAL HOUR TO SECOND | X | O | O | O |
INTERVAL MINUTE TO SECOND | X | O | O | O |
Dynamic SQL
Dynamic SQL에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
SELECT .. INTO | X | O | O | O |
EXECUTE IMMEDIATE sql | X | O | O | O |
PREPARE stmt | X | O | O | O |
EXECUTE stmt | X | O | O | O |
DECLARE cursor FOR sql | X | O | O | O |
DECLARE cursor FOR stmt | X | O | O | O |
OPEN cursor | X | O | O | O |
OPEN cursor USING | X | O | O | O |
FETCH cursor INTO | X | O | O | O |
CLOSE cursor | X | O | O | O |
DELETE .. WHERE CURRENT OF cursor | X | O | O | O |
UPDATE .. WHERE CURRENT OF cursor | X | O | O | O |
PyDBC
Module
PyDBC가 제공하는 pygoldilocks의 method feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
connect | X | X | X | O |
Date | X | X | X | O |
Time | X | X | X | O |
Timestamp | X | X | X | O |
DateFromTicks | X | X | X | O |
TimeFromTicks | X | X | X | O |
TimestampFromTicks | X | X | X | O |
Binary | X | X | X | O |
STRING | X | X | X | O |
BINARY | X | X | X | O |
NUMBER | X | X | X | O |
DATETIME | X | X | X | O |
ROWID | X | X | X | O |
getDecimalSeparator | X | X | X | O |
setDecimalSeparator | X | X | X | O |
pygoldilocks module의 attribute feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
apilevel | X | X | X | O |
threadsafety | X | X | X | O |
paramstyle | X | X | X | O |
version | X | X | X | O |
lowercase | X | X | X | O |
Connection
Connection 객체의 method feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
cursor | X | X | X | O |
commit | X | X | X | O |
rollback | X | X | X | O |
close | X | X | X | O |
getinfo | X | X | X | O |
execute | X | X | X | O |
set_attr | X | X | X | O |
Connection 객체의 attribute feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
autocommit | X | X | X | O |
searchescape | X | X | X | O |
timeout | X | X | X | O |
Cursor
Cursor 객체의 method feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
excute | X | X | X | O |
executemany | X | X | X | O |
fetchone | X | X | X | O |
fetchall | X | X | X | O |
fetchmany | X | X | X | O |
commit | X | X | X | O |
rollback | X | X | X | O |
skip | X | X | X | O |
nextset | X | X | X | O |
close | X | X | X | O |
setinputsizes | X | X | X | O |
setoutputsize | X | X | X | O |
callproc | X | X | X | O |
callfunc | X | X | X | O |
tables | X | X | X | O |
columns | X | X | X | O |
statistics | X | X | X | O |
rowIdColumns | X | X | X | O |
rowVerColumns | X | X | X | O |
primaryKeys | X | X | X | O |
foreignKeys | X | X | X | O |
procedures | X | X | X | O |
getTypeInfo | X | X | X | O |
Cursor 객체의 attribute feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
Description | X | X | X | O |
rowcount | X | X | X | O |
arraysize | X | X | X | O |
connection | X | X | X | O |
fast_executemany | X | X | X | O |
Row
Row 객체의 attribute feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
cursor_description | X | X | X | O |
Utility
gcreatedb
Command Usage
gcreatedb의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
--character_set | O | O | O | O |
--char_length_units | X | O | O | O |
--cluster | X | X | O | O |
--db_comment | O | O | O | O |
--help | O | O | O | O |
--host | X | X | O | O |
--member | X | X | O | O |
--port | X | X | O | O |
--silent | O | O | O | O |
--timezone | X | O | O | O |
glsnr
Command Usage
glsnr의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
--help | X | O | O | O |
--home | X | X | O | O |
--silent | X | O | O | O |
--start | X | O | O | O |
--status | X | O | O | O |
--stop | X | O | O | O |
Configuration File
glsnr의 configuration에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
BACKLOG | X | O | O | O |
DEFAULT_CS_MODE | X | O | O | O |
LISTENER_LOG_DIR | X | X | O | O |
LISTEN_PORT | X | O | O | O |
TCP_EXCLUDED | X | O | O | O |
TCP_INVITED | X | O | O | O |
TCP_HOST | X | O | O | O |
TCP_VALIDNODE_CHECKING | X | O | O | O |
TIMEOUT | X | O | O | O |
USR_DIR | X | X | O | O |
gsql/ gsqlnet
Command Usage
gsql의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
username password | O | O | O | O |
--as {SYSDBA|ADMIN} | X | O | O | O |
--conn-string | X | O | O | O |
--dsn | X | O | O | O |
--enable-color | O | O | O | O |
--help | O | O | O | O |
--import | O | O | O | O |
--no-prompt | O | O | O | O |
--prompt | O | O | O | O |
--silent | O | O | O | O |
--version | O | O | O | O |
Interactive gsql Command
gsql 프롬프트 상태에서 사용하는 interactive gsql command에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
| O | O | O | O |
| X | O | O | O |
| X | X | O | O |
| X | X | O | O |
| X | X | O | O |
| X | O | O | O |
| X | O | O | O |
| X | O | O | O |
| X | X | X | O |
| X | O | O | O |
| X | O | O | O |
| X | O | O | O |
| X | O | O | O |
| X | O | O | O |
| X | O | O | O |
| X | O | O | O |
| X | O | O | O |
| X | O | O | O |
| X | X | 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 |
| 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 |
| X | O | O | O |
| X | 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 |
| X | O | O | O |
| X | O | O | O |
| O | O | O | O |
gloader/ gloadernet
Command Usage
gloader의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
username password | O | O | O | O |
--array | O | O | O | O |
--atomic | O | O | O | O |
--bad | O | O | O | O |
--buffered | X | O | O | O |
--commit | O | O | O | O |
--control | O | O | O | O |
--data | O | O | O | O |
--dsn | X | O | O | O |
--errors | X | O | O | O |
--export | O | O | O | O |
--fieldterm | X | X | O | O |
--filesize | X | O | O | O |
--format | X | O | O | O |
--help | O | O | O | O |
--import | O | O | O | O |
--lineterm | X | X | O | O |
--log | O | O | O | O |
--no-prompt | O | O | O | O |
--parallel | O | O | O | O |
--propagation | X | O | O | O |
--qualifier | X | X | O | O |
--silent | O | O | O | O |
--AsTIMESTAMP | X | O | O | O |
--where | X | X | X | O |
--group-id | X | X | X | O |
--directio-size | X | X | X | O |
Control File Syntax
gloader의 control file syntax에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
CHARACTERSET | X | O | O | O |
FIELDS TERMINATED BY | O | O | O | O |
OPTIONALLY ENCLOSED BY | O | O | O | O |
TABLE table_name | O | O | O | O |
TABLE schema_name.table_name | X | O | O | O |
LTRIM | X | X | O | O |
RTRIM | X | X | O | O |
LINES TERMINATED BY | X | X | O | O |
WHERE | X | X | X | O |
gdump
Command Usage
gdump의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 | |
|---|---|---|---|---|---|
Common arguments | --silent | X | O | O | O |
File type | BACKUP | X | O | O | O |
COMMIT_LOG | X | X | O | O | |
CONTROL | X | O | O | O | |
DATA | X | O | O | O | |
LOG | X | O | O | O | |
LOG_BUFFER | X | X | O | O | |
PEND_BUFFER | X | X | O | O | |
PROPERTY | X | O | O | O | |
BACKUP file arguments | --body | X | O | O | O |
--tbs | X | O | O | O | |
--number | X | O | O | O | |
--fetch | X | O | O | O | |
CONTROL file arguments | --section | X | O | O | O |
DATA file arguments | --header | X | O | O | O |
--number | X | O | O | O | |
--fetch | X | O | O | O | |
LOG file arguments | --all | X | X | O | O |
--fetch | X | O | O | O | |
--header | X | X | O | O | |
--number | X | O | O | O | |
--offset | X | O | O | O | |
tablediff
Configuration File
tablediff의 configuration file에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 | |
|---|---|---|---|---|---|
Source table | SOURCE_PASSWORD | X | O | O | O |
SOURCE_SCHEMA | X | O | O | O | |
SOURCE_TABLE | X | O | O | O | |
SOURCE_URL | X | O | O | O | |
SOURCE_USER | X | O | O | O | |
Target table | TARGET_PASSWORD | X | O | O | O |
TARGET_SCHEMA | X | O | O | O | |
TARGET_TABLE | X | O | O | O | |
TARGET_URL | X | O | O | O | |
TARGET_USER | X | O | O | O | |
Sync operation | TARGET_INSERT | X | O | O | O |
TARGET_UPDATE | X | O | O | O | |
TARGET_DELETE | X | O | O | O | |
SOURCE_INSERT | X | O | O | O | |
Operation options | DIFF_BIN_FILE | X | O | O | O |
DIFF_OUT_FILE | X | O | O | O | |
DISPLAY_CALL_STACK | X | O | O | O | |
DISPLAY_ROW_UNIT | X | O | O | O | |
EXCLUDE_COLUMNS | X | O | O | O | |
LOGGING_ON_DIFF | X | O | O | O | |
LOGGING_ON_SUCCESS | X | O | O | O | |
JOB_QUEUE_SIZE | X | O | O | O | |
JOB_THREAD | X | O | O | O | |
JOB_UNIT_SIZE | X | O | O | O | |
PARTITION_RANGE | X | O | O | O | |
SYNC_OUT_FILE | X | O | O | O | |
WHERE_CLAUSE | X | O | O | O | |
gsyncher
Command Usage
gsyncher의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
--log | X | O | O | O |
--silent | X | O | O | O |
--home | X | X | O | O |
--copy-right | X | O | O | O |
--backup-path | X | O | O | O |
--help | X | O | O | O |
gmon
Command Usage
gmon의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
--start | X | X | O | O |
--stop | X | X | O | O |
--status | X | X | O | O |
--home | X | X | O | O |
--silent | X | X | O | O |
--no-copyright | X | X | O | O |
--help | X | X | O | O |
gtrclogger
Command Usage
gtrclogger의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
--dir | X | X | O | O |
--help | X | X | O | O |
--port | X | X | O | O |
--start | X | X | O | O |
--stop | X | X | O | O |
glocator
Command Usage
glocator의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
--create | X | X | O | O |
--start | X | X | O | O |
--stop | X | X | O | O |
--conf | X | X | O | O |
--status | X | X | O | O |
--sync | X | X | X | O |
--silent | X | X | O | O |
--no-copyright | X | X | O | O |
--help | X | X | O | O |
Configuration File
glocator의 configuration file에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
PORT | X | X | O | O |
WORKER_COUNT | X | X | O | O |
SESSION_QUEUE_SIZE | X | X | O | O |
SESSION_ALLOCATOR_SIZE | X | X | O | O |
PACKET_ALLOCATOR_SIZE | X | X | O | O |
SYSTEM_LOGGER_DIR | X | X | O | O |
SYSTEM_UDS_DIR | X | X | O | O |
LOCATION_FILE_DIR | X | X | O | O |
LOCATION_FILE_SIZE | X | X | O | O |
LOCATION_FILE_MAX_SIZE | X | X | O | O |
SESSION_TIMEOUT | X | X | O | O |
FAILOVER_TIMEOUT | X | X | O | O |
ALTERNATE_LOCATORS | X | X | X | O |
SYNC_RETRY_COUNT | X | X | X | O |
SYNC_RESPONSE_TIMEOUT | X | X | X | O |
gagent
Command Usage
gagent의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
--start | X | X | O | O |
--stop | X | X | O | O |
--conf | X | X | O | O |
--status | X | X | O | O |
--home | X | X | O | O |
--silent | X | X | O | O |
--no-copyright | X | X | O | O |
--help | X | X | O | O |
Configuration File
gagent의 configuration file에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
PORT | X | X | O | O |
LOCATOR_HOST | X | X | O | O |
LOCATOR_PORT | X | X | O | O |
COMMAND_QUEUE_SIZE | X | X | O | O |
COMMAND_ALLOCATOR_SIZE | X | X | O | O |
PACKET_ALLOCATOR_SIZE | X | X | O | O |
SYSTEM_LOGGER_DIR | X | X | O | O |
SESSION_TIMEOUT | X | X | O | O |
UPDATE_LOCATION_TIME | X | X | O | O |
ALTERNATE_LOCATORS | X | X | X | O |
gloctl
Command Usage
gloctl의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
--dsn | X | X | O | X |
--conf | X | X | X | O |
--ip | X | X | O | O |
--port | X | X | O | O |
--import | X | X | O | O |
--silent | X | X | O | O |
--no-copyright | X | X | O | O |
--help | X | X | O | O |
Configuration File
gloctl의 configuration file에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
PORT | X | X | X | O |
LOCATOR_HOST | X | X | X | O |
LOCATOR_PORT | X | X | X | O |
Replication
cyclone
Command Usage
cyclone의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
--conf | X | O | O | O |
--encrypt | X | X | O | O |
--group | X | O | O | O |
--help | X | O | O | O |
--key | X | X | O | O |
--master | X | O | O | O |
--reset | X | O | O | O |
--silent | X | O | O | O |
--slave | X | O | O | O |
--start | X | O | O | O |
--status | X | O | O | O |
--stop | X | O | O | O |
--sync | X | O | O | O |
--stand-alone | X | X | X | O |
--recovery | X | X | X | O |
--local | X | X | X | O |
Configuration File
cyclone의 configuration file에 대한 feature matrix는 다음과 같다.
Configuration | Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|---|
Common configuration | COMM_CHUNK_COUNT | X | O | O | O |
DSN | X | O | O | O | |
USER_ENCRYPT_PW | X | X | O | O | |
GROUP_NAME | X | O | O | O | |
HOST_IP | X | O | O | O | |
HOST_EXTERNAL_IP | X | X | O | O | |
HOST_PORT | X | O | O | O | |
PORT | X | O | O | O | |
PROTOCOL | X | X | O | O | |
USER_ID | X | O | O | O | |
USER_PW | X | O | O | O | |
MASTER configuration | CAPTURE_TABLE | X | O | O | O |
LOG_PATH | X | O | O | O | |
READ_LOG_BLOCK_COUNT | X | O | O | O | |
TRANS_SORT_AREA_SIZE | X | O | O | O | |
TRANS_FILE_PATH | X | O | O | O | |
SYNCHER_COUNT | X | O | O | O | |
SYNC_ARRAY_SIZE | X | O | O | O | |
GIVEUP_INTERVAL | X | O | O | O | |
LOG_CAPTURE_INTERVAL_1 | X | X | O | O | |
LOG_CAPTURE_INTERVAL_2 | X | X | O | O | |
SLAVE configuration | APPLIER_COUNT | X | O | O | O |
APPLY_ARRAY_SIZE | X | O | X | X | |
APPLY_COMMIT_SIZE | X | O | O | O | |
APPLY_TABLE | X | O | O | O | |
MASTER_IP | X | O | O | O | |
PROPAGATE_MODE | X | O | O | O | |
CLUSTER | X | X | X | O | |
ORACLE_DRIVER | X | X | X | O |
logmirror
Command Usage
logmirror의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
--conf | X | O | O | O |
--help | X | O | O | O |
--infiniband | X | O | O | O |
--master | X | O | O | O |
--silent | X | O | O | O |
--slave | X | O | O | O |
--start | X | O | O | O |
--stop | X | O | O | O |
Configuration File
logmirror의 configuration file에 대한 feature matrix는 다음과 같다.
Configuration | Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|---|
Common configuration | PORT | X | O | O | O |
MASTER configuration | DSN | X | O | O | O |
HOST_IP | X | O | O | O | |
HOST_PORT | X | O | O | O | |
PROTOCOL | X | X | O | O | |
USER_ID | X | O | O | O | |
USER_PW | X | O | O | O | |
SLAVE configuration | LOG_PATH | X | O | O | O |
MASTER_IP | X | O | O | O |
cymon
Command Usage
cymon의 command usage에 대한 feature matrix는 다음과 같다.
Feature | 1.x | 2.x | 3.1 | 3.2 |
|---|---|---|---|---|
--conf | X | O | O | O |
--help | X | O | O | O |
--cycle | X | O | O | O |
--key | X | X | O | O |
--start | X | O | O | O |
--stop | X | O | O | O |
--status | X | O | O | O |
What's New in GOLDILOCKS 3.2
본 장에서는 GOLDILOCKS 3.2에 새로 추가된 기능들에 대해 간략히 설명한다.
Architecture
System Architecture
변동 사항 없음
Storage Internal
변동 사항 없음
Transaction Control
변동 사항 없음
Backup & Recovery
변동 사항 없음
Database Information
DICTIONARY_SCHEMA
Audit policy 객체 정보를 조회하기 위한 다음 view가 추가되었다.
Audit record를 조회하기 위해 AUDIT_TRAIL이 추가되었다.
다음 view가 제거되었다.
ALL_COL_PLACE
DBA_COL_PLACE
USER_COL_PLACE
INFORMATION_SCHEMA
변동 사항 없음
PERFORMANCE_VIEW_SCHEMA
Audit policy의 옵션을 정의할 때 system action, privilege action에 나열할 수 있는 정보를 조회하기 위한 view가 추가되었다.
Server Property
Global Temporary Table을 위한 프로퍼티 추가
Global temporary table에 대해 undo logging tablespace를 지정하기 위해 TEMP_UNDO_ENABLED 프로퍼티가 추가되었다. Global temporary table이나 global temporary index의 segment cache 크기를 지정하기 위해 TEMP_SEGMENT_CACHE_SIZE 프로퍼티가 추가되었다.
Page 개수 변경에 따른 Recompile 기능 제거
3.1 까지 지원하던 page 개수 변경에 따른 recompile 기능이 제거되었다. 따라서 다음과 같은 프로퍼티를 지원하지 않는다.
Auxiliary Tablespace를 위한 프로퍼티 추가
Auxiliary tablespace의 크기를 결정하기 위한 SYSTEM_MEMORY_AUX_TABLESPACE_SIZE 프로퍼티가 추가되었다.
통신 데이터 압축을 위한 프로퍼티 추가
통신 데이터 압축 여부를 결정하는 PACKET_COMPRESSION_THRESHOLD 프로퍼티가 추가되었다.
Redo Log 압축을 위한 프로퍼티 추가
Redo log 압축 여부를 결정하는 REDO_LOG_COMPRESSION_THRESHOLD 프로퍼티가 추가되었다.
USE_LARGE_PAGES 프로퍼티 추가
HugePage를 사용하기 위해 USE_LARGE_PAGES 프로퍼티가 추가되었다.
SQL
SQL Element
Data Type
변동 사항 없음
Function
다음과 같이 분산 관련 aggregation 함수가 추가되었다. • STDDEV • STDDEV_POP • STDDEV_SAMP • VARIANCE • VAR_POP • VAR_SAMP 문자열 함수 REVERSE가 추가되었다. 날짜형 함수 MONTHS_BETWEEN이 추가되었다.
Object
Audit Policy
SQL 수행을 감사할 수 있는 Audit Policy 객체가 추가되었다.
Global Temporary Table
세션에 종속적인 임시 테이블인 Global Temporary Table 객체가 추가되었다.
SQL Language
ANALYZE TABLE 구문의 병렬처리
ANALYZE TABLE 구문에 병렬처리 옵션이 추가되었다.
Audit Policy DDL
Audit Policy 객체를 제어할 수 있는 다음 DDL이 추가되었다.
Audit policy 생성
Audit policy 제거
Audit policy 변경
Audit policy 활성화
Audit policy 비활성화
Audit trail 삭제
User DDL
사용자의 default index tablespace가 추가되었다.
User 생성
User 변경
Table DDL
테이블 객체를 변경하는 다음 DDL이 추가되었다.
테이블 제약 조건의 이름 변경
테이블의 속성 변경
Cluster 환경에서 테이블의 특정 shard 이름 변경
Global temporary table을 생성하는 DDL이 추가되었다.
Index DDL
인덱스 객체를 변경하는 다음과 같은 DDL이 추가되었다.
인덱스 이름 변경
Cluster System DDL
Cluster system 객체를 변경하는 다음과 같은 DDL이 추가되었다.
회복 불가한 cluster member 지정
System DCL
System 객체를 제어하는 다음과 같은 DCL이 추가되었다.
GLOBAL CONNECTION을 사용하는 세션의 재접속 설정
API
ODBC
odbc.ini
odbc.ini 파일에 data source name 키워드로 LOCATOR_SERVICE와 PACKET_COMPRESSION_THRESHOLD가 추가되었다.
Location 키워드로 ALTERNATE_LOCATORS와 CONNECTION_TIMEOUT이 추가되었다.
GLOBAL CONNECTION
GLOBAL CONNECTION을 지원한다.
Statement Attributes
Statement 속성값으로 SQL_ATTR_FETCH_FAILOVER가 추가되었다.
JDBC
연결 프로퍼티
연결 프로퍼티에 packet_compression_threshold가 추가되었다.
Embedded SQL
EXEC SQL GET GROUPID INTO 명령이 추가되었다.
PDO
Venus 3.2 버전부터 PDO에서 GOLDILOCKS에 접근할 수 있는 PDO 드라이버를 제공한다.
PyDBC
Venus 3.2 버전부터 python 언어를 위한 API인 PyDBC를 제공한다.
Ruby
Venus 3.2 버전부터 ruby 언어를 위한 API인 Ruby 드라이버를 제공한다.
Hibernate
Venus 3.2 버전부터 Java ORM 프레임워크인 Hibernate와 연동할 수 있는 소스를 제공한다.
Utility
gcreatedb
변동 사항 없음
glsnr
변동 사항 없음
gsql/gsqlnet
Audit Policy 객체의 DDL 출력
Audit 객체에 대한 DDL을 출력하기 위해 interactive command \ddl_audit_policy가 추가되었다.SET HEADING {ON | OFF}
질의 결과에 헤더를 출력할지 여부를 설정하기 위해 \set heading가 추가되었다.gloader/gloadernet
WHERE 절
export (데이터 다운로드)에 다음과 같은 조건문을 설정할 수 있도록 하였다.
--group-id
gloader 명령 인자로 --group-id가 추가되었다.
--directio-size
gloader 명령 인자로 --directio-size가 추가되었다.
gdump
변동 사항 없음
tablediff
변동 사항 없음
gsyncher
변동 사항 없음
gmon
변동 사항 없음
gtrclogger
변동 사항 없음
glocator
Configuration
다중화 관련 configuration 키워드로 ALTERNATE_LOCATORS가 추가되었다.
Argument
Argument에 --sync 옵션이 추가되었다.
gagent
Configuration
Configuration 키워드로 ALTERNATE_LOCATORS가 추가되었다.
gloctl
Configuration
gloctl의 구동 환경을 설정하는 Configuration 파일이 추가되었다.
Configuration 파일을 지정하는 conf option이 추가되었다.
--dsn
gloctl을 구동할 때 dsn 옵션이 제거되었다.
Replication
cyclone
Recovery 기능이 추가되었다.
Cluster 환경에서 CYCLONE 운영 기능이 추가되었다.
Slave를 지원하는 database가 GOLDILOCKS 이외에 ORACLE_DRIVER를 지원한다.
Standalone의 실행 옵션이 추가되었다.
Local 실행 옵션이 추가되었다.
logmirror
변동 사항 없음
cymon
변동 사항 없음
Patch Notes
3.2.14 Patch Note
ISSUE-6253 Large page 를 사용하는 공유 메모리 할당에 실패할 경우 normal page를 사용할 수 있는 property를 지원한다.
개요
공유 메모리를 할당할 때 normal page와 large page를 사용할 수 있도록 하고, large page를 이용한 공유 메모리 할당에 실패하는 경우 normal page를 이용하여 공유 메모리를 할당할 수 있는 USE_LARGE_PAGES property를 지원한다.
수정 전 대처
없음
3.2.13 Patch Note
ISSUE-5862 JDBC, Multi-thread 프로그램에서 Connection 객체를 공유할 때 deadlock 현상이 발생한다.
개요
Multi-thread 프로그램에서 Connection 객체를 공유하여 사용하면 deadlock이 발생한다.
수정 전 대처
Thread 별로 Connection 객체를 별도로 생성해서 사용한다.
3.2.12 Patch Note
ISSUE-4362 Cluster에서 cserver가 free 된 메모리를 참조하여 비정상적으로 종료되었다.
개요
Cluster에서 원격 멤버가 dml을 수행할 때 cserver 세션에서 사용한 메모리를 free 한 후에 다른 dml을 수행할 경우 free 된 메모리를 이용하는 버그로 인해 비정상적으로 종료되는 문제가 있어 이를 수정하였다.
3.2.11 Patch Note
ISSUE-3869 ODBC에서 array fetch 할 때 row status의 결과가 잘못되었다.
개요
ODBC에서 array fetch 할 때 SQLFetch 함수를 호출한 후에 row의 status 값을 확인할 수 있다. 만일 SQLFetch의 반환값이 SQL_SUCCESS가 아닐 경우에는 row status나 diagnostic을 확인해야 한다. 하지만 SQLFetch의 반환값이 SQL_SUCCESS_WITH_INFO인 상황에서 diagnostic 메시지는 조회할 수 있지만 row의 status는 모두 SQL_ROW_SUCCESS라고 잘못 나온다.
현상 및 증상
다음은 숫자로 변환하지 못하는 문자열 데이터이다.
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;
다음은 위 데이터를 숫자 타입으로 변환해서 array fetch하는 예제의 일부이다.
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;
}숫자로 변환하지 못하는 데이터가 포함되어 있지만 row status가 모두 SQL_ROW_SUCCESS라고 나온다.
row status: 0 row status: 0 row status: 0 row status: 0
수정 전 대처
없음
ISSUE-3534 Cluster failover를 처리하는 과정에서 gagent가 서버를 shutdown하지 않고 서버가 스스로 종료되도록 변경하였다.
개요
Cluster failover를 처리하는 과정에서 gagent가 non-viability 라는 결과를 수신할 경우, 기존에는 gagent가 SHUTDOWN ABORT를 실행하여 서버를 종료하였다. 그러나 gagent가 서버를 shutdown하지 않고 서버가 스스로 종료되도록 변경하였다.
ISSUE-3534 Cluster failover를 처리하는 과정에서 glocator가 질의를 요청한 gagent로만 결과를 전송하도록 변경하였다.
개요
Cluster failover를 처리하는 과정에서 glocator는 질의를 요청한 gagent 뿐만 아니라 failover 대상인 gagent에도 failover 결과를 보낸다. 그러나 이 경우, failover 대상인 gagent도 glocator에게 질의를 보내어 cluster failover를 처리하게 된다. 따라서 glocator가 질의를 요청한 gagent에게만 결과를 보내도록 변경하였다.
ISSUE-3314 JDBC, CallableStatement의 메소드인 registerOutParameter(), set..()이 동일한 파라미터에 사용되면 정상적인 값을 얻을 수 없다.
개요
CallableStatement를 이용하여 bind type이 명확하지 않은 procedure를 호출하여 out parameter의 값을 얻으려고 할 때, registerOutParameter() 메소드와 set...() 메소드를 이용하여 bind type을 INPUT OUTPUT으로 설정한다. 그리고 out parameter의 결과값을 얻기 위해 get...() 메소드를 호출하면 정상적인 값을 반환하지 않는다.
현상 및 증상
다음과 같이 table과 procedure를 생성한다.
CREATE TABLE PROC_TABLE ( I1 INTEGER );
INSERT INTO PROC_TABLE VALUES ( 1 );
INSERT INTO PROC_TABLE VALUES ( 2 );
INSERT INTO PROC_TABLE VALUES ( 3 );
INSERT INTO PROC_TABLE VALUES ( 4 );
INSERT INTO PROC_TABLE VALUES ( 5 );
INSERT INTO PROC_TABLE VALUES ( 6 );
COMMIT;
CREATE OR REPLACE PROCEDURE PROC_TEST_1( A1 INTEGER, A2 OUT INTEGER )
IS
BEGIN
SELECT COUNT(*)
INTO A2
FROM PROC_TABLE
WHERE I1 >= A1;
END;
/다음은 procedure PROC_TEST_1을 gsql에서 호출한 결과이다. 결과값은 두 번째 parameter의 out value에 저장된다.
gSQL> var v1 integer gSQL> var v2 integer gSQL> exec :v1 := 1 gSQL> call proc_test_1 (:v1,:v2); Procedure Call complete. gSQL> print NAME VALUE ------------------ ----- VAR_ELAPSED_TIME__ null V1 1 V2 6 gSQL>
다음은 procedure PROC_TEST_1을 호출하는 프로그램 코드의 일부이다.
CallableStatement sCstmt = aCon.prepareCall( "CALL PROC_TEST_1( ?, ? )" );
sCstmt.setInt( 1, 1 );
sCstmt.setInt( 2, 1 );
sCstmt.registerOutParameter( 1, Types.INTEGER );
sCstmt.registerOutParameter( 2, Types.INTEGER );
sCstmt.execute();
System.out.println("OUTPUT: " + sCstmt.getInt(1) + ", " + sCstmt.getInt(2) );
sCstmt.close();해당 프로그램을 실행하면 다음과 같이 out parameter 값이 두 번째 parameter가 아닌 첫 번째 parameter에 저장된다.
OUTPUT: 6, 0
수정 전 대처
다음과 같이 input, output 타입을 정확하게 확인하여 위와 같은 set 메소드와 registerOutParameter 메소드를 모두 사용하지 말아야 정상적인 값이 출력된다.
CallableStatement sCstmt = aCon.prepareCall( "CALL PROC_TEST_1( ?, ? )" );
sCstmt.setInt( 1, 1 );
sCstmt.registerOutParameter( 2, Types.INTEGER );
sCstmt.execute();
System.out.println("OUTPUT: " + sCstmt.getInt(1) + ", " + sCstmt.getInt(2) );
sCstmt.close();OUTPUT: 1, 6
ISSUE-3302 JDBC, CallableStatement의 메소드인 getBytes() 메소드를 실행하면 에러가 발생한다.
개요
CallableStatement에서 out parameter의 타입이 BINARY, VARBINARY 또는 LONG VARBINARY인 경우 getBytes() 메소드를 사용하면 에러가 발생한다.
현상 및 증상
다음은 CallableStatement에 Types.BINARY로 out parameter를 등록하는 예이다.
CallableStatement sCStmt = aCon.prepareCall( "BEGIN ? := x'aaff'; END; " ); sCStmt.registerOutParameter(1, java.sql.Types.BINARY); sCStmt.executeUpdate(); byte[] sValue = sCStmt.getBytes(1);
위의 코드를 포함한 프로그램을 실행하면 다음과 같은 에러가 발생한다.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1 at indep.jdbc.dt.RowCache.readBytes(RowCache.java:637) at indep.jdbc.dt.Column.getBytes(Column.java:589) at indep.jdbc.core.JdbcCallableStatement.getBytes(JdbcCallableStatement.java:316)
수정 전 대처
없음
gloader의 명령 인자로 --group-id를 추가하였다.
개요
--group-id 인자는 클러스터 환경에서 sharded 테이블에 그룹별로 데이터를 업로드 할 수 있도록 한다.
gloader의 명령 인자로 --directio-size를 추가하였다.
개요
--directio-size 인자를 이용하여 direct IO 크기를 조절할 수 있다.
3.2.10 Patch Note
ISSUE-3253 서비스 도중에 오프라인 테이블스페이스를 복구하면 로그버퍼에 기록된 로그를 복구하지 않는 문제가 있다.
개요
GOLDILOCKS의 오프라인 테이블스페이스를 온라인으로 변경할 때 복구가 필요한 경우가 있고 그렇지 않은 경우도 있다. 복구가 필요한 경우는 오프라인 구문에서 IMMEDIATE 옵션을 사용하였거나, 운영 중에 데이터 파일에 문제가 발생하여 해당 테이블스페이스가 오프라인 된 경우이다. 이 경우, 해당 테이블스페이스에 대한 로그가 버퍼에 남아있을 수 있는데 로그 파일에 기록된 로그만으로 복구를 수행하여 시스템이 비정상 종료하거나 데이터베이스 일관성이 어긋나는 문제가 발생하였다.
현상 및 증상
사용자가 생성한 테이블스페이스에 테이블 T1을 생성한 후 트랜잭션 TX1이 T1을 갱신하는 도중에 데이터 파일을 삭제하고 체크포인트를 발생시킨다. 체크포인트를 수행할 때 데이터 파일이 존재하지 않으면 해당 테이블스페이스를 오프라인으로 변경하고 이후 트랜잭션 TX1을 rollback한다. 그리고 로그버퍼의 로그가 디스크로 씌여지지 않은 상태에서 오프라인 된 테이블스페이스를 복구하고 온라인으로 변경하면 비정상적으로 종료된다.
수정 전 대처
없음
ISSUE-3222 Cluster 환경에서 GOLDILOCKS 시스템 프로세스가 hangup 상태일 때 시스템 전체가 멈춘다.
개요
Cluster 환경에서 원격 cluster member에 protocol을 전송한 후 응답을 기다릴 때, 원격 cluster member의 GOLDILOCKS 시스템 프로세스가 hangup 상태여서 응답을 보내주지 못하는 경우 응답을 기다리는 세션 뿐만 아니라 전체 시스템이 멈추는 현상이 발생한다. 이는 GOLDILOCKS 내부적으로 응답을 반드시 받아야만 하는 protocol에 대해 query timeout 이나 session 상태를 체크하지 않기 때문에 나타나는 현상이다. 이에, 특정 시간동안 응답이 없는 경우 세션을 종료시키거나 응답이 없는 원격 cluster member를 failover 시킨 후에 서비스를 진행하도록 수정하였다.
세션을 종료시키는 정책을 사용할 경우, CLUSTER_PROTOCOL_SESSION_FATAL_POLICY_TIMEOUT에 설정된 시간(초) 동안 대기한 후에 세션을 종료시킨다. 반면에 failover 하는 정책을 사용할 경우, CLUSTER_PROTOCOL_FAILOVER_POLICY_TIMEOUT 에 설정된 시간 (초) 만큼 대기한 후 응답이 없는 원격 cluster member를 failover 시킨다.
현상 및 증상
G1N1, G1N2로 구성된 1 by 2 cluster에서 G1N2 member의 commit 서버를 hangup 상태로 만든 후 G1N1에 접속한 세션에서 commit을 실행하면 세션이 응답을 받지 못하여 멈추게 된다.
G1N2 member의 gmaster를 hangup 상태로 만든 후 G1N1에 접속한 세션에서 ALTER SYSTEM SWITCH LOGFILE을 수행하면 세션이 응답을 받지 못하여 멈추게 된다.
수정 전 대처
없음
ISSUE-3175 gpec이 #define 구문에서 주석을 처리하지 못한다.
개요
#define 구문에 주석이 있는 경우 gpec이 이를 처리하지 못한다.
현상 및 증상
다음 gc 파일의 매크로 AA는 1로 동일한 내용이어야 한다. 하지만 gpec이 매크로에 있는 주석을 처리하지 못하여 다른 내용으로 처리하고 있다. gpec이 다음 gc 파일을 처리하면 경고 메시지를 출력한다.
#define AA 1 /* comment */ #define AA 1
ERR-42000(41028): 'AA' macro is already defined at line 3, in file test.gc
수정 전 대처
없음
ISSUE-3175 gpec이 #if, #else에서 define 구문을 정상적으로 처리하지 못한다.
개요
#if와 #endif 또는 #else와 #endif 사이에 #define을 사용할 경우, gpec이 이를 정상적으로 처리하지 못한다.
현상 및 증상
#if와 #endif 또는 #else와 #endif 사이에 false 조건에 속한 #define이 있을 경우 gpec이 이를 처리하지 않아야 함에도 불구하고 처리하고 있다.
다음과 같은 gc 파일이 있을 때 gpec은 false 조건에 해당하는 #define AA 2를 처리하지 않아야 한다. 그러나 실제로는 이를 무시하지 않고 처리하여 에러를 발생시킨다.
#if 1 #define AA 1 #else #define AA 2 #endif
ERR-42000(41028): 'AA' macro is already defined at line 4, in file test.gc
수정 전 대처
없음
ISSUE-3175 gpec이 처리하는 #define 구문의 개수가 고정되어 있다.
개요
gpec이 관리하는 #define 구문이 256 개로 고정되어 있으며 256 개를 초과하면 에러가 발생한다.
현상 및 증상
gc 파일에 서로 다른 #define 구문이 256 개를 넘으면 다음과 같은 에러가 발생한다.
ERR-42000(41000): syntax error at line 258, in file test.gc ERR-42000(41027): too many 'define' macro (256)
수정 전 대처
없음
ISSUE-3175 gpec이 비어있는 브라켓 주석을 정상적으로 처리하지 못한다.
개요
/**/ 와 같이 내용 없이 비어있는 브라켓 주석 다음에 임의의 내용이 있는 브라켓 주석이 존재할 경우 gpec이 정상적으로 파싱하지 못한다.
현상 및 증상
다음은 빈 브라켓 주석과 일반적인 브라켓 주석이 함께 사용된 gc 파일이다.
/**/ EXEC SQL BEGIN DECLARE SECTION; int value; EXEC SQL END DECLARE SECTION; /* comment */ EXEC SQL SELECT 1 INTO :value FROM DUAL;
이 gc 파일을 gpec이 파싱하면 도중에 다음과 같은 에러가 발생한다.
ERR-42000(41000): syntax error at line 8, in file a.gc:
SELECT 1 INTO :value FROM DUAL;
^ ^
Error at line 1
ERR-42000(41002): Host variable "value" not declared
ERR-42000(41006): Fatal error while doing embedded SQL precompiling수정 전 대처
빈 브라켓 주석을 사용하지 않는다.
ISSUE-3243 glsnr이 잘못된 프로토콜을 받으면 종료된다.
개요
glsnr이 잘못된 프로토콜을 받으면 종료되어 버리는 문제를 수정하였다. 수정 후 다음과 같은 로그 메세지를 출력하지만 glsnr이 종료되지는 않는다.
2020-01-15 17:57:51.835036 THREAD(27742,139777341413120)] [LISTENER] Invalid communication protocol : 192.168.0.123
현상 및 증상
glsnr이 잘못된 프로토콜을 받을 경우 다음과 같은 로그 메세지를 남기며 종료된다.
[2020-01-15 11:14:28.738666 THREAD(5706,140285308184384)] [LISTENER] abnormally terminated ERR-08S01(24001): Invalid communication protocol
수정 전 대처
없음
ISSUE-3174 ODBC 속성에 LOCALITY_GROUP_POLICY, LOCALITY_GROUP_PATH, LOCALITY_MEMBER_POLICY, LOCALITY_MEMBER_PATH 항목을 추가하였다.
개요
ODBC 속성에 다음 항목들을 추가하였다.
LOCALITY_GROUP_POLICY
LOCALITY_GROUP_PATH
LOCALITY_MEMBER_POLICY
LOCALITY_MEMBER_PATH
ISSUE-3220 세 개 이상의 join에 대해 다수의 subquery 조건이 존재하면 일부 subquery 조건이 누락되었다.
개요
세 개 이상의 table을 join 할 때 두 개 이상의 subquery 조건이 존재할 경우 subquery 조건을 처리할 위치를 결정 (push-down subquery filter) 한다. 이 때, 첫 번째 subquery 조건을 가장 하위의 table에 배치하고, 두 번째 subquery 조건을 그 상위 join에 배치할 경우, 첫 번째 subquery 조건이 누락된다.
현상 및 증상
다음과 같이 table과 data를 생성한다.
CREATE TABLE r ( r_c1 INTEGER,
r_c2 INTEGER );
COMMIT;
CREATE TABLE s ( s_c1 INTEGER,
s_c2 INTEGER );
COMMIT;
CREATE TABLE t ( t_c1 INTEGER,
t_c2 INTEGER );
COMMIT;
CREATE TABLE u ( u_c1 INTEGER,
u_c2 INTEGER );
COMMIT;
CREATE TABLE v ( v_c1 INTEGER,
v_c2 INTEGER );
COMMIT;
INSERT INTO r VALUES ( 1, 1 );
INSERT INTO s VALUES ( 1, 1 );
INSERT INTO t VALUES ( 1, 1 );
INSERT INTO u VALUES ( 1, 1 );
INSERT INTO v VALUES ( 1, 1 );
COMMIT;다음 질의와 같이 EXISTS 조건이 존재할 경우, 조건을 만족하는 결과가 존재하지 않는다.
SELECT
*
FROM r,
s,
t
WHERE r_c1 = s_c1
AND s_c1 = t_c1
AND EXISTS (
SELECT u_c1
FROM u
GROUP BY u_c1
HAVING u_c1 < 0
)
;
no rows selected.그러나 위의 질의에 다음과 같이 AND NOT EXISTS subquery 조건을 추가할 경우, 잘못된 질의 결과를 생성한다.
--# wrong result
SELECT
*
FROM r,
s,
t
WHERE r_c1 = s_c1
AND s_c1 = t_c1
AND EXISTS (
SELECT u_c1
FROM u
GROUP BY u_c1
HAVING u_c1 < 0
)
AND NOT EXISTS ( SELECT *
FROM v
WHERE v_c1 = r_c1 + s_c1 )
;
R_C1 R_C2 S_C1 S_C2 T_C1 T_C2
---- ---- ---- ---- ---- ----
1 1 1 1 1 1
1 row selected.수정 전 대처
다음과 같이 NOT EXISTS subquery에 NO_PUSH_SUBQ 힌트를 추가하면 올바른 결과를 얻을 수 있다.
SELECT
*
FROM r,
s,
t
WHERE r_c1 = s_c1
AND s_c1 = t_c1
AND EXISTS (
SELECT u_c1
FROM u
GROUP BY u_c1
HAVING u_c1 < 0
)
AND NOT EXISTS ( SELECT /*+ NO_PUSH_SUBQ */ *
FROM v
WHERE v_c1 = r_c1 + s_c1 )
;
no rows selected.ISSUE-3199 EmbeddedSQL에서 array로 GroupId를 얻을 때 정상적으로 처리하지 못한다.
개요
Array로 GroupId를 얻고 캐시된 SQL 구문을 다시 실행하면 프로그램이 비정상적으로 종료된다.
현상 및 증상
EXEC SQL BEGIN DECLARE SECTION;
int sGroupId[5];
int sValue[5];
EXEC SQL END DECLARE SECTION;
int i;
for( i = 0; i < 5; i++ ) {
sValue[i] = i;
}
EXEC SQL GET GROUPID INTO: sGroupId
INSERT INTO TEST_T1 VALUES( :sValue );
EXEC SQL
INSERT INTO TEST_T1 VALUES( :sValue );캐시된 INSERT INTO TEST_T1 VALUES( :sValue ) 구문을 다시 수행하면 프로그램이 비정상적으로 종료된다.
수정 전 대처
Array를 사용하지 않거나 캐시된 SQL 구문을 사용하지 않도록 호스트 변수를 변경한다.
ISSUE-3197 gpec이 < ... > 문자열을 정상적으로 처리하지 못한다.
개요
gpec이 파싱할 때 < > 가 같은 줄에 있으면 정상적으로 처리되지 않는다.
현상 및 증상
for( i = 0; i < 5; i++ ) { // > COMMENT
sValue[i] = i;
}< 5; i++ ) { // > 문자열을 정상적으로 처리하지 못하여 gpec을 수행할 때 에러가 발생한다.
수정 전 대처
다음과 같이 브라켓이나 주석의 위치를 변경하여 gc 파일을 작성한다.
for( i = 0; i < 5; i++ ) // > COMMENT
{
sValue[i] = i;
}for( i = 0; i < 5; i++ ) {
// > COMMENT
sValue[i] = i;
}3.2.9 Patch Note
ISSUE-3188 gsql에 set heading을 추가하였다.
개요
set heading {on|off}를 이용하여 질의 결과에 헤더를 출력할지 여부를 설정할 수 있다.
3.2.8 Patch Note
ISSUE-3175 gpec이 non-ascii 문자를 처리하지 못한다.
개요
gpec이 처리하는 preprocessor #if, #ifdef, #elif, #else가 false 그룹일 경우, 해당 그룹 안의 내용은 공백으로 바뀐다. 그러나 false 그룹 안의 non-ascii 문자는 공백으로 처리되지 못한다.
현상 및 증상
#if 0
EXEC SQL INSERT INTO TEST_T1 VALUES( :sC1, :sC2 ); -- 주석
#endif위 예제 코드를 gpec으로 처리하면 모두 공백으로 바뀌어야 하지만 non-ascii 문자는 남아 있다.
주석
수정 전 대처
non-ascii 문자를 c 주석 형식으로 처리한다.
ISSUE-2958 Embedded SQL에서 SQL statement의 group ID를 얻을 수 있다.
개요
Global connection을 사용하는 cluster 환경에서 shard key가 설정된 table을 대상으로 delete/ insert/ select/ update 구문의 group ID를 얻을 수 있다. 자세한 내용은 embedded SQL의 EXEC SQL GET GROUPID INTO를 참조한다.
ISSUE-3186 노드 두 개가 동시에 비정상 종료될 경우, failover 과정에서 hang이 발생할 수 있다.
개요
Domain coordinator 노드와 global coordinator 노드가 동시에 비정상 종료될 경우, failover 과정에서 hang이 발생할 수 있어 이를 수정하였다.
현상 및 증상
failover 과정에서 hang이 발생함으로써 비정상 종료된 노드들이 속한 그룹들의 온라인 트랜잭션 서비스가 중지될수 있다.
수정 전 대처
없음
3.2.7 Patch Note
ISSUE-3093 gpec이 preprocessor #define을 파싱하는 중에 에러가 발생한다.
개요
Preprocessor #define의 대체 문자열에 C의 예약어가 올 경우, 에러가 발생한다.
현상 및 증상
#define SQLCA_STORAGE_CLASS extern
gpec을 수행할 때 파싱 에러가 발생한다.
$ gpec test.gc FileName: test.gc Pre-compile test.gc -> test.c ERR-42000(41000): syntax error at line 1, in file test.gc: #define SQLCA_STORAGE_CLASS extern ............................^ Error at line 1, in file test.gc
수정 전 대처
gpec을 수행하지 않는 일반 헤더 파일에 키워드를 정의하여 사용한다.
3.2.6 Patch Note
ISSUE-3149 SELECT INTO 구문에 구조체 배열을 사용하는 파일을 gpec이 정상적으로 파싱하지 못한다.
개요
SELECT INTO 구문에 호스트 변수로 구조체 배열을 사용하는 gc파일을 gpec이 정상적으로 처리하지 못한다.
현상 및 증상
EXEC SQL BEGIN DECLARE SECTION;
typedef struct AA
{
char c1[10+1];
char c2[10+1];
char c3[10+1];
char c4[10+1];
} AA;
AA sArr[10];
EXEC SQL END DECLARE SECTION;
EXEC SQL SELECT c1,c2,c3, c4
INTO :sArr FROM EMP;
STL_TRY(sqlca.sqlcode == 0);위 예제의 SELECT INTO 구문이 다음과 같이 올바르지 못한 구문으로 변경되었다.
sqlargs.sqlstmt = (char *)"SELECT c1,c2,c3,c4\n" " INTO :sArr ?, ?FROM EMP\n"
수정 전 대처
없음
ISSUE-3145 세션에서 사용 가능한 메모리가 있는데도 새로운 메모리를 할당하여 SSA가 증가한다.
개요
세션이 시작된 이후에 사용한 메모리는 세션에서 관리하며 재사용될 수 있고, 메모리 단편화를 고려하여 효율적으로 메모리를 할당하기 위해 메모리 크기에 따라 여러 개의 레벨로 관리된다. 사용 후에 해제된 메모리를 재할당하는 과정에서 단편화를 최소화하기 위해 재할당 할 수 있는 메모리가 있음에도 불구하고 새로운 메모리 청크를 할당함으로써 SSA가 지속적으로 증가하는 문제가 있어서 수정하였다.
현상 및 증상
LONG VARBINARY 타입을 포함한 테이블을 조회할 때 V$SYSTEM_MEM_STAT을 살펴보면 VARIABLE_STATIC_ALLOC_SIZE가 지속적으로 증가하는 것을 확인할 수 있다.
gSQL> SELECT STAT_NAME, ROUND(STAT_VALUE/1024/1024) FROM V$SYSTEM_MEM_STAT WHERE STAT_NAME = 'VARIABLE_STATIC_ALLOC_SIZE'; STAT_NAME ROUND(STAT_VALUE/1024/1024) -------------------------- --------------------------- VARIABLE_STATIC_ALLOC_SIZE 1800.25 1 row selected. gSQL> SELECT STAT_NAME, ROUND(STAT_VALUE/1024/1024) FROM V$SYSTEM_MEM_STAT WHERE STAT_NAME = 'VARIABLE_STATIC_ALLOC_SIZE'; STAT_NAME ROUND(STAT_VALUE/1024/1024) -------------------------- --------------------------- VARIABLE_STATIC_ALLOC_SIZE 3663.41 1 row selected.
수정 전 대처
없음
ISSUE-3144 필드 구분자와 라인 구분자의 첫 문자를 동일하게 사용하면 gloader가 데이터를 정상적으로 import하지 못한다.
개요
필드 구분자와 라인 구분자의 첫 문자를 동일하게 사용하면 데이터가 누락되거나 gloader 프로세스가 비정상적으로 종료된다.
현상 및 증상
>$ cat test.dat 1234^C2^C3456^S >$ gloader test test -i --tablename TEST --fieldterm ^C --lineterm ^R\n --data test.dat gSQL> SELECT * FROM TEST I1 I2 I3 ---- -- ------- 1234 C2 3456S 1 row selected.
위 예제에서 필드 구분자와 라인 구분자의 첫 문자가 ^로 동일하다. gloader가 import를 수행한 후에column I3의 정상적인 결과값은 3456^S 이 되어야 하지만 실제 결과는 ^ 문자가 누락된 비정상 데이터이다.
수정 전 대처
필드 구분자와 라인 구분자의 첫 문자를 서로 다르게 사용한다.
3.2.5 Patch Note
ISSUE-3093 #define과 #undef를 declare section 내에 선언해야 gpec이 이를 처리함 또한 #ifdef 와 같은 if group의 false 값에 대한 문장을 공백으로 변경하지 않는다.
개요
gpec이 declare section 내에 선언된 #define과 #undef를 처리하는 바람에 #if, #ifdef과 같은 if group에서 매크로를 정상적으로 처리하지 못하고 있다. 또한 false 값에 해당하는 if group의 c code를 공백으로 변경하지 않아 c code 또는 SQL statement 중간에 preprocessor를 사용할 수 없다.
현상 및 증상
Preprocessor #define과 #undef를 declare section 내에 선언하지 않으면 gpec이 처리하지 못하여 해당 매크로를 인식하지 못한다. SQL 중간에 if group에 해당하는 preprocessor를 사용하지 못하여 사용자가 같은 내용의 코드를 반복하여 작성해야 한다.
#define _DEV_ EXEC SQL BEGIN DECLARE SECTION; char #ifdef _DEV_ 1 sTrue[10]; 2 #else sFalse[10]; #endif EXEC SQL END DECLARE SECTION; EXEC SQL SELECT 3 #ifdef _DEV_ "true" INTO :sTrue #else "false" INTO :sFalse #endif FROM DUAL;
1 _DEV_ 가 declare section 밖에 선언되어 false가 된다.
2 Preprocessor가 공백 처리되지 않아 gpec이 파싱 에러 처리한다.
3 SQL 구문 파싱 중에 에러가 발생한다.
수정 전 대처
Preprocessor #define과 #undef를 declare section 내에 선언하여 사용하고, c code와 SQL 구문 중간에 preprocessor를 사용하지 않는다.
ISSUE-3075 JDBC의 PreparedStatement.setCharactertStream(int, Reader, int) method와 PreparedStatement.addBatch() method를 반복 수행할 때 data type이 변경되어 에러가 발생한다.
개요
JDBC의 PreparedStatement 클래스 method인 setAsciiStream(), setBinaryStream(), setCharacterStream() method를 수행할 때 기존에는 매개 변수 length로 data type을 결정하였던 것을 long data type만 사용하도록 변경하였다.
현상 및 증상
setCharacterStream() method로 VARCHAR 타입이 허용하는 길이의 데이터를 설정한 후에 addBatch() method를 호출하고, setCharacterStream() method로 VARCHAR 타입이 허용하는 길이를 초과하는 데이터를 설정하려고 시도하면 data type이 VARCHAR에서 LONG VARCHAR로 변경되어 에러가 발생한다.
gSQL> create table t1 ( i1 long varchar ); Table created.
sPstmt.setCharacterStream( 1, new StringReader( DATA ), DATA.length() ); sPstmt.addBatch(); sPstmt.setCharacterStream( 2, new StringReader(BIG_DATA), BIG_DATA.length() ); sPstmt.addBatch();
Caused by: java.sql.SQLException: Parameter type[LONG VARCHAR] is mismatch with previous type[VARCHAR] during batch
수정 전 대처
PrepraredStatement 클래스의 set Ascii/ Binary/ Character Stream() method에는 매개 변수 length가 주어진 method와 length가 없는 method 두 종류가 있다. 이 중에 매개 변수 length가 없는 method를 이용한다.
ISSUE-3056 JDBC의 ResultSet.getBoolean()을 수행했을 때 TRUE/ FALSE를 반환하는 문자열이 확장되었다.
개요
JDBC의 ResultSet.getBoolean()을 수행할 때 기존에는 "true", "false" 문자열만 boolean 타입으로 변환할 수 있었지만 "t", "f", "y", "n", "yes", "no", "on", "off", "1", "0" 문자열도 변환할 수 있도록 변경하였다.
현상 및 증상
문자열 "0", "1" 을 ResultSet.getBoolean()으로 읽을 경우, 에러가 발생한다.
gSQL> create table t1 ( i1 varchar(10) ); Table created. gSQL> insert into t1 values ( '1' ); 1 row created. gSQL> commit; Commit complete.
ResultSet rs = stmt.executeQuery("select * from t1");
while(rs.next())
{
System.out.println( rs.getBoolean(1) );
}Exception in thread "main" java.sql.SQLException: The value[1] is out of range of [boolean] type
수정 전 대처
없음
ISSUE-3055 서버와 클라이언트의 character set이 다른 상태에서 연결할 때 invalid 문자를 전송한다.
개요
서버와 클라이언트의 character set이 다른 상태에서 연결할 경우 invalid 문자가 전송되는 문제를 수정하였다.
현상 및 증상
리눅스 서버에서 "가" 사용자가 생성된다.
gSQL> create user "가" identified by test; User created. gSQL> grant create session to "가"; Grant succeeded. gSQL> commit; Commit complete.
윈도우 클라이언트에서 리눅스 서버로 연결할 때 에러가 발생한다.
D:\goldilocks_home\bin>gsqlnet.exe "가" test ERR-28000(16004): invalid username/password; logon denied
리눅스 클라이언트에서 리눅스 서버로 연결할 때는 정상적으로 동작한다.
% gsqlnet "가" test gSQL>
수정 전 대처
서버와 클라이언트의 character set을 동일하게 설정하거나 연결할 때 사용되는 문자열에 ASCII만 포함시키도록 한다.
ISSUE-2359 부모 세션이 없는 cluster peer가 존재한다.
개요
원격 노드에 부모 세션이 없는 cluster peer가 존재하는 문제가 발생하여 이를 수정하였다.
현상 및 증상
부모 세션이 로그인을 시도하다가 패스워드 변경 과정에서 에러가 발생한 경우, 원격 노드에 부모 세션이 없는 cluster peer가 남아 있을 수 있다. 패스워드를 변경하는 과정에서 원격 노드에 cluster peer 세션이 만들어질 수 있고 패스워드 변경에 실패하면 cluster peer 세션을 종료하지 않은 상태에서 부모 세션을 종료한다.
수정 전 대처
없음
3.2.4 Patch Note
ISSUE-3026 gsql에서 \ddl_tablespace 수행 시 AT 구문 위치를 수정하였다.
개요
gsql에서 \ddl_tablespace를 수행할 때 AT 구문 위치가 잘못되는 문제를 수정하였다.
현상 및 증상
\ddl_tablespace로 생성된 SQL 구문을 실행할 때 오류가 발생한다.gSQL> create tablespace test_tbs datafile 'test.dbf' size 10m;
Tablespace created.
gSQL> \ddl_tablespace test_tbs
SET SESSION AUTHORIZATION "SYS";
CREATE MEMORY DATA TABLESPACE "TEST_TBS"
DATAFILE
'/home/sunje/goldilocks_data/db/test.dbf'
AT "G2N1"
SIZE 10485760 REUSE
,
'/home/sunje/goldilocks_data/db/test.dbf'
AT "G2N2"
SIZE 10485760 REUSE
ONLINE
LOGGING
EXTSIZE 262144
;
COMMIT;gSQL> CREATE MEMORY DATA TABLESPACE "TEST_TBS"
DATAFILE
'/home/sunje/goldilocks_data/db/test.dbf'
AT "G2N1"
SIZE 10485760 REUSE
,
'/home/sunje/goldilocks_data/db/test.dbf'
AT "G2N2"
SIZE 10485760 REUSE
ONLINE
LOGGING
EXTSIZE 262144;
ERR-42000(40000): syntax error:
AT "G2N1"
^^
Error at line 4수정 전 대처
\ddl_tablespace로 생성된 SQL에서 AT 구문 위치를 수정한다.
gSQL> CREATE MEMORY DATA TABLESPACE "TEST_TBS"
DATAFILE
'/home/sunje/goldilocks_data/db/test.dbf'
SIZE 10485760 REUSE
AT "G2N1"
,
'/home/sunje/goldilocks_data/db/test.dbf'
SIZE 10485760 REUSE
AT "G2N2"
ONLINE LOGGING
EXTSIZE 262144;
Tablespace created.ISSUE-3023 BEGIN BACKUP AT DOMAIN을 사용할 때 오류가 있다.
개요
특정 그룹이나 멤버에서만 백업을 수행하기 위해 AT DOMAIN 절을 사용할 경우, 정상적으로 동작하지 않는 문제가 있어서 이를 수정하였다.
현상 및 증상
다음과 같이 G1N2 멤버가 ARCHIVELOG로 동작하고 있는데도 BEGIN BACKUP이 실패하는 문제가 있다.
gSQL> SELECT ARCHIVELOG_MODE FROM V$ARCHIVELOG; ARCHIVELOG_MODE --------------- ARCHIVELOG 1 row selected. gSQL> ALTER DATABASE BEGIN BACKUP AT G1N2; ERR-HY000(16247): MEMBER(G1N1): cannot BACKUP; noarchivelog mode
수정 전 대처
AT DOMAIN을 사용하지 않고 BACKUP BEGIN/ END를 수행한다.
3.2.3 Patch Note
ISSUE-3006 EXPLAIN PLAN ONLY를 수행할 때 트랜잭션이 생성된다.
개요
EXPLAIN PLAN ONLY를 수행할 때 트랜잭션이 생성되는 문제를 수정하였다.
현상 및 증상
gSQL> select * from x$transaction;
no rows selected.
gSQL> \explain plan only update t2 set c2 = 1 where c1 = 10;
>>> start print plan
< Execution Plan >
==================================================================================================
| IDX | NODE DESCRIPTION | ROWS |
--------------------------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | |
| 1 | UPDATE ("T2") | 0 |
| 2 | INDEX ACCESS ("T2", "T2_PRIMARY_KEY_INDEX") [CLONED] | 0 |
==================================================================================================
0 - SQL : UPDATE "PUBLIC"."T2"@LOCAL "_A1" SET("C2")=(:_V0) WHERE "_A1"."C1" = :_V1
2 - READ INDEX COLUMNS : C1
MIN RANGE : C1 = 10
MAX RANGE : C1 = 10
<<< end print plan
gSQL> select * from x$transaction;
PHYSICAL_TRANS_ID LOGICAL_TRANS_ID DRIVER_MEMBER_POS DRIVER_MEMBER_ID DRIVER_TRANS_ID SLOT_ID STATE IS_XA INDOUBT_TRANS_BEHAVIOR ATTRIBUTE ISOLATION_LEVEL VIEW_SCN COMMIT_SCN PREV_COMMIT_SCN TCN BEGIN_LSN USED_UNDO_PAGE_COUNT UNDO_SEGMENT_ID SEQ BEGIN_TIME PROPAGATE_LOG REPREPARABLE GRID_SEQ WEIGHT
----------------- ---------------- ----------------- ---------------- --------------- ------- ------ ----- ---------------------- --------- --------------- -------- ---------- --------------- --- --------- -------------------- --------------- --- -------------------------- ------------- ------------ -------- ------
-65480 458808 0 1 458808 56 ACTIVE FALSE 0 READ_ONLY READ COMMITTED 502.1.77 -1.-1.-1 502.0.77 1 -1 0 4294901760 7 2019-07-02 17:40:13.659857 TRUE TRUE 7 HIGH
1 row selected.
gSQL> commit;
Commit complete.
gSQL> select * from x$transaction;
no rows selected.수정 전 대처
없음
3.2.2 Patch Note
ISSUE-2947 Cluster 환경에서 동일한 세션에서 수행한 원격 그룹의 이전 버전 데이터를 조회한다.
개요
하나의 세션에서 특정 원격 그룹에서만 변경되는 domain 트랜잭션을 실행한 후 select 할 때 동일한 데이터의 이전 버전을 조회하는 문제를 수정하였다.
현상 및 증상
다음과 같이 G1, G2 클러스터 그룹에서 sharded table을 생성한 후 G1에 위치한 shard에 레코드를 추가한다.
gSQL> CREATE TABLE T1 ( C1 NUMBER ) SHARDING BY RANGE ( C1 ) SHARD S1 VALUES LESS THAN ( 1000 ) AT CLUSTER GROUP G1, SHARD S2 VALUES LESS THAN ( MAXVALUE ) AT CLUSTER GROUP G2; Table created. gSQL> ALTER TABLE T1 ADD PRIMARY KEY ( C1 ); Table altered. gSQL> INSERT INTO T1 VALUES ( 1 ); 1 row created. gSQL> COMMIT; Commit complete.
G2 그룹의 member에 접속한 세션 (session 1)에서 G1 그룹의 레코드를 삭제 (트랜잭션 T1)한 후, 다른 세션 (session 2)에서 global 트랜잭션 (트랜잭션 T2)을 수행하고 COMMIT 한다. 이 때 G1 그룹에서 T2가 완료되고, G2 그룹에서는 완료되지 않은 상태에서 T1을 COMMIT 한 다음 다시 G1의 레코드를 조회하면 삭제된 레코드가 조회되는 문제가 있다.
gSQL> DELETE FROM T1 WHERE C1 = 1; // T1 -- session 1 1 row deleted. gSQL> CREATE TABLE T2 ( I1 INTEGER ); // T2 -- session 2 Table created. gSQL> COMMIT; // -- session 2 Commit complete. gSQL> COMMIT; // -- session 1 Commit complete. gSQL> SELECT * FROM T1 WHERE C1 = 1; // -- session 1 C1 -- 1 1 row selected.
수정 전 대처
동일한 세션에서 domain 트랜잭션을 수행한 후에 select를 수행할 경우, SELECT 문을 SELECT FOR UPDATE로 대체해서 수행한다.
ISSUE-2965 JDBC에서 BigDecimal 타입을 parameter로 사용하면 데이터가 손실된다.
개요
Double 타입의 정밀도를 벗어나는 값을 BigDecimal 타입으로 parameter로 사용하면 데이터가 손실되는 문제를 수정하였다.
현상 및 증상
사용자의 의도와 다르게 데이터 손실이 발생한다.
gSQL> CREATE TABLE T1 ( C1 NUMBER ); Table created.
PreparedStatement pstmt = con.prepareStatement("INSERT INTO T1 VALUES (?)");
pstmt.setBigDecimal(1, new BigDecimal("12345678901234567890.123456789"));
pstmt.executeUpdate();gSQL> select * from t1;
C1
--------------------
12345678901234600000
1 row selected.수정 전 대처
BigDecimal 타입 대신 문자열로 처리한다.
pstmt.setString(1, "12345678901234567890.123456789");
gSQL> \set numsize 40
gSQL> select * from t1;
C1
------------------------------
12345678901234567890.123456789
1 row selected.ISSUE-2955 Cluster 환경에서 gsqlnet이 cstartup 또는 cshutdown을 연속적으로 실행할 수 없다.
개요
gsqlnet은 ODBC를 통해 location 파일과 glocator의 접속 정보를 구축한다. 이 정보는 cstartup이나 cshutdown 명령을 처음으로 수행할 때 구축된다. cstartup이나 cshutdown 명령을 두 번째로 수행하면 정보 구축 과정을 무시하는데 이 때 flag 설정이 잘못되어 에러가 발생하였다.
현상 및 증상
gsqlnet 프로세스에서 cstartup이나 cshutdown을 수행 후 다시 cshutdown 또는 cstartup을 수행하면 에러가 발생한다.
수정 전 대처
gsqlnet 세션을 재시작하여 cstartup 또는 cshutdown 명령을 해야 한다.
ISSUE-2943 Cluster 환경에서 query timeout 발생 시 agable scn이 증가하지 않는다.
개요
클러스터 환경에서 DML이 async로 처리될 때 원격 멤버들의 view scn 정보를 세션에 설정한다. 이 때 원격 멤버들 중 단 하나에게도 DML을 전송하지 못한 상태에서 query timeout과 같은 예외 상황이 발생하면 세션에 설정된 원격 멤버들의 view scn 정보가 초기화 되지 않는 버그가 있었다. 이로 인해 시스템에 수행 중인 statement가 없는데도 해당 세션이 연결되어 있는 동안 시스템의 agable scn이 증가하지 않는 문제가 있었다.
Async 처리에 예외 상황이 발생하면 원격 멤버들의 view scn 정보를 초기화하여 문제가 발생하지 않도록 수정하였다.
현상 및 증상
클러스터 환경에서 query timeout이 발생한 후에 agable scn이 멈추게 되어 undo, data 공간이 부족해진다.
수정 전 대처
Query timeout이 발생한 세션을 종료한다.
ISSUE-2927 트랜잭션 슬롯 부족으로 인해 deadlock이 발생한다.
개요
트랜잭션 슬롯이 부족한 상황에서 모든 서버 프로세스들이 트랜잭션 슬롯을 할당하는 경우 기존 트랜잭션들이 슬롯을 해제하지 않으면 hang이 발생할 수 있다. 이 경우 정해진 시간이 경과하면 해당 패치에 에러가 발생하도록 수정하였다.
현상 및 증상
동시에 여러 세션에서 transaction이 발생할 때 transaction slot이 부족하여 hang이 발생한다.
수정 전 대처
없음
ISSUE-2922 ODBC의 statement 속성에 SQL_ATTR_FETCH_FAILOVER를 추가하였다.
개요
ODBC의 statement 속성에 SQL_ATTR_FETCH_FAILOVER를 추가하였으며 다음과 같은 값을 설정할 수 있다.
SQL_FETCH_FAILOVER_OFF
SQL_FETCH_FAILOVER_ON
SQLSetStmtAttr( stmt,
SQL_ATTR_FETCH_FAILOVER,
(SQLPOINTER)SQL_FETCH_FAILOVER_ON,
0 )현상 및 증상
없음
수정 전 대처
없음
ISSUE-2513 EXEC SQL AT :sConn DISCONNECT에서 VARCHAR 타입을 인식하지 못한다.
개요
gpec이 EXEC SQL AT 절에서 VARCHAR 타입을 char 타입으로 인식한다.
현상 및 증상
VARCHAR 타입 변수를 EXEC SQL AT 절에 사용했을 때 gpec이 VARCHAR 타입이 아닌 char 타입으로 처리한다.
Example gc file
EXEC SQL BEGIN DECLARE SECTION; VARCHAR sAT[20]; EXEC SQL END DECLARE SECTION; EXEC SQL AT :sAT DISCONNECT;
Example c file generated by gpec
sqlargs.conn = (char *)sAT; sqlargs.sql_ca = &sqlca; sqlargs.sql_state = SQLSTATE; sqlargs.sqltype = 35; sqlargs.sqlfn = (char *)__FILE__; sqlargs.sqlln = __LINE__; sqlargs.sqlstmt = NULL; sqlargs.atomic = 0; sqlargs.unsafenull = 0; sqlargs.iters = 0; DBESQL_Disconnect(NULL, &sqlargs, NULL, 0);
VARCHAR 타입을 char * 타입으로 처리하여 gpec이 생성한 c 파일을 컴파일하는 과정에서 에러가 발생한다.
수정 전 대처
VARCHAR 타입 대신 char 타입을 사용한다.
ISSUE-2349 gpec이 전처리기를 처리하는 경우 __LINE__ 매크로가 잘못된 라인을 가리킨다.
개요
gpec이 #if와 같은 전처리기를 처리할 때 __LINE__ 매크로가 잘못된 라인을 가리킨다.
현상 및 증상
gpec이 #if, #ifdef, #ifndef, #else, #elif 전처리기를 처리할 때 주석을 추가하면서 원래 의도하였던 __LINE__ 매크로 값이 아닌 잘못된 값이 도출된다.
Example gc file
#if 0
printf("[%s:%d] if\n", __FILE__, __LINE__);
#else
printf("[%s:%d] else\n", __FILE__, __LINE__);
#endif
printf("[%s:%d] endif\n", __FILE__, __LINE__);gpec이 해당 코드를 처리한 결과는 다음과 같다.
Example c file generated by gpec
#if 0
/*Macro condition FALSE*/
printf("[%s:%d] if\n", __FILE__, __LINE__);
#else
/*Macro condition TRUE*/
printf("[%s:%d] else\n", __FILE__, __LINE__);
#endif
printf("[%s:%d] endif\n", __FILE__, __LINE__);gpec이 생성한 c 파일을 실행하면 의도하지 않은 라인이 출력된다.
$ ./pp_bug [pp_bug.gc:9] else [pp_bug.gc:11] endif
정상적인 __LINE__ 매크로 값은 다음과 같다.
$ ./pp_bug [pp_bug.gc:7] else [pp_bug.gc:9] endif
수정 전 대처
없음
3.2.1 Patch Note
ISSUE-2902 Cluster 환경에서 global sequence 값을 참조할 때 deadlock이 발생한다.
개요
Cluster 환경에서 global sequence 값 참조 시 local member에 캐싱된 값이 고갈되어 다음 값을 구하기 위해 모든 cluster member 들에 global sequence latch를 잡아야 하는데, 이 과정에서 deadlock 이 발생하여 수정하였다.
현상 및 증상
동시에 여러 세션에서 global sequence 값을 참조하는 statement를 반복해서 수행할 때 deadlock으로 인해 hang이 발생한다.
수정 전 대처
없음