데이터베이스 관리 및 정보 조회
병렬 복구
병렬 복구 기능이 추가되었다. ALTER DATABASE RECOVER에서 PARALLEL을 사용하여 복구에 참여하는 slave thread 수를 지정할 수 있으며, 데이터베이스·데이터 파일·테이블스페이스 복구 및 불완전 복구에 사용할 수 있다. 온라인 로그와 archive 로그를 적용하여 데이터 파일을 복구한다.
Slave thread 수는 0~64 로 지정할 수 있다. 0 또는 NOPARALLEL을 지정하면 master thread만 사용한다. 병렬 복구 절 또는 PARALLEL의 수를 생략하면 RECOVERY_SLAVES 값을 따른다. 데이터베이스 전체 완전 복구는 MOUNT 상태와 ARCHIVELOG 모드에서 수행한다.
관련 내용은 ALTER DATABASE RECOVER, recovery slaves clause를 참조한다.
병렬 백업
병렬 백업 기능이 추가되었다. ALTER DATABASE BACKUP INCREMENTAL의 PARALLEL 절로 백업 thread 수를 지정할 수 있다. 지정 범위는 1~64이며, PARALLEL의 수를 생략하면 1로 설정되고, PARALLEL 절 자체를 생략하면 NOPARALLEL로 동작한다.
실제 병렬 처리 수는 대상 데이터 파일 수와 PIECE 수에 따라 제한된다. 지정한 병렬 수보다 데이터 파일이나 PIECE 수가 적으면 해당 개수만큼 병렬 처리한다.
관련 내용은 ALTER DATABASE BACKUP, parallel clause를 참조한다.
병렬 복원
병렬 복원 기능이 추가되었다. ALTER DATABASE RESTORE 및 테이블스페이스 복원 구문에서 PARALLEL 을 사용하여 thread 수를 지정하고, 증분 백업의 데이터 파일을 복원할 수 있다. 데이터베이스 전체 복원은 MOUNT 상태에서 수행한다.
병렬 수는 1~64 지정할 수 있으며, PARALLEL의 수를 생략하면 1로 설정된다. PARALLEL 절 자체를 생략하면 NOPARALLEL로 동작한다.
관련 내용은 ALTER DATABASE RESTORE, parallel clause를 참조한다.
DICTIONARY_SCHEMA 역할 정보 View
역할과 역할에 부여된 권한을 조회할 수 있는 다음 DICTIONARY_SCHEMA view가 추가되었다. 역할 목록, 사용자 및 역할에 부여된 관계, 역할에 부여된 권한, 현재 세션의 활성 역할을 확인할 수 있다.
항목 | 설명 |
|---|---|
DBA_ROLES DBA_ROLE_PRIVS USER_ROLE_PRIVS | 전체 역할, 모든 사용자·역할에 부여된 역할, 현재 사용자에게 부여된 역할을 조회한다. |
ROLE_COL_PRIVS ROLE_DB_PRIVS ROLE_PACKAGE_PRIVS ROLE_PROC_PRIVS | 역할에 부여된 column·데이터베이스·패키지·루틴 권한을 조회한다. |
ROLE_ROLE_PRIVS ROLE_SCHEMA_PRIVS ROLE_SEQ_PRIVS | 역할 간에 부여된 관계와 스키마·시퀀스 권한을 조회한다. |
ROLE_SYS_PRIVS ROLE_TAB_PRIVS ROLE_TBS_PRIVS | 시스템 권한 (데이터베이스·테이블스페이스·스키마), 테이블 권한, 테이블스페이스 권한을 조회한다. |
SESSION_ROLES | 현재 세션에서 활성화된 역할을 조회한다. |
ROLE_*_PRIVS view는 사용자가 접근할 수 있는 역할에 부여된 권한 정보를 제공한다.
관련 내용은 DBA_ROLES, DBA_ROLE_PRIVS, ROLE_COL_PRIVS, SESSION_ROLES를 참조한다.
DICTIONARY_SCHEMA 히스토그램 View
히스토그램 버킷 정보를 조회할 수 있는 다음 DICTIONARY_SCHEMA view가 추가되었다. BALANCE 계열 view는 height-balanced histogram 의 버킷 정보를, FREQUENCY 계열 view는 frequency histogram의 버킷 정보를 조회한다.
항목 | 설명 |
|---|---|
ALL_HISTOGRAM_BALANCE, ALL_HISTOGRAM_FREQUENCY | 현재 사용자가 접근할 수 있는 버킷을 조회한다. |
DBA_HISTOGRAM_BALANCE, DBA_HISTOGRAM_FREQUENCY | 전체 버킷을 조회한다. |
USER_HISTOGRAM_BALANCE, USER_HISTOGRAM_FREQUENCY | 현재 사용자가 소유한 버킷을 조회한다. |
관련 내용은 ALL_HISTOGRAM_BALANCE, ALL_HISTOGRAM_FREQUENCY, DBA_HISTOGRAM_BALANCE, USER_HISTOGRAM_BALANCE를 참조한다.
DICTIONARY_SCHEMA 라이브러리 View
라이브러리 객체와 권한을 조회할 수 있는 다음 DICTIONARY_SCHEMA view가 추가되었다. 라이브러리 객체의 조회 범위와 권한 부여 및 수신 관계를 구분하여 확인할 수 있다.
항목 | 설명 |
|---|---|
ALL_LIBRARIES, DBA_LIBRARIES, USER_LIBRARIES | 각각 현재 사용자가 접근할 수 있는 라이브러리, 전체 라이브러리, 현재 사용자가 소유한 라이브러리를 조회한다. |
ALL_LIBRARY_PRIVS, ALL_LIBRARY_PRIVS_MADE, ALL_LIBRARY_PRIVS_RECD | ALL_LIBRARY_PRIVS는 현재 사용자의 소유·부여·수신 관계와 활성 역할 또는 PUBLIC이 수신자인 권한을 조회한다. ALL_LIBRARY_PRIVS_MADE는 사용자가 소유자 또는 부여자인 권한을, ALL_LIBRARY_PRIVS_RECD는 사용자, 활성 역할 또는 PUBLIC이 수신자인 권한을 조회한다. |
DBA_LIBRARY_PRIVS | 데이터베이스의 모든 라이브러리 권한 부여 정보를 조회한다. |
USER_LIBRARY_PRIVS, USER_LIBRARY_PRIVS_MADE, USER_LIBRARY_PRIVS_RECD | USER_LIBRARY_PRIVS는 현재 사용자가 소유자· 부여자 · 수신자인 권한을 조회한다. USER_LIBRARY_PRIVS_MADE는 현재 사용자가 소유자인 권한을, USER_LIBRARY_PRIVS_RECD는 현재 사용자가 수신자인 권한을 조회한다. |
ROLE_LIBRARY_PRIVS | 현재 사용자가 접근할 수 있는 역할에 부여된 라이브러리 권한을 조회한다. |
관련 내용은 ALL_LIBRARIES, ALL_LIBRARY_PRIVS, USER_LIBRARY_PRIVS, ROLE_LIBRARY_PRIVS를 참조한다.
DICTIONARY_SCHEMA 트리거 View
트리거 객체를 조회할 수 있는 ALL_TRIGGERS, DBA_TRIGGERS, USER_TRIGGERS가 추가되었다. ALL_TRIGGERS는 현재 사용자가 접근할 수 있는 테이블의 트리거를, DBA_TRIGGERS는 데이터베이스의 모든 트리거를, USER_TRIGGERS는 현재 사용자가 소유한 트리거를 조회한다.
관련 내용은 ALL_TRIGGERS, DBA_TRIGGERS, USER_TRIGGERS를 참조한다.
INFORMATION_SCHEMA 역할 정보 View
역할과 활성 역할의 권한을 조회할 수 있는 다음 INFORMATION_SCHEMA view가 추가되었다.
항목 | 설명 |
|---|---|
ADMINISTRABLE_ROLE_AUTHORIZATIONS | 현재 사용자 또는 역할이 WITH ADMIN OPTION을 갖는 역할 부여 정보를 조회한다. |
APPLICABLE_ROLES, ENABLED_ROLES | 현재 SQL 세션에 적용할 수 있는 역할과 활성화된 역할을 각각 조회한다. |
ROLE_COLUMN_GRANTS, ROLE_MODULE_GRANTS, ROLE_ROUTINE_GRANTS, ROLE_TABLE_GRANTS, ROLE_USAGE_GRANTS | 현재 활성 역할이 사용할 수 있거나 부여한 column·모듈·루틴·테이블 권한 및 객체 USAGE 권한을 조회한다. |
관련 내용은 ADMINISTRABLE_ROLE_AUTHORIZATIONS, APPLICABLE_ROLES, ENABLED_ROLES, ROLE_COLUMN_GRANTS를 참조한다.
CHECK_CONSTRAINTS View
CHECK 제약 조건을 조회할 수 있는 INFORMATION_SCHEMA.CHECK_CONSTRAINTS view가 추가되었다. 사용자 또는 역할이 소유한 제약 조건의 소유자·스키마·테이블·이름과 검사 조건을 확인할 수 있다. CHECK_CLAUSE는 CHECK 조건식을 제공하며, NOT NULL 제약 조건인 경우 NULL 을 반환한다.
관련 내용은 CHECK_CONSTRAINTS를 참조한다.
INFORMATION_SCHEMA 트리거 정보 View
트리거 정의, 실행 순서, 의존 객체를 조회할 수 있는 다음 INFORMATION_SCHEMA view가 추가되었다.
항목 | 설명 |
|---|---|
TRIGGERED_UPDATE_COLUMNS | 접근할 수 있는 트리거에서 UPDATE 이벤트 대상으로 지정한 column을 조회한다. |
TRIGGERS | 사용자 또는 역할이 접근할 수 있는 테이블에 정의된 트리거를 조회한다. |
TRIGGER_EVENT_ORDER | 동일한 테이블·실행 시점·행/문장 단위·이벤트를 공유하는 트리거의 실행 순서를 조회한다. |
TRIGGER_MODULE_USAGE, TRIGGER_ROUTINE_USAGE, TRIGGER_SEQUENCE_USAGE, TRIGGER_TABLE_USAGE | 트리거가 의존하는 모듈·루틴·시퀀스·테이블을 조회한다. |
관련 내용은 TRIGGERED_UPDATE_COLUMNS, TRIGGERS, TRIGGER_EVENT_ORDER, TRIGGER_TABLE_USAGE를 참조한다.
성능 및 내부 상태 조회 View
운영 상태를 조회할 수 있는 다음 PERFORMANCE_VIEW_SCHEMA view가 추가되었다.
항목 | 설명 |
|---|---|
V$DB_PROPERTY | 데이터베이스 생성 시 설정되는 영구 프로퍼티를 조회한다. 데이터베이스 생성 후에는 읽기 전용이다. |
V$RELATION | 테이블과 인덱스 관계의 유형·사용 가능 여부·할당된 페이지 수 등을 조회한다. |
V$TCL_LOGFILE | Transaction commit log 파일의 경로·그룹 상태·크기 등을 조회한다. |
V$ALLOCATOR | 메모리 할당기의 유형과 설명을 조회한다. |
V$CLUSTER_CONNECTION, V$CLUSTER_QUEUE | 클러스터 연결과 queue 정보를 조회한다. 클러스터에서만 사용할 수 있다. |
V$UNDO_SEGMENT | Undo segment 목록과 할당된 페이지 정보를 조회한다. |
관련 내용은 V$DB_PROPERTY, V$RELATION, V$TCL_LOGFILE, V$ALLOCATOR, V$CLUSTER_CONNECTION, V$CLUSTER_QUEUE, V$UNDO_SEGMENT를 참조한다.
RECOVERY_SLAVES
병렬 복구에 참여하는 slave thread 수를 제어하는 RECOVERY_SLAVES 프로퍼티가 추가되었다. 기본값은 8이며, 0으로 설정하면 slave thread 없이 master thread만 사용하여 복구한다. ALTER DATABASE RECOVER에서 병렬 복구 절 또는 PARALLEL의 수를 생략하면 RECOVERY_SLAVES 에 설정된 값을 사용한다.
관련 내용은 RECOVERY_SLAVES, <recovery slaves clause>를 참조한다.
히스토그램 생성 제어 프로퍼티
ANALYZE TABLE 수행 시 히스토그램 버킷 수와 샘플 수를 제어하는 다음 프로퍼티가 추가되었다.
항목 | 설명 |
|---|---|
HISTOGRAM_BALANCE_BUCKET_COUNT | Height-balanced histogram의 버킷 수를 지정한다. |
HISTOGRAM_BALANCE_MAX_SAMPLE_COUNT | Height-balanced histogram 구축 시 샘플링할 데이터의 최대 개수를 지정한다. |
HISTOGRAM_FREQUENCY_BUCKET_COUNT | Frequency histogram 생성 기준이 되는 버킷 수를 지정한다. 필요한 버킷 수가 설정값을 초과하면 생성하지 않는다. |
두 BUCKET_COUNT 프로퍼티의 기본값은 0이다. 값이 5 이하이면 해당 히스토그램을 구축하지 않으며, 매뉴얼에서 권장하는 값은 20이다.
관련 내용은 HISTOGRAM_BALANCE_BUCKET_COUNT, HISTOGRAM_BALANCE_MAX_SAMPLE_COUNT, HISTOGRAM_FREQUENCY_BUCKET_COUNT를 참조한다.
BUFFER_LRU_SCAN_PERCENT
디스크 테이블스페이스의 버퍼 관리를 위해 BUFFER_LRU_SCAN_PERCENT 프로퍼티가 추가되었다. 즉시 사용 가능한 free 버퍼가 없을 때 LRU 목록에서 재사용할 버퍼를 찾기 위해 검사할 페이지의 비율을 BUFFER_CACHE_SIZE에 설정된 버퍼 페이지 수 기준으로 지정한다. 기본값은 40% 이다.
관련 내용은 BUFFER_LRU_SCAN_PERCENT를 참조한다.
FULL_TABLE_SCAN_CACHING_THRESHOLD
디스크 테이블 전체 스캔 시 버퍼 캐시 사용 여부를 결정하는 FULL_TABLE_SCAN_CACHING_THRESHOLD 프로퍼티가 추가되었다. 테이블이 사용 중인 페이지 수를 BUFFER_CACHE_SIZE 를 기준으로 계산한 임계값과 비교하여 캐싱 여부를 결정한다.
기본값은 20으로 BUFFER_CACHE_SIZE의 2.0% 이하의 페이지를 사용하는 테이블을 캐싱한다. 값이 1000이면 100%를 의미하며, 전체 스캔 대상 테이블을 모두 캐싱한다.
관련 내용은 FULL_TABLE_SCAN_CACHING_THRESHOLD를 참조한다.
INST_HASH_TABLE_BUCKET_MAX_COUNT
Hash instant table의 예상 bucket count 상한을 지정하는 INST_HASH_TABLE_BUCKET_MAX_COUNT 프로퍼티가 추가되었다. 세션에서 변경할 수 있으며, ALTER SYSTEM 으로 변경한 값의 적용 방식은 DEFERRED로 정의되어 있다.
관련 내용은 INST_HASH_TABLE_BUCKET_MAX_COUNT를 참조한다.
GLOBAL_TRANSACTION_LOG_BLOCK_SIZE
global transaction 로그 파일의 블록 크기를 지정하는 GLOBAL_TRANSACTION_LOG_BLOCK_SIZE 프로퍼티가 추가되었다. 단위는 바이트이며 512, 1024, 2048, 4096 중 하나를 지정한다. 기본값은 512이며 변경할 수 없다.
관련 내용은 GLOBAL_TRANSACTION_LOG_BLOCK_SIZE를 참조한다.
SHARED_SESSION_MEMORY_INIT_SIZE
공유 세션의 초기 메모리 크기를 지정하는 SHARED_SESSION_MEMORY_INIT_SIZE 프로퍼티가 추가되었다. 기본값은 786432(768K)이며, dedicated session의 초기 메모리 크기를 설정하는 SESSION_MEMORY_INIT_SIZE와 구분된다.
관련 내용은 SHARED_SESSION_MEMORY_INIT_SIZE를 참조한다.
인스턴트 인덱스 참조 Column 임계값
인스턴트 인덱스의 공간 사용량을 줄이는 INSTANT_INDEX_REFERENCE_COLUMN_THRESHOLD 프로퍼티가 추가되었다. 인스턴트 인덱스에 저장하는 column 크기가 설정값 이상이면 해당 column을 참조 방식으로 저장한다.
인스턴트 인덱스 key가 16000 bytes 제한을 초과하는 경우, 이 값을 조정하여 key 크기를 줄일 수 있다. 참조 방식을 사용하면 인덱스 공간을 줄일 수 있지만 성능이 저하될 수 있다.
관련 내용은 INSTANT_INDEX_REFERENCE_COLUMN_THRESHOLD를 참조한다.
REDO_LOGGING_THROTTLING
인덱스 구축·재구축 시 로그 기록 속도를 제어하는 REDO_LOGGING_THROTTLING 프로퍼티가 추가되었다. 대량의 로그 기록이 시스템과 온라인 서비스에 미치는 영향을 줄이기 위한 설정이다. 로그 버퍼의 dirty block 수가 설정값을 초과하면 디스크에 flush 될 때까지 기다린다.
관련 내용은 REDO_LOGGING_THROTTLING를 참조한다.
LOG_FLUSHER_HOT_POLICY_INTERVAL
gmaster의 log flusher thread가 event를 기다릴 때 수행하는 busy waiting 시간을 조절하는 LOG_FLUSHER_HOT_POLICY_INTERVAL 프로퍼티가 추가되었다. 단위는 마이크로초이며, 기본값은 0으로 busy waiting을 수행하지 않는다. 값을 올리면 로그 버퍼를 디스크에 더 빨리 기록할 수 있지만 CPU 사용량이 증가한다.
관련 내용은 LOG_FLUSHER_HOT_POLICY_INTERVAL를 참조한다.
ARCHIVE_LOG_THROTTLING
Redo log archiving의 디스크 I/O를 제어하는 ARCHIVE_LOG_THROTTLING 프로퍼티가 추가되었다. Archive 대상 파일에 복사된 데이터 크기가 설정값을 초과할 때마다 한 번씩 sleep하여 복사 작업의 I/O를 조절한다.
관련 내용은 ARCHIVE_LOG_THROTTLING를 참조한다.
SQL 및 PSM
CURRENT_ROLE 및 LOCAL_MEMBER_POSITION
시스템 정보 함수 CURRENT_ROLE과 LOCAL_MEMBER_POSITION()이 추가되었다. CURRENT_ROLE은 현재 세션에 설정된 role을 반환하며, LOCAL_MEMBER_POSITION()은 사용자 질의를 처리하는 서버의 cluster member position을 반환한다. LOCAL_MEMBER_POSITION()은 cluster system에서 실행 멤버를 확인하는 데 사용할 수 있다.
관련 내용은 CURRENT_ROLE, LOCAL_MEMBER_POSITION를 참조한다.
GROUPING 및 GROUPING_ID
GROUPING과 GROUPING_ID가 추가되었다. GROUP BY와 함께 사용하며, 각 인자가 현재 grouping key이면 0, 아니면 1로 구성된 비트 값을 정수로 반환한다. 이를 통해 소계·총계 행의 grouping 상태를 구분할 수 있다. GROUPING_ID는 GROUPING과 동일하게 동작하며 인자는 최대 31개까지 지정할 수 있다.
관련 내용은 GROUPING, GROUPING_ID를 참조한다.
정규 표현식 함수 및 REGEXP_LIKE 조건
정규 표현식을 사용하는 다음 함수와 조건이 추가되었다. 검색 대상 문자열과 pattern을 지정하며, 패턴은 최대 512 byte까지 기술할 수 있다.
이름 | 설명 |
|---|---|
REGEXP_COUNT | 패턴과 일치하는 횟수를 반환한다. |
REGEXP_INSTR | 일치 문자열의 시작 위치 또는 그 다음 문자 위치를 반환한다. |
REGEXP_LIKE Condition | 문자열이 패턴과 일치하는지 검사한다. |
REGEXP_REPLACE | 일치 문자열을 지정한 문자열로 치환한다. |
REGEXP_SUBSTR | 패턴과 일치하는 부분 문자열을 반환한다. |
관련 내용은 REGEXP_COUNT, REGEXP_INSTR, REGEXP_LIKE, REGEXP_REPLACE, REGEXP_SUBSTR를 참조한다.
JSON 출력의 PRETTY 옵션
JSON String Constructor의 JSON Output Clause에 PRETTY 옵션이 추가되었다. JSON 문자열의 결과 타입을 지정하는 RETURNING 절 뒤에 PRETTY를 기술하여 출력 형식을 변경한다. 반환 타입은 CHAR(n), VARCHAR(n), LONG VARCHAR 중에서 지정한다.
관련 내용은 JSON Output Clause를 참조한다.
JSON 객체의 key 중복 제어
JSON_OBJECT, JSON_OBJECTAGG, JSON_OBJECTAGG() OVER에 JSON key uniqueness constraint 옵션이 추가되었다. WITH UNIQUE KEYS는 하나의 JSON 객체에 중복 key가 있으면 오류를 반환하고, WITHOUT UNIQUE KEYS는 중복을 허용한다. 이를 통해 생성할 JSON 객체의 key 중복 정책을 함수 내에서 지정할 수 있다.
관련 내용은 JSON Key Uniqueness Constraint, JSON_OBJECT, JSON_OBJECTAGG, JSON_OBJECTAGG() OVER를 참조한다.
JSON 배열 집계의 ORDER BY
JSON_ARRAYAGG와 JSON_ARRAYAGG() OVER에 JSON array aggregate order by clause 옵션이 추가되었다. 함수 내 ORDER BY 절로 값을 정렬한 후 JSON 배열을 생성한다. ASC·DESC와 NULLS FIRST·NULLS LAST를 지정하며, 기본값은 ASC, NULLS LAST 이다.
관련 내용은 JSON Array Aggregate Order By Clause, JSON_ARRAYAGG, JSON_ARRAYAGG() OVER를 참조한다.
APPROX_COUNT_DISTINCT
근사 집계 함수 APPROX_COUNT_DISTINCT가 추가되었다. NULL이 아닌 고유값의 대략적인 개수를 구하며, HyperLogLog 알고리즘을 사용한다. 대량 데이터에서 고유값 수를 추정할 때 사용하고, 반환값은 COUNT(DISTINCT ...)의 정확한 개수와 다를 수 있다. FILTER를 지정하면 조건을 만족하는 값만 집계한다.
관련 내용은 APPROX_COUNT_DISTINCT를 참조한다.
객체별 페이지 단편화 통계 함수
페이지 단편화 정보를 조회하는 TABLE_PHYSICAL_STATS, INDEX_PHYSICAL_STATS, GSI_PHYSICAL_STATS가 추가되었다. TABLE_PHYSICAL_STATS는 일반 테이블을, INDEX_PHYSICAL_STATS는 인덱스를, GSI_PHYSICAL_STATS는 클러스터 테이블의 global secondary index를 분석한다. 대상 이름은 문자열이 아닌 identifier로 지정한다.
세 함수는 VARCHAR로 page, used, fragmented 정보를 반환한다. 선택 인자 sampling_ratio_value는 분석할 페이지 비율을 지정하며 1~100 범위이고 기본값은 100이다. 샘플링을 사용하는 경우 used와 fragmented는 샘플 페이지를 기준으로 계산하고, page는 전체 할당 페이지 수를 반환한다.
관련 내용은 TABLE_PHYSICAL_STATS, INDEX_PHYSICAL_STATS, GSI_PHYSICAL_STATS를 참조한다.
ROLE 객체 DDL
Role을 생성·제거하고 사용자 또는 다른 role에 부여·회수하는 DDL이 추가되었다. 새 role에는 별도의 권한이 자동으로 부여되지 않으므로 필요한 권한을 추가로 부여해야 한다.
구문 | 설명 |
|---|---|
CREATE ROLE | Role을 정의한다. CREATE ROLE ON DATABASE 권한이 필요하다. |
DROP ROLE | Role을 제거한다. |
GRANT role TO | 사용자 또는 다른 role에 role을 부여한다. |
REVOKE role FROM | 부여된 role을 회수한다. |
관련 내용은 CREATE ROLE, DROP ROLE, GRANT role TO, REVOKE role FROM을 참조한다.
ANALYZE TABLE의 Histogram 구축
ANALYZE TABLE 수행 시 height-balanced histogram과 frequency histogram을 구축할 수 있게 되었다. HISTOGRAM_BALANCE_BUCKET_COUNT를 설정하면 height-balanced histogram을, HISTOGRAM_FREQUENCY_BUCKET_COUNT를 설정하면 frequency histogram을 구축한다. 두 프로퍼티의 기본값은 0이고, 값이 5 이하이면 해당 histogram을 구축하지 않으며 권장값은 20이다. Frequency histogram은 필요한 bucket 수가 설정값을 초과하면 생성하지 않는다.
관련 내용은 ANALYZE TABLE, HISTOGRAM_BALANCE_BUCKET_COUNT, HISTOGRAM_FREQUENCY_BUCKET_COUNT를 참조한다.
ANALYZE TABLE의 FOR COLUMN GROUPS
ANALYZE TABLE에 FOR COLUMN GROUPS 절이 추가되었다. 지정한 column 조합의 NUM_DISTINCT 통계를 구축하여 여러 column을 함께 사용하는 조건의 통계 분석에 활용한다. 2~4개의 column을 지정하며 동일한 column을 중복해서 지정할 수 없다. Column 순서만 다른 조합은 같은 column group으로 취급한다.
관련 내용은 FOR COLUMN GROUPS, ANALYZE TABLE을 참조한다.
ANALYZE Sampling의 성능 및 정확도 개선
ANALYZE sampling에 repeatable random sampling, approximate NUM_DISTINCT (hyper log 알고리즘), exponent 곡선에 의한 NUM_DISTINCT 보정이 도입되었다. 예를 들어, 10% sampling을 사용하면 TPC-H 22개 질의에서 전수 ANALYZE와 동일한 실행 계획을 얻을 수 있다.
ANALYZE TABLE의 ESTIMATE STATISTICS에서 샘플링할 행 수 또는 비율을 지정할 수 있다. SAMPLE percentage PERCENT의 비율은 1~99의 정수이며, 샘플 행 수가 MIN_SAMPLE_ROW_COUNT보다 작으면 해당 프로퍼티 값을 따른다.
관련 내용은 ESTIMATE STATISTICS를 참조한다.
Audit Policy의 Role 감사
CREATE AUDIT POLICY와 ALTER AUDIT POLICY에 role_audit_clause가 추가되었다. ROLES role_name으로 특정 role을 사용하여 실행한 SQL을 감사 대상으로 지정한다. 생성한 정책은 AUDIT POLICY로 활성화해야 하며, 생성·변경에는 AUDIT SYSTEM ON DATABASE 권한이 필요하다. 같은 사용자가 실행한 SQL이라도 객체 소유자 권한으로 실행한 작업과 role 권한으로 실행한 작업의 감사 결과는 다를 수 있다.
관련 내용은 role_audit_clause, ALTER AUDIT POLICY를 참조한다.
Change Tracking 파일 이름 변경
ALTER DATABASE RENAME CHANGE TRACKING FILE 구문이 추가되었다. Change tracking 파일의 새 이름을 지정할 수 있으며, 데이터베이스가 MOUNT 상태이고 change tracking이 활성화되어 있어야 한다. 실행에는 ALTER DATABASE ON DATABASE 권한이 필요하다. 파일 이름에 절대 경로를 지정하지 않으면 SYSTEM_TABLESPACE_DIR와 결합한 경로를 사용한다.
관련 내용은 ALTER DATABASE RENAME CHANGE TRACKING FILE을 참조한다.
CHECK 제약 조건
CHECK 제약 조건이 추가되었다. CREATE TABLE, ALTER TABLE name ADD COLUMN, ALTER TABLE name ADD CONSTRAINT에서 각 row가 만족해야 하는 논리식을 정의한다. 조건 결과가 FALSE이면 위반으로 처리하고, TRUE 또는 UNKNOWN이면 조건을 만족하는 것으로 처리한다.
조건에는 subquery, 다른 객체 참조, 비결정적 표현식, pseudo column을 사용할 수 없으며, 참조 column 수는 최대 32개이다. NULL 허용 여부까지 제한하려면 UNKNOWN 처리 규칙을 고려해야 한다.
관련 내용은 CHECK 제약 조건, CREATE TABLE, ALTER TABLE name ADD COLUMN, ALTER TABLE name ADD CONSTRAINT를 참조한다.
FOREIGN KEY 제약 조건
FOREIGN KEY 제약 조건이 추가되었다. CREATE TABLE, ALTER TABLE name ADD COLUMN, ALTER TABLE name ADD CONSTRAINT에서 참조 관계를 정의한다. 외래 키 값은 참조 대상의 PRIMARY KEY 또는 UNIQUE 제약 조건에 존재해야 한다. 단, 외래 키에 NULL이 포함된 경우에는 예외적으로 허용된다.
Column 제약 조건은 REFERENCES 형식으로 지정하고, 테이블 제약 조건은 FOREIGN KEY (...) REFERENCES 형식으로 정의한다. 외래 키를 정의하는 테이블은 base table이어야 하며 temp table과 view에는 정의할 수 없다.
관련 내용은 FOREIGN KEY 제약 조건, CREATE TABLE, ALTER TABLE name ADD COLUMN, ALTER TABLE name ADD CONSTRAINT를 참조한다.
제약 조건 활성화 및 비활성화
제약 조건의 활성화 여부를 변경하는 constraint enforcement 옵션을 ALTER TABLE name ALTER CONSTRAINT에서 사용할 수 있게 되었다. ENFORCED는 제약 조건을 활성화하고 NOT ENFORCED는 비활성화한다. 변경할 제약 조건은 제약 조건 이름으로 지정하거나, PRIMARY KEY 또는 column 목록에 대응하는 UNIQUE 제약 조건으로 지정한다.
관련 내용은 ALTER TABLE name ALTER CONSTRAINT를 참조한다.
인덱스 활성화 및 비활성화
index enforcement를 제어하는 ALTER INDEX name ENABLE/DISABLE이 추가되었다. ENABLE은 인덱스를 구축하고 활성화하며, DISABLE은 인덱스를 비활성화하고 사용하던 extent를 모두 반납한다. 비활성화된 인덱스는 DML과 SELECT에서 사용하지 않는다.
ENABLE과 ENFORCED, DISABLE과 NOT ENFORCED는 각각 동일한 동작을 수행한다. Key 제약 조건을 위해 생성된 인덱스는 ALTER CONSTRAINT로 관리해야 한다.
관련 내용은 ALTER INDEX name ENABLE/DISABLE을 참조한다.
테이블 트리거 실행 순서 지정
ALTER TABLE name SET TRIGGER ORDER가 추가되었다. 테이블에 정의된 트리거 이름을 원하는 순서로 재배열하여 실행 순서를 바꾼다. 일부 트리거만 지정하면 해당 트리거를 지정한 순서대로 먼저 실행하고 나머지 트리거는 기존 순서를 유지한다. 나열한 트리거는 같은 테이블에 속하며 BEFORE/AFTER 시점과 ROW/STATEMENT 실행 단위가 같아야 한다.
관련 내용은 ALTER TABLE name SET TRIGGER ORDER를 참조한다.
ALTER TABLE name REORGANIZE
테이블을 물리적으로 재구성하는 ALTER TABLE name REORGANIZE가 추가되었다. ONLINE에서는 INSERT·UPDATE·DELETE를 허용하고 OFFLINE에서는 허용하지 않으며, 기본값은 ONLINE이다. SCAN PARTITION과 PARALLEL로 분할·병렬 처리 옵션을 지정할 수 있다.
Redo log 기록의 기본값은 LOGGING이다. NOLOGGING을 사용하면 재구성 후 서버가 비정상 종료될 때 테이블이 unusable 상태가 될 수 있다. 따라서 NOLOGGING을 사용하는 경우 매뉴얼에 따라 재구성 후 CHECKPOINT를 실행해야 한다.
관련 내용은 ALTER TABLE name REORGANIZE를 참조한다.
MERGE
MERGE 구문이 추가되었다. USING으로 지정한 원본과 대상 테이블을 ON 조건으로 비교하여, 일치하면 UPDATE·DELETE·DO NOTHING, 일치하지 않으면 INSERT·DO NOTHING을 수행하도록 기술한다. 여러 변경 작업을 조건별로 한 구문에 표현할 수 있다.
각 대상 행은 WHEN 절을 작성한 순서대로 평가하며, 처음 참이 되는 분기만 실행한다. 별도의 MERGE 권한은 없으며, 참조 column에 대한 SELECT 권한과 구문에 명시한 INSERT·UPDATE·DELETE 작업에 필요한 권한이 필요하다.
관련 내용은 MERGE를 참조한다.
APPEND INSERT 및 힌트
APPEND INSERT 방식의 데이터 추가 기능과 이를 지정하는 힌트가 추가되었다. 사용하지 않은 공간이나 새로 할당한 공간에 데이터를 추가하여 대량 적재에 활용한다. 디스크 테이블은 버퍼를 거치지 않고 데이터 파일에 직접 기록한다.
INSERT의 APPEND 힌트, gloader의 관련 옵션 또는 특정 대량 동기화 DDL에서 사용할 수 있다. PARALLEL은 여러 세션의 동시 APPEND INSERT를 허용하고, 이 옵션과 함께 사용하는 NOLOGGING은 기록할 로그를 줄인다. STATEMENT_NOFORCE는 문장 완료 시 사용한 데이터 페이지의 디스크 반영 여부를 지정한다. 지정한 옵션에 따라 참조 무결성 검사나 인덱스 키 반영 여부가 달라질 수 있으므로 적재 방식에 맞는 옵션을 선택해야 한다.
관련 내용은 APPEND INSERT 방식의 데이터 추가를 참조한다.
DELETE FROM의 local shard limit
DELETE FROM에 데이터 삭제를 위한 local shard limit clause가 추가되었다. Cluster의 sharded table에서 local group에 있는 레코드를 지정한 limit_row_count 만큼 삭제한다. Sharded table 에서만 사용할 수 있으며 limit_row_count는 양수이어야 한다. result offset clause 및 fetch limit clause와 함께 사용할 수 없다.
관련 내용은 local shard limit clause를 참조한다.
GROUP BY의 ROLLUP·CUBE·GROUPING SETS
GROUP BY의 grouping element에 ROLLUP, CUBE, GROUPING SETS 지원이 추가되었다. ROLLUP은 나열한 항목을 단계적으로 줄여 소계와 총계를 구한다. CUBE는 모든 grouping 조합을 계산하고, GROUPING SETS는 필요한 조합만 명시한다. 집계 목적에 맞게 소계 구성을 선택할 수 있다.
관련 내용은 group by clause를 참조한다.
GROUP BY에서 SELECT 별칭 참조
GROUP BY의 grouping column reference에서 select list alias를 참조할 수 있게 되었다. SELECT 목록의 column에 지정한 별칭을 grouping key로 사용할 수 있다. 동일한 별칭이 여러 개이면 식별할 수 없고, 실제 column 이름과 별칭이 같으면 실제 column 참조가 우선한다.
SELECT COUNT(*), t1.c1 AS A1 FROM t1 GROUP BY A1;
관련 내용은 group by clause를 참조한다.
PIVOT 절
Row 값을 column으로 변환하는 PIVOT 절이 추가되었다. FROM 절의 테이블 참조에 집계 함수, FOR에 pivot column, IN에 값 목록을 지정하여 cross table을 구성한다. 집계 함수는 중첩하여 사용할 수 없고, FOR column의 개수와 IN에 나열한 각 값 조합의 원소 개수가 같아야 한다.
관련 내용은 pivot clause를 참조한다.
UNPIVOT 절
Column 값을 row로 변환하는 UNPIVOT 절이 추가되었다. IN에는 변환할 원본 column의 이름을 지정하고, 변환된 값을 저장할 column과 원본 column을 식별할 FOR column 이름을 정의한다. NULL 값을 결과에 포함하려면 INCLUDE NULLS를 지정한다. 이를 생략하면 기본적으로 EXCLUDE NULLS 로 동작한다.
관련 내용은 unpivot clause를 참조한다.
TABLESAMPLE 절
테이블에서 일부 row를 무작위로 추출하는 sample 절이 추가되었다. TABLESAMPLE에는 0보다 크고 100 이하인 샘플링 비율을 지정하며, PERCENT ROWS 또는 PERCENT PAGES 를 사용하여 샘플링 단위를 선택한다. 샘플링 단위를 생략하면 기본적으로 PERCENT ROWS가 적용된다. REPEATABLE(seed_value) 를 사용하여 seed 값을 지정할 수 있다. 이를 지정하지 않으면 실행할 때마다 샘플링 결과가 달라질 수 있다.
관련 내용은 sample clause를 참조한다.
집계 함수의 FILTER
Aggregate function에 FILTER 기능이 추가되었다. 집계 함수 호출 뒤에 FILTER (WHERE condition)을 지정하면 해당 조건을 만족하는 값만 집계에 포함한다. 하나의 SELECT 문 안에서 각 집계 함수마다 서로 다른 조건을 지정할 수 있다.
SELECT COUNT(*), COUNT(*) FILTER (WHERE c1 > 1) FROM t1;
관련 내용은 Aggregate Function, COUNT(*) FILTER를 참조한다.
JSON 집계 함수의 FILTER
JSON aggregate constructor에 FILTER 기능이 추가되었다. JSON_ARRAYAGG 또는 JSON_OBJECTAGG 뒤에 FILTER (WHERE condition)을 지정하면 해당 조건을 만족하는 값만 배열 또는 객체의 집계에 포함된다. 집계 결과는 하나의 JSON 문자열 row 로 반환된다.
관련 내용은 JSON aggregate Constructor, JSON_ARRAYAGG, JSON_OBJECTAGG를 참조한다.
Window 및 UNION ALL 실행 위치 힌트
SQL hint에 window hints와 union all driver hints가 추가되었다. Cluster query에서 window 기능 또는 UNION ALL 구문을 현재 서버에서 처리할지, 각 group의 서버에서 처리할지 지정한다. 해당 driver hint는 standalone 환경에서는 무시된다.
Hint 계열 | 현재 서버 | 각 group 서버 |
|---|---|---|
window hints | LOCAL_WINDOW | REMOTE_WINDOW |
union all driver hints | LOCAL_UNION_ALL | REMOTE_UNION_ALL |
관련 내용은 window hints, union all driver hints를 참조한다.
ALTER SYSTEM CANCEL SESSION
세션에서 실행 중인 작업을 취소하는 ALTER SYSTEM CANCEL SESSION 문이 추가되었다. 취소할 대상의 session ID와 serial number를 지정하며, cluster database에서는 대상 member position도 지정할 수 있다. 이 문을 실행하려면 ALTER SYSTEM ON DATABASE 권한이 필요하다.
관련 내용은 ALTER SYSTEM CANCEL SESSION을 참조한다.
SET ROLE
현재 세션의 role을 변경하는 SET ROLE role_name 문이 추가되었다. 현재 사용자에게 적용할 수 있는 role을 선택하거나 ACCESS CONTROL ON DATABASE 권한을 사용하여 role을 설정할 수 있다. SET ROLE NONE을 지정하면 current role 설정이 해제된다. 활성 트랜잭션 중에는 role을 변경할 수 없으며, 변경 후에는 설정된 current role을 기준으로 구문이 실행된다.
관련 내용은 SET ROLE role_name을 참조한다.
External Routine
사용자가 작성한 C 프로그램을 실행하는 External Routine 이 추가되었다. Shared library에 저장된 함수를 PSM routine에서 호출하며, external routine process인 gextproc가 library를 로딩·실행하고 결과를 PSM에 반환한다. Library 객체와 call specification을 구성하여 DBMS에서 외부 함수의 기능을 사용한다.
관련 내용은 External Routine, Call Specification을 참조한다.
Trigger 객체
특정 테이블에서 DML이 수행될 때 자동으로 실행할 동작을 정의하는 trigger 객체가 추가되었다. PSM으로 작성한 동작을 INSERT·UPDATE·DELETE 이벤트와 연결하고, BEFORE/AFTER 시점 또는 ROW/STATEMENT 단위로 실행하도록 정의한다. 활성화된 트리거는 해당 이벤트가 발생하면 자동으로 실행되며, 명시적으로 호출할 수는 없다. 대상 테이블을 삭제하면 종속된 트리거도 함께 삭제된다.
관련 내용은 Trigger 개요, CREATE TRIGGER를 참조한다.
Call Specification
External C function과 PSM routine 정보를 대응시키는 call specification이 추가되었다. LANGUAGE C, LIBRARY, NAME, PARAMETER 를 사용하여 외부 함수의 이름과 인자·반환값의 데이터 타입을 매핑하고, PSM에서 호출한다. 이를 사용하려면 대상 library에 대한 EXECUTE 권한 또는 매뉴얼에 명시된 동등한 권한이 필요하다.
관련 내용은 Call Specification을 참조한다.
Library 객체 DDL
Library 객체를 관리하는 CREATE LIBRARY와 DROP LIBRARY 문이 추가되었다. CREATE LIBRARY는 C 프로그램의 shared library 파일 경로를 스키마 객체 이름에 연결하며, OR REPLACE를 지정하면 기존 객체를 교체할 수 있다. DROP LIBRARY는 library 객체를 제거하고, IF EXISTS를 지정하여 해당 객체가 존재하는 경우에만 삭제하도록 할 수 있다.
관련 내용은 CREATE LIBRARY, DROP LIBRARY를 참조한다.
Trigger 객체 DDL
Trigger 객체의 생성·삭제·재컴파일·활성화·이름 변경을 위한 다음 DDL이 추가되었다.
구문 | 설명 |
|---|---|
CREATE TRIGGER | DML 이벤트와 실행할 동작을 정의한다. |
DROP TRIGGER | Trigger를 제거한다. |
ALTER TRIGGER name COMPILE | Trigger를 재컴파일한다. |
ALTER TRIGGER name ENABLE/DISABLE | Trigger의 활성화 여부를 변경한다. |
ALTER TRIGGER name RENAME TO | Trigger 이름을 변경한다. |
관련 내용은 CREATE TRIGGER, DROP TRIGGER, ALTER TRIGGER name COMPILE, ALTER TRIGGER name ENABLE/DISABLE, ALTER TRIGGER name RENAME TO를 참조한다.
API 및 개발 환경
JDBC commit_write_mode 연결 속성 추가
JDBC에 commit_write_mode 연결 속성이 추가되었다. 이 속성은 트랜잭션 완료 시 생성된 로그를 디스크의 로그 파일에 flush하는 방식을 지정한다. 이 값이 0이면 서버 설정을 따르고, 1이면 wait, 2이면 no wait를 의미한다. 기본값은 0이다.
관련 내용은 JDBC: 연결 프로퍼티를 참조한다.
gpec --parse 옵션 추가
Embedded SQL precompiler gpec에 --parse 옵션이 추가되었다. 이 옵션은 입력 소스의 파싱 수준을 지정하며, none은 실행에 필요한 최소한의 구조만 파싱하고, partial은 전처리에 필요한 범위까지 파싱한다. 기본값은 partial 이다. 예를 들어, gpec --parse=none sample.gc 와 같이 사용할 수 있다.
관련 내용은 Embedded SQL: --parse를 참조한다.
Embedded SQL Dynamic SQL Method 4 지원
Embedded SQL에서 dynamic SQL method 4를 지원한다. 이 방식은 precompile 시점에 조회할 column의 개수·타입 또는 매개변수 개수를 알 수 없는 SQL에 사용한다. ANSI SQL descriptor 방식과 SQLDA 방식을 제공하며, descriptor를 통해 실행 시점의 입력·출력 정보를 지정하여 PREPARE·EXECUTE 또는 커서 작업을 수행한다. 두 방식 모두 struct, SQL_CURSOR 타입과 VARCHAR 타입 배열을 이용한 array operation은 지원하지 않는다.
관련 내용은 Embedded SQL: Method 4를 참조한다.
PyDBC Python 3 타입 stub 제공
PyDBC Python 3 패키지에 pygoldilocks.pyi 타입 stub이 추가되었다. IDE와 정적 타입 검사 도구에서 사용할 수 있다.
관련 API는 PyDBC: API Reference를 참조한다.
PyDBC Python 3 문자 codec 설정 지원
PyDBC Python 3에서 connection.setencoding()과 setdecoding()을 지원한다. setencoding(encoding, ctype=SQL_CHAR)은 SQL 문과 문자열 매개변수를 바이트로 변환할 때 사용할 codec을, setdecoding(sqltype, encoding, ctype=SQL_CHAR)은 문자 결과를 Python 문자열로 변환할 때 사용할 codec을 설정한다. 해당 설정 인자로는 SQL_CHAR만 사용할 수 있으며, wide character 타입은 지원하지 않는다. 설정은 해당 connection에 유지되며, SQL 실행이나 commit·rollback으로 초기화되지 않는다.
관련 내용은 PyDBC: 문자 codec 설정을 참조한다.
PyDBC Python 3 연결 진단·문자셋 조회·output converter 지원
PyDBC Python 3에서 connection.messages, character_set_name() 및 SQL 타입별 output converter를 지원한다. messages에는 연결 작업에서 발생한 DB-API warning이 저장된다. 이 목록은 다음 연결 작업이 시작될 때 초기화되므로, 각 작업 직후 확인해야 한다. character_set_name()은 현재 연결에 설정된 GOLDILOCKS 문자셋 이름을 반환한다.
add_output_converter(sqltype, func)로 변환 함수를 등록하면 해당 연결의 모든 cursor에 적용된다. 변환 함수에는 raw bytes 또는 SQL NULL을 나타내는 None이 전달되고, 함수의 반환값이 조회 결과의 행 값이 된다. 변환 함수의 등록 및 변경 사항은 다음 execute() 호출부터 반영된다.
관련 내용은 PyDBC: Output Converter를 참조한다.
PyDBC connection.maxwrite 지원
대용량 문자·바이너리 매개변수를 처리하기 위한 connection.maxwrite를 지원한다. 이 속성은 매개변수를 직접 바인딩할지 SQLPutData로 전송할지 결정하는 기준 크기를 바이트 단위로 지정한다. 0을 지정하면 드라이버와 데이터 타입에 따른 기본 기준을 사용하며, 사용자 지정 값은 255 이상이어야 한다. 이 속성은 입력 데이터의 전송 방식만 변경하며, 데이터를 자르거나 조회 결과의 크기를 제한하지 않는다.
관련 내용은 PyDBC: maxwrite를 참조한다.
PyDBC cursor.nextset()을 통한 다중 result set 처리
Procedure가 반환하는 여러 result set을 cursor.nextset() 을 사용하여 순차적으로 처리할 수 있다. 현재 결과 집합의 행은 fetchone() 등의 fetch 함수로 읽고, nextset()을 호출하면 다음 결과 집합으로 이동한다. 다음 결과 집합이 있으면 True를, 더 이상 없으면 None을 반환한다.
관련 내용은 PyDBC: nextset()을 참조한다.
PyDBC procedureColumns() 메타데이터 조회 추가
PyDBC에 cursor.procedureColumns(procedure=None, catalog=None, schema=None)이 추가되었다. 이 method는 ODBC SQLProcedureColumns를 통해 procedure의 IN, OUT, INOUT 매개변수와 반환값·결과 열에 대한 메타데이터를 조회한다. 조회 결과에는 column_name, column_type, data_type, type_name, column_size, ordinal_position 등의 정보가 포함된다.
관련 내용은 PyDBC: procedureColumns()를 참조한다.
PyDBC fetchval()·cursor iterator·statement cancel 지원
PyDBC에서 fetchval(), cursor iterator 및 statement cancel을 지원한다. fetchval()은 다음 행의 첫 번째 열 값을 반환하며, 다음 행이 없으면 None을 반환한다. Cursor iterator는 결과 행을 하나씩 순차적으로 가져와 처리한다. cursor.cancel()은 해당 cursor에서 실행 중인 statement의 취소를 요청한다. 실제 취소 과정에서 예외가 발생할 수 있으므로 예외 처리를 마친 후 cursor를 재사용할 수 있는지 확인해야 한다.
관련 내용은 PyDBC: fetchval()과 cancel()을 참조한다.
Utility
gsql/gsqlnet의 Role DDL 출력
Role 객체의 DDL을 출력하는 \ddl_role 명령이 추가되었다. \ddl_role name 을 실행하면 해당 role의 생성, 부여 및 주석 관련 구문을 모두 출력한다. 필요한 구문만 출력하려면 CREATE, GRANT, COMMENT 옵션을 지정한다.
관련 내용은 gsql/gsqlnet의 Role DDL 출력을 참조한다.
gsql/gsqlnet의 Trigger DDL 출력
Trigger 객체의 DDL을 출력하는 \ddl_trigger 명령이 추가되었다. \ddl_trigger name 을 실행하면 해당 trigger의 생성 및 주석 관련 구문을 출력한다. CREATE 또는 COMMENT 옵션을 지정하면 해당 구문만 출력할 수 있다. 휴지통에 보관된 객체는 출력 대상에서 제외된다.
관련 내용은 gsql/gsqlnet의 Trigger DDL 출력을 참조한다.
gloader/gloadernet의 APPEND INSERT 옵션
APPEND INSERT 방식으로 데이터를 로드하는 기능과 --merge, --skip_index_maintenance, --nologging 옵션이 추가되었다. import 작업에서 --merge EXTENT는 serial APPEND INSERT 방식으로, --merge SEGMENT는 PARALLEL APPEND INSERT 방식으로 데이터를 로드한다.
옵션 | 사용 방법 |
|---|---|
--skip_index_maintenance | --merge와 함께 사용한다. 인덱스를 갱신하지 않고 unusable 상태로 설정한다. 생략하면 DEFERRED_INDEX_MAINTENANCE 방식으로 수행한다. |
--nologging | --merge SEGMENT와 함께 사용하여 NOLOGGING APPEND INSERT 방식으로 데이터를 로드한다. 생략하면 LOGGING 방식으로 수행한다. |
기존 --append 옵션은 로드 전 기존 데이터의 유지·삭제·TRUNCATE 여부를 지정하는 옵션이다. 새로 추가된 --merge 옵션과는 용도가 다르다.
관련 내용은 gloader/gloadernet의 APPEND INSERT 옵션을 참조한다.
Replication
CYCLONE을 이용하여 다른 DBMS로 데이터 이전
CYCLONE 을 통해 Oracle, DB2, MySQL, Tibero로 데이터를 이전하는 기능이 추가되었다. CYCLONE master는 원본 GOLDILOCKS의 redo log 에서 변경 내용을 분석하여 전송하고, slave는 ODBC를 이용하여 대상 DBMS에 변경 내용을 적용한다.
대상 DBMS에 따라 slave의 ORACLE_DRIVER, DB2_DRIVER, MYSQL_DRIVER, TIBERO_DRIVER에 해당 ODBC driver 파일의 경로를 지정한다. MySQL과 DB2의 경우 각각 MYSQL_DATABASE, DB2_DATABASE로 대상 database를 지정한다. SYNC 작업에는 master에 대응하는 해당 SYNC_ORACLE_DRIVER, SYNC_DB2_DRIVER, SYNC_MYSQL_DRIVER, SYNC_TIBERO_DRIVER 설정을 사용한다.
GOLDILOCKS와 대상 DBMS의 column 데이터 타입을 일치시켜야 한다. 다른 DBMS와 연동하는 경우 CYCLONE의 이중화 운영 중 DDL 처리 기능을 사용할 수 없다.
관련 내용은 CYCLONE의 다른 DBMS로 데이터 이전을 참조한다.
CYCLONE의 Heartbeat protocol 분리
CYCLONE의 heartbeat protocol이 data protocol과 분리되었다. 연결 유지 시간은 기존 설정인 HEARTBEAT_TIMEOUT 으로 지정한다. Master와 slave에서 사용할 수 있으며, network 단절이나 시스템 장애로 연결이 원활하지 않을 때 연결을 유지하는 최대 시간을 초 단위로 지정한다. 기본값은 30초이며, 최소값은 10초이다.
관련 내용은 CYCLONE의 Heartbeat protocol 분리를 참조한다.