:tocdepth: 3 .. raw:: html **************** 11.4 릴리스 노트 **************** .. contents:: .. _11_4_information: 릴리스 노트 정보 ================ 본 문서는 CUBRID 11.4(빌드번호 11.4.0.1778)에 관한 정보를 포함한다. CUBRID 11.4는 CUBRID 11.3 버전에서 발견된 오류 수정 및 기능 개선과 이전 버전들에 반영된 모든 오류 수정 및 기능 개선을 포함한다. CUBRID 11.3에 대한 정보는 https://www.cubrid.org/manual/ko/11.3/release_note/index.html 에서 확인할 수 있다. CUBRID 11.2에 대한 정보는 https://www.cubrid.org/manual/ko/11.2/release_note/index.html 에서 확인할 수 있다. CUBRID 11.0에 대한 정보는 https://www.cubrid.org/manual/ko/11.0/release_note/index.html 에서 확인할 수 있다. CUBRID 10.2에 대한 정보는 https://www.cubrid.org/manual/ko/10.2/release_note/index.html 에서 확인할 수 있다. CUBRID 10.1에 대한 정보는 https://www.cubrid.org/manual/ko/10.1/release_note/index.html 에서 확인할 수 있다. CUBRID 10.0에 대한 정보는 https://www.cubrid.org/manual/en/10.0/release_note/index.html 에서 확인할 수 있다. CUBRID 9.3에 대한 정보는 https://www.cubrid.org/manual/ko/9.3.0/release_note/index.html 에서 확인할 수 있다. 릴리스 개요 =========== CUBRID 11.4는 새로운 기능, 주요 변경 사항, 개선 사항 및 이전 버전에서 발생한 다수의 오류 수정이 포함된 최신 안정화 버전이다. CUBRID 11.4는 #. **오라클 호환성을 위한 PL/CSQL 지원** #. **대용량 처리 지원을 위한 HASH JOIN 추가** #. **옵티마이저 및 인덱스 처리 방식 개선을 통한 성능 향상** #. **데이타 복구시 병렬 처리로 인한 성능 향상** #. **결과 캐시 확장을 통한 성능 개선** #. **데이타 덤프 성능 향상** #. **메모리 모니터링 기능 추가** #. **접근 제어 기능 향상** #. **백업/복구 운영 사용자 편의 향상** 을 통해서 새로운 기능과 더불어 다양한 부분에서의 성능 개선이 이루어 졌다. 드라이버 호환성 --------------- - CUBRID 11.4는 하위 드라이버와도 호환 가능하지만, 11.4에서 제공되는 기능을 사용하기 위해서는 최신 드라이버 사용을 권장한다. .. _11_4_changes: 11.4 변경사항 ============= .. _11_4_changes_add_feature: 기능 개선 --------- PL/CSQL ~~~~~~~ - 절차적 SQL 언어인 PL/SQL(Oracle 제공)과의 호환성을 갖는 CUBRID PL/CSQL 지원. - 자세한 문법 및 사용법은 메뉴얼(:ref:`sql_procedural_langauge`\) 참조 바람. SQL ~~~ HASH JOIN 지원 ^^^^^^^^^^^^^^ - 조인 처리 방식 중 하나인 조인 조건 컬럼을 기준으로 해시 테이블을 생성해서 조인 처리하는 HASH JOIN을 지원한다. - 옵티마이저가 HASH JOIN을 사용하기 위해서는 조인 힌트를 사용해야만 한다. - ``/*+ USE_HASH */`` 힌트가 추가되면 HASH JOIN 고려함. - ``/*+ NO_USE_HASH */`` 힌트가 추가되면 HASH JOIN 사용하지 않음. SERIAL 소유자 변경 SQL 구문 지원 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ``call change_serial_owner()`` 메소드만으로 SERIAL 소유자를 변경 가능했던 것을 SQL문으로 소유자 변경할 수 있도록 ALTER SERIAL 구문을 확장 지원함. .. code:: sql ALTER SERIAL serial_name OWNER TO user_name - DBA와 DBA 그룹 멤버만 SERIAL 소유자 변경이 가능 함. - 권한이 없거나 변경 대상인 SERIAL이 없을 경우에는 에러가 발생함. 생성된 그룹에 구성원을 추가/삭제할 수 있는 SQL 구문 지원 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - *call add_member()*\와 *call drop_member()* 메소드만을 통해 생성된 그룹에 사용자를 추가/삭제할 수 있던 것을 SQL문으로 사용자를 추가/삭제할 수 있도록 ALTER USER 구문을 확장 지원함. - HA 환경에서 메소드 호출 통헤 생성된 그룹에 사용자를 추가/삭제하는 경우, 마스터와 슬레이브에서 별도 작업이 필요했던 작업을 ALTER USER 구문을 통해 쉽게 처리할 수 있도록 개선됨. .. code:: sql ALTER USER user_name [PASSWORD password] | [ADD MEMBERS user_name {, user_name}...] | [DROP MEMBERS user_name {, user_name}...] [COMMENT 'comment_string'] - DBA/DBA 그룹 구성원 - DBA 그룹에 구성원 추가/삭제 - 일반 사용자 (PUBLIC 포함) 그룹에 구성원 추가/삭제 - 일반 사용자 - 자신의 그룹에만 구성원 추가/삭제 쿼리 캐시 확장 지원 ^^^^^^^^^^^^^^^^^^^ - 전체 질의 단위만으로만 사용할 수 있던 쿼리 캐시 기능을 하위 질의 단위까지 사용할 수 있도록 확장 지원함. - CTE의 하위 질의에 쿼리 캐시 적용 .. code:: sql with cte0 as (select /*+ query_cache */ count(*) from public.game where host_year > 2000), cte1 as (select /*+ query_cache */ count(*) from public.game where host_year = 2004) select * from cte1; .. code:: sql Trace Statistics: SELECT (time: 0, fetch: 4, fetch_time: 0, ioread: 0) SCAN (temp time: 0, fetch: 4, ioread: 0, readrows: 1, rows: 1) SUBQUERY (uncorrelated) CTE (non_recursive_part) SELECT (time: 0, fetch: 0, fetch_time: 0, ioread: 0) RESULT CACHE (reference count: 1) CTE (non_recursive_part) SELECT (time: 0, fetch: 0, fetch_time: 0, ioread: 0) RESULT CACHE (reference count: 1) - 비 상관 하위 질의에 쿼리 캐시 적용 .. code:: sql select count(host_year) from (select /*+ query_cache */ code from public.nation where code like 'K%') n, public.game g where n.code = g.nation_code; .. code:: sql Trace Statistics: SELECT (time: 218, fetch: 872, fetch_time: 2, ioread: 0) SCAN (temp time: 0, fetch: 4, ioread: 0, readrows: 7, rows: 7) SCAN (table: public.game), (heap time: 215, fetch: 868, ioread: 0, readrows: 60571, rows: 386) SUBQUERY (uncorrelated) SELECT (time: 0, fetch: 0, fetch_time: 0, ioread: 0) RESULT CACHE (reference count: 3) - trace 정보에 퀴리 캐시(*RESULT CACHE*) 사용 여부 표시 (reference count : 쿼리 캐시 참조 횟수) 조인 순서를 명시적으로 제어 가능한 LEADING 힌트 지원 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 옵티마이저에게 특정 테이블들의 조인 수행 순서를 명시적으로 지정하기 위해 사용하는 것으로 ORDERED 힌트보다 테이블 조인 순서를 유연허게 제어 가능하도록 함. .. code:: sql SELECT /*+ LEADING(e j) */ * FROM employees e, departments d, job_history j WHERE e.department_id = d.department_id AND e.hire_date = j.start_date; - LEADING 힌트 무시 조건 - 조인 그래프의 종속성으로 인해 지정된 테이블들을 먼저 조인할 수 없는 경우 무시 - ORDERED 힌트가 있으면 모든 LEADING 힌트 무시 - 여러 LEADING 힌트 사용시, 첫번째 LEADING 힌트만 적용되고 나머지 한트는 무시 유틸리티 ~~~~~~~~ ``cubrid plandump``\의 특정 plan만 삭제하는 옵션 지원 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 옵션 : *-s* JNI 사용한 JavaSP를 위한 별도의 loadjava 옵션 지원 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 옵션 : *-j* 또는 *--jni* - 해당 옵션을 사용하지 않고 로드된 JNI 사용한 javasp는 수행시 오류 발생 메모리 모니터링 유틸리티 지원 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 메모리 모니터링 유틸리티인 cubrid memmon는 서버 프로세스(cub_server)의 메모리 관리 모듈로 부터 다음과 같은 힙 메모리 정보를 얻어 출력함. - 서버 프로세스가 할당해서 사용중인 힙 메모리 총 사용량 - 메모리를 할당 요청한 소스코드와 라인 정보 기준으로 세부적인 메모리 할당량 정보 - 서버 프로세스의 메모리 관리 모듈을 사용하기 위해서는 시스템 파라미터 **enable_memory_monitoring** 가 yes로 설정한 후, 서버를 재 구동해야 함. - 자세한 사용 방법 및 내용은 메뉴얼(:ref:`memmon`\) 참조. diagdb -d 9 에 하나의 테이블만 덤프할 수 있는 옵션 지원 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 옵션 : -n class-name - 파티션 테이블인 경우에는 모든 파티션을 덤프하고 서브 피티션 테이블인 경우는 해당 파티션 테이블만 덤프함. Broker,CAS,CMS ~~~~~~~~~~~~~~ 브로커별 통신 버퍼 크기 조절을 위한 파라미터 지원 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 브로커별 클라이언트에 결과 전송시 사용하는 버퍼 크기를 조절할 수 있는 **NET_BUF_SIZE** 파라미터 지원. - **NET_BUF_SIZE**\에 설정 가능한 값 - 16K(기본값) - 32K - 48K - 64K ACL 정책 정의를 위한 파라미터 지원 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 브로커의 ACL 사용(**ACCESS_CONTROL=ON**\)하는 경우, ACCESS_CONTROL_FILE에 미 작성된 브로커에 대한 기본 동작 정책을 설정할 수 있는 ACCESS_CONTROL_DEFAULT_POLICY 파라미터 지원. - **cubrid_broker.conf**\의 ``[broker]`` 섹션에서 ACCESS_CONTROL_DEFAULT_POLICY에 **DENY** 또는 **ALLOW** 값을 설정 (기본 값은 **DENY**) - ACCESS_CONTROL_FILE에 미 작성된 브로커에 대해 ALLOW인 경우에는 모든 클리이언트에 대해 접속 허용하고, DENY인 경우에는 반대로 접속을 불허한다. .. code:: shell $ cubrid broker acl status ACCESS_CONTROL=ON ACCESS_CONTROL_DEFAULT_POLICY=DENY ACCESS_CONTROL_FILE=cubrid_acl.conf [%query_editor] testdb:dba:acl_ip_list.conf CLIENT IP LAST ACCESS TIME ========================================== 172.29.80.1 192.168.0.31 172.31.0.175 [%broker1] ++ cubrid broker acl: success - **[%broker1]** 은 cubrid_acl.conf 파일에 클라이언트 관련 접속 정보가 미 작성되어 있으므로 기본 정책인 **DENY**\에 의헤 모든 클라이언트에 대해 접속을 허용하지 않음 기타 ~~~~ Non-HA DB서버가 비정상 종료 시 자동 재 구동 기능 지원 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Non-HA 환경에서 DB 서버가 OOM Killer 등으로 인해 비정상 종료될 경우, 자동으로 서버를 다시 시작할 수 있는 기능을 지원 - 특이 사항 - 정상 종료시에는 자동으로 재시작 되지 않음. - ``auto_restart_server`` 파라미터로 ON/OFF 가능. - 짧은 시간 내 반복적으로 비 정상 종료되거나, 일정 횟수 이상 구동 실패시 자동 재 구동하지 않음 백업본을 신규 DB로 복구하는 스크립트 지원 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 운영 서버에서 백업본으로 데이터 복구가 필요할 때, 추가 계정 생성 및 추가 엔진 설치 등의 번거로운 작업이 없어 간단히 새로운 DB로 복구할 수 있는 ``restore_to_newdb.sh`` 스크립트 지원. 자세한 사용 방법 및 내용은 메뉴얼 (:ref:`restore_to_newdb_sh`\) 참조. .. _11_4_changes_spec: 스펙변경 -------- SQL ~~~ CHAR 타입의 최대 문자 개수를 2048로 제한( 변경 전 최대 : 268,435,456 ) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 메모리 할당 오류 등의 잠재 오류를 방지하기 위해 CHAR 타입의 최대 문자 개수를 268,435,456에서 2048로 제한 - 11.4 이전 버전 DB 이관시 2048 초과되는 CHAR 타입은 VARCHAR 타입으로 전환 필요 LOB 검색자(locator)의 경로를 상대 경로로 변경 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - LOB 데이터 파일의 이동 및 관리 편의성을 개선하기 위해, LOB 관련 파일 경로를 절대 경로에서 상대 경로로 변경 - databases.txt의 DB의 LOB 디렉토리의 위치의 변경시, 반드시 변경전 LOB 디렉토리에 존재하는 LOB 파일들을 변경 후 LOB 디렉토리로 이동 또는 복사 필요 UPDATE JOIN 구문에서 분석 함수 사용 제한 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 오동작 방지를 위해 2개 이상 테이블의 UPDATE JOIN 구문에서 분석 함수을 사용할 수 없게 제한 - 11.4 이전 버전에서 직성된 해당 질의는 11.4 버전에서 오류 발생하므로 수정 필요 시스템 테이블 및 뷰에 대해서 ``for update`` 구문 사용 제한 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 시스템 테이블에서 X-LOCK 발생으로 인한 대기 현상을 방지하기 위해, 시스템 테이블 및 뷰에 대해 FOR UPDATE 문을 사용할 경우 오류가 발생하도록 변경 뷰 생성시 데이터 타입의 정합성을 체크하지 않도록 변경 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 오라클 호환성을 높이기 위해 뷰 생성 시점에 타입 검사를 하지 않고 실행 시점에 타입 검사하는 것으로 변경 - 타입 변환이 불가능한 경우, 뷰 실행 시 오류 발생함. 뷰 질의 스펙의 select절에 NULL 값 사용 허용 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 오라클 호환성을 높이기 위해 뷰 질의 스펙의 select 절에 NULL 값 사용 허용 .. code:: sql CREATE VIEW a_view( col1 ) AS select NULL as col1 from a_tbl; 테이블 생성 또는 컬럼 속성 변경시 ``AUTO_INCREMENT`` 와 ``DEFAULT`` 값이 공존할 수 없도록 변경 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - **CREATE TABLE** 및 **ALTER COLUMN** 구문 수행 시 ``AUTO_INCREMENT`` 및 ``DEFAULT`` 속성을 함께 사용시 오류 발생하도록 변경 **ALTER INDEX … REBUILD**\에 신규 컬럼을 추가시 오류 발생하도록 변경 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 신규 컬럼을 추가한 후 REBUILD시 신규 컬럼을 추가할 수 없다는 오류가 발생하도록 변경 - 11.4 이전 버전에서 작성된 해당 질의는 11.4 버전에서 오류 발생하므로 수정 필요 ROWNUM 연산 값이 NUMERIC 타입 범위를 초과할 경우 오류 발생하도록 변경 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 유틸리티 ~~~~~~~~ ``csql``\의 인터렉티브 모드에서 SQL문 또는 PL/CSQL 문장(create문, body문 등) 작성 중 세션 명령어가 인식되도록 변경 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``cubrid plandump -d`` 수행시 삭제전 plan 정보 출력하지 않게 변경 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HA ~~ ``ha_mode`` 가 **on** 이고 **ha_node_list** 에 **자신의 호스트명** 이 있는 경우 오류 발생하도록 변경 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 11.4 이전 버전에서는 replica 모드로 변경 기타 ~~~~ 시스템 테이블 중 db_serial의 컬럼명 변경 (att_name → attr_name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 11.4 이전 버전에서 해당 컬럼명을 명시적으로 사용한 검색 질의는 11.4 버전에서 오류 발생하므로 수정 필요 .. _11_4_changes_perf_improvements: 개선 사항 (성능 개선 포함) -------------------------- SQL ~~~ 상관 하위 질의 결과에 캐시 도입으로 성능 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 상관 하위 질의는 주 질의의 각 행에 대해 개별적으로 수행된다. 이 과정에서 동일한 조건값이 많을 경우, 동일한 하위 질의가 반복적으로 수행되어 성능 저하를 유발할 수 있다. 이를 방지하기 위해 캐시를 적용하여, 동일 조건값의 하위 질의가 반복 수행되지 않도록 최적화하여 성능을 개선함. LIMIT 절에 바인드 변수와 계산식이 포함된 경우, Sort-Limit 최적화가 적용되도록 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code:: sql drop table if exists tbl1; create table tbl1 (col1 int, col2 int); insert into tbl1 select rownum, random() % 100000 +1 from db_class a, db_class b, db_class c, db_class d limit 100000; create index idx on tbl1(col1); prepare stmt from 'SELECT a.col1, a.col2 FROM tbl1 a LEFT JOIN tbl1 b ON a.col1 = b.col1 LEFT JOIN tbl1 c ON a.col1 = c.col1 ORDER BY a.col2,a.col1 LIMIT ?*10,?'; execute stmt using 10,10; PL(JavaSP 포함) ~~~~~~~~~~~~~~~ JNI 프로그램이 세그먼트 폴트 오류 발생시 자동으로 javasp 서버를 재 구동하게 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 여러 종류의 문자 인코딩(euckr, utf8)을 지원하도록 문자열 기능 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 저장 프로시저의 문자열 인코딩 방식을 byte 배열로 처리해서 utf8 인코딩 이외에 euckr 인코딩도 지원하도록 개선 인덱스 ~~~~~~ 필터 인덱스를 생성할 때 where 절의 길이 제한 제거 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 다중 컬럼 인덱스에서 레코드를 읽을 때 필요한 midxkey.buf 크기 계산 방식을 개선하여 인덱스 스캔 성능 향상 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 기존에는 다중 컬럼 인덱스에서 키 길이 계산을 반복적으로 수행했던 것을 각 컬럼의 **OFFSET** 을 추가하여 계산 없이 직접 참조하도록 개선하여 **바이너리 검색, 키 필터링, DML 실행 시** 성능 향상. 불필요한 연산 및 비교 회수를 최적화를 통해 인덱스 스캔 성능 향상 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Range-Scan 과정에서 키를 읽고 처리하는 방식을 최적화하여 불필요한 연산을 줄임. - Range-Scan 과정에서 *upper_key* 와의 불필요한 비교를 줄여 성능 향상. - 인덱스 컬럼 ID를 반복적으로 비교하는 작업을 줄여 연산 최적화. - 리프 노드 헤더에 공통 접두사 (common prefix) 정보를 추가하여, 압축된 리프 노드 처리시 반복 비교 및 계산하는 부분을 최적화 옵티마이저 ~~~~~~~~~~ 옵티마이저의 전반적인 개선을 통한 성능 향상 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 샘플링 통계 수집시 통계의 정확도를 높이기 위해 **샘플링 페이지 수**\를 5000으로 늘림 - 고유 값 수(**NDV**\: *Number of Distinct Values*\) **수집 방법 개선**\으로 정확도를 높임 - 규칙 기반 최적화(**RBO**\: *Rule Based Optimization*\)를 **최소화**\하여 정확도를 높임 - *경험적 가중치(Heuristic Factor)* 사용을 **최소화** - 비용 차이가 1.x 이내일때 사용하던 RBO를 제거하고 비용 기반 최적화 (**CBO**: *Cost Based Optimization*\)로 동작하도록 개선 - 비용 계산식(cost formula) 개선 - **인덱스 필터 스캔 선택도 반영** - 인덱스 스캔 시 데이터 I/O 비용 계산 시 선택도를 고려하도록 변경 - *NOT LIKE* 연산자 **선택도 추가** - 함수 기반 인덱스(*function-based index*\) **선택도 추가** - **NDV(고유 값 수)**\가 1% 이하로 높을 경우, **통계 가중치(weight)** 조정 - **SSCAN_DEFAULT_CARD** 도입 - **NL JOIN(중첩 루프 조인)** 시 카디널리티(결과 건수) 추정이 너무 낮으면 비효율적인 플랜 방지. - LIMIT 절을 고려 비용 및 카디널리티 설정을 도입하고, 소량 데이터 조회 성능을 높이기 위해 **LIMIT 최적화** 및 기본 카디널리티 값을 조정 - 불필요한 조건 제거 - 조인(predicate) 조건 중 논리적으로 **이미 평가된 중복 조건 제거 개선** - 불필요한 **INNER JOIN 제거** - 추가 개선 - trace 정보에 **fetch_time** 추가로 실행 시간 추적 강화. - ``index_ss`` 힌트 없이도 **인덱스 스킵 스캔(index skip scan)** 선택되도록 개선 - PK(Primary Key) 보다 더 좋은 인덱스를 선택할 수 있도록 개선 저장 프로시저 실행 계획 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 저장 프로시저의 실행 계획 처리를 내장 함수의 실행 계획과 동일하게 처리하도록 수정 - 개선 사항 - 인덱스 스캔 가능 - 불 필요한 조인 제거 - **상관 하위 질의**\에서 저장 프로시저 사용시 **결과 캐시** 사용 가능 불필요한 행에 X-LOCK 설정되지 않도록 개선하여 동시성 향상 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 특정 질의에서 LOCK이 너무 이른 시점에 생성되어, 불필요한 LOCK이 발생하고 있었다. 이를 개선하기 위해, 모든 조건이 평가된 후에 불필요한 LOCK을 해제하도록 개선함. like 질의 조건 값으로 JavaSP 함수를 사용하는 경우에 인덱스 스캔을 사용하도록 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code:: sql CREATE OR REPLACE FUNCTION stringTest(x String) RETURN String AS LANGUAGE JAVA NAME 'SpTest.typeteststring(java.lang.String) return java.lang.String'; CREATE TABLE tbl (ord INT, col_int INT, col_char char(1)); CREATE INDEX i_tbl ON tbl (ord); CREATE INDEX i_tbl_char ON tbl (col_char); INSERT INTO tbl VALUES (1,10,'a'); INSERT INTO tbl VALUES (2,10,'b'); INSERT INTO tbl VALUES (3,10,'c'); INSERT INTO tbl VALUES (4,10,'d'); INSERT INTO tbl VALUES (5,10,'e'); SELECT count(*) AS "like" FROM tbl WHERE col_char LIKE (SELECT stringTest('a') FROM dual); 함수 인덱스와 함께 ``<=`` 와 ``>=`` 범위 조건 질의 사용시 범위 인덱스 스캔을 사용하도록 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 유틸리티 ~~~~~~~~ 테이블과 뷰가 없는 DB에서 unloaddb를 실행시 그 외의 schema(user, serial, sp, server, synonym, grant)가 추출될 수 있도록 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unloaddb 성능 개선 ^^^^^^^^^^^^^^^^^^ - 데이터 추출 시간을 크게 단축하기 위해 멀티 스레드 방식을 도입을 통해 성능 개선 - unloaddb 옵션 - **--thread-count**: 동시 실행 스레드 수(0~127) - **enhanced-estimates**: 정확한 레코드 수 예측(verbose 모드 전용) ``csql``\의 환경 변수명 명확성 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - CSQL 환경 변수명의 명확도를 높이기 위해 CUBRID_CSQL 접두사를 추가하여 CUBRID 관련 환경 변수임을 명확히 표시하게 개선 - **변경 사항** - EDITOR → CUBRID_CSQL_EDITOR - SHELL → CUBRID_CSQL_SHELL - FORMATTER → CUBRID_CSQL_FORMATTER - 기존 버전과의 호환성을 위해 기존 환경 변수명도 사용할 수 있음. ``cubrid spacedb`` 결과값 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 사용자가 사용하는 Overflow 페이지가 SYSTEM 페이지로 잘못 분류된 것을 목적에 따라 INDEX와 HEAP로 분류되도록 개선 Broker,CAS,CMS ~~~~~~~~~~~~~~ cubrid broker info 결과값 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 설정값에 사용된 디렉토리명을 절대 경로로 표시 - **ADMIN_LOG_FILE** 표시 추가 잘못된 ACL 설정에 대해 오류 발생하여 사용자 인지 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CMS(CUBRID Manager Server)에서 TLS v1.2 클라이언트가 접속할 수 있도록 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CMS 통해 생성된 broker/cas 프로세스 종료시 좀비 프로세스 남지 않게 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CMS getlogfileinfo() API를 호출하면 동일한 SQL LOGFILE의 정보를 1회만 반환되도록 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CMS ha_status() API가 Master,Slave,Replica 구성된 HA환경에서 Replica Node의 상태가 출력되도록 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HA ~~ **ha_node_list** 및 **ha_replica_list**\의 잘 못된 설정에 대해 명확한 오류 메세지 출력으로 사용자 인지 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Failover와 Failback 발생에 대해 명확한 오류 메시지 출력으로 사용자 인지 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Salve 노드에서 **restoreslave** 실행시 잘 못된 데이터 불일치 오류 메세지가 발생하지 않도록 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 기타 ~~~~ 사용자 편의를 위해 user hosts (cubrid_host.conf) 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - **0.0.0.0 your_hostname** 추가 - 대소문자 구분없이 호스트명을 사용할 수 있도록 개선 - 유효성 검증 (IP 주소,호스트명)에 오류가 있는 경우 오류가 발생하도록 변경 DDL Audit 로그 개선 ^^^^^^^^^^^^^^^^^^^ - CAS에 발생하는 DDL Audit 로그 파일 내용에 'DB Name'\을 추가하여 다수의 데이터베이스를 운영하는 환경에서 어느 데이터베이스에서 처리한 것인지 확인 가능하게 개선 - 커밋/롤백 없이 트랜잭션이 종료되어도 ABORT 로그를 ddl_audit 로그에 기록하도록 수정 - SetAutocommit(false)에서 여러 DDL문을 한 번에 실행할 때 명령문 사이에 ``commit`` 또는 ``rollback`` 남기도록 개선 REDO 복구 과정에 병렬 스레드 적용하여 성능 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 데이터 정합성을 위해 동기화 적용이 필요하지 않는 REDO 복구 과정에 대해 병렬 스레드를 이용한 데이터 페이지별 복구를 적용하여 복구 성능 개선. - 복구시 REDO의 비중이 크고 병렬 지수가 좋은 경우 성능 개선 효과가 큼. **교착 상태(deadlock)** 발생 시 **데이터베이스명_latest.event** 로그파일에 기록되는 잠금관련 정보를 간소화 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 교착 상태(Deadlock) 발생 시, 서버 로그 파일(``데이터베이스명_latest.event``)에 기록되는 로그를 개선하여 **교착 상태에 직접 기여한 잠금 정보만 출력** 하도록 변경. time_format() 및 date_format()의 성능 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 불필요하게 사용된 문자열 연산 함수 호출을 제거하여성능 개선. TRACE 활성화 시 쿼리 성능 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ``set trace on`` 상태에서 쿼리를 실행할 때 발생하던 **TRACE 통계 정보 수집**\의 성능 저하 문제를 해결하기 위해 *고비용 작업을 줄여*\, ``set trace off`` 상태와 동일한 성능으로 실행할 수 있도록 개선 문자열 유형에 대한 불필요한 길이 검사 제거를 통해 성능 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **lock_escalation** 설정 값 만큼만 락 리소스를 유지하도록 변경해서 메모리 사용량 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **optimization_level** 설정값에 잘못된 값을 입력 시 오류 출력을 통해 사용자 인지 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DB볼륨 및 로그의 생성 시간을 확인 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - ``SHOW VOLUME HEADER``, ``SHOW LOG HEADER``, ``SHOW ARCHIVE LOG HEADER``\의 **Creation_time**\으로 볼륨 생성 시간 확인할 수 있게 개선 - ``diagdb``\에서 각 볼륨의 생성 시간을 확인할 수 있게 개선 - ``applyinfo``\에서 **활성 로그 볼륨** 과 **보관 로그 볼륨** 의 볼륨 생성 시간을 확인할 수 있게 개선 **SHOW INDEX CAPACITY** 및 ``diagdb``\에 fence key 정보 추가를 통해 사용자 인지 개선 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 리프 노트 키 압축시 사용한 fence key에 대한 정보를 일반 key 정보와 분리해서 사용자 인지를 개선 .. _11_4_changes_bugfix: 오류수정 -------- SQL ~~~ 다른 계정의 동일명 원격 서버 객체가 존재하는 경우, 사용자명(user schema)없이 원격 서버 객체 참조시 자신의 원격 서버 객체를 참조하지 못하는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ORDER BY 절이 있는 스칼라 하위 질의에서 hidden 컬럼 처리 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ORDER BY를 포함하는 인라인 뷰와 스칼라 하위 질의의 뷰 머징 처리시 ROWNUM이 ``ORDER_BY_NUM()``\으로 잘못 재 작성되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``oracle_style_empty_string=yes`` 설정시 ‘NULL \|\| 문자열’ 연산 결과가 NULL로 출력되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``oracle_style_empty_string=yes`` 설정시 REPLACE 함수 결과가 NULL로 출력되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ *함수 인덱스를 기반으로 Covered Index 스캔* 수행시 잘 못된 결과를 반환하는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 항상 false (또는 NULL) 조건을 가진 CTE 질의 수행시 발생한 세그먼트 폴트 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UNION ALL 구문에서 여러 테이블과 serial의 next_value를 함께 사용한 질의 수행시 발생한 세그먼트 폴트 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SELECT list 절에 alias 없이 255자 초과한 상수값을 사용한 질의 수행시 발생한 세그먼트 폴트 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ OUTER JOIN을 포함한 질의에서 뷰머징 처리 시 발생한 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **SHOW CREATE VIEW** 질의 수행시 현재 사용자의 뷰와 public 사용자의 동일명 뷰가 함께 출력되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ repeat() 함수에 string_max_size_bytes 설정값을 초과한 요청한 경우 오류 메시지가 출력되지 않고 NULL이 반환되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 쿼리 최적화 중 INNER JOIN 제거 과정에서 테이블 위치가 잘못 처리되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PREPARE 구문에서 특정 내장 함수에 호스트 변수 사용시 발생한 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``DROP USER`` 수행시 관련 시스템 카탈로그 테이블의 사용자 정보가 삭제되지 않은 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SP 호출 및 WHERE 절에 호스트 변수를 사용한 Oracle 스타일 LEFT OUTER JOIN이 INNER JOIN으로 재 작성되지 않는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **ORDERBY_NUM()**\이 포함된 하위 질의가 뷰 머징에 잘 못된 결과를 출력하는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 질의 최적화 중 조인 관계가 없는 테이블이 조인 테이블로 인식되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ WHERE 절의 동등 조건(=)과 ORDER BY 절에서 사용된 컬럼이 동일할 때 ROWNUM 값이 0으로 출력되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ INNER JOIN과 Oracle 스타일 OUTER JOIN을 함께 사용하고, WHERE 절에 OUTER JOIN 조인 조건의 위치에 따라 발생한 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **INSERT INTO tbl … SELECT … FROM 뷰테이블 … ON DUPLICATE KEY UPDATE** 질의 수행시 잘못된 결과를 출력하는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 뷰에 분석 함수가 포함될 때, 분석 함수 내부의 컬럼 순서 번호가 잘못되어 잘못된 결과를 출력하는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 범위 조건을 파이프 연산자(||)와 함께 사용시 범위 항목으로 인지하지 못하는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PL(javasp) ~~~~~~~~~~ JavaSP의 DATETIME 매개변수에 DATETIMELTZ 값을 시용시 발생한 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ JavaSP의 선언된 Java 메서드명과 여는 괄호 사이의 공백으로 인해 JavaSP 수행되지 않는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ JavaSP의 미지원 타입을 보유한 테이블의 다른 컬럼을 인자로 사용시 발생한 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ JavaSP에서 **Cannot allocate query entry any more** 발생한 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DBLINK 구문의 호스트 변수에 NULL 처리시 발생하는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ EUC-KR 오라클 DB에 DBLINK Insert 구문에 호스트 변수를 통해 한글 입력시 한글 깨지는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 유틸리티 ~~~~~~~~ ``loaddb`` 실행 중 오류 발생 시 종료 코드가 3으로 설정되지 않는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``loaddb`` *--no-logging* 실행 후 잘 못된 **count(*)** 값을 출력하는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``loaddb`` 실행 중 스키마명이 없는 serial 처리시 발생한 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``loaddb`` 실행 중 오류 발생 시 멈추지 않고 계속 실행되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``loaddb`` 실행 중 대상이 시스템 테이블인 synonym 처리시 발생하는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 11.4 이전 버전의 ``unloaddb`` 파일을 loaddb 실행 시, 트리거 시스템 테이블 컬럼 (condition, action_definition)에 스키마명이 잘못 저장되거나 누락되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``unloaddb`` 실행 시 Reverse Unique Index의 주석이 누락되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``unloaddb`` 실행 시 auto_increment 설정과 함께 PK로 선언된 컬럼의 auto_increment 값이 1로 초기화되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``unloaddb`` *--split-schema-files* 실행 시 Unique Index가 없는 경우 ‘db명_schema_uk’ 파일이 생성되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``unloaddb`` *-i (--input-class-only)* 옵션을 함께 실행시 특정 ALTER SERIAL 문이 누락되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``unloaddb`` 실행시 serial의 current_val과 max_val 동일한 경우 발생한 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``unloaddb`` 실행시 1MB 초과한 JSON 타입 데이터 처리에 대해 무한 루프 발생하는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 일반 사용자로 ``unloaddb`` 실행시 뷰의 query_spec 출력시 일반 사용자와 동일한 스키마명이 제거되지 않는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **DBA** 사용자로 ``unloaddb`` 실행시 serial과 trigger의 스키마명이 누락되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **DBA** 사용자가 *--as-dba* 옵션 없이 ``unloaddb`` 실행시 다른 사용자가 부여한 PROCEDURE 권한(*GRANT … ON PROCEDURE*\)이 출력되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 일반 사용자가 ``unloaddb`` 실행시, 트리거의 condition과 action_definition에 일반 사용지외 동일한 스키마명이 제거되지 않는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``backupdb`` 실행시 불필요한 보관 로그 볼륨이 생성되는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FlashBack를 강제 종료 (Ctrl+C)시 작업 종료되지 않은 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 특정 상황에서 backupdb 수행시 hang 발생하는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Broker,CAS, CMS ~~~~~~~~~~~~~~~ addBatch()와 executeBatch() 처리 시 발생할 수 있는 메모리 누수(memory leak) 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ gettranscationinfo() 함수 호출시 잘 못된 결과를 출력하는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HA ~~ Master, Slave 및 Replica 노드로 구성된 HA 환경에서 ha_replica_delay 설정값이 60초 이상으로 설정된 경우, Replica 노드에서 slave 대상 복제 로그가 삭제되지 않는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ applylogdb 수행중 생성된 sql log 파일이 특정 조건에서 자동 삭제되지 않는 오류 수정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _11_4_cautions: 주의사항 ======== .. _new_cautions: 신규 주의 사항 --------------- CUBRID 11.4의 데이터베이스 볼륨은 CUBRID 11.3 및 그 이전 버전의 볼륨과 호환되지 않는다. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * 새로운 기능 추가로 인해 시스템 카탈로그 정보가 변경되거나 추가됨 (:ref:`catalog`). 그 외 신규 주의 사항은 :ref:`11_4_changes_spec` 사항을 참조. 기존 주의 사항 -------------- .. _11_3_cautions: 11.3 ~~~~ 질의 최적화기의 통계 정보는 DDL 문이 수행될 때 자동으로 갱신되지 않고, 사용자가 직접 UPDATE STATISTICS 문을 실행하여 통계정보를 갱신해야 함 (:doc:`/sql/tuning` 참조) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ALTER TABLE 구문에서 AUTO_INCREMENT 속성 갖는 컬럼 또는 default 값을 가지고 있는 컬럼의 타입 변경시, AUTO_INCREMENT 속성을 사용할 수 없는 타입으로 변경하거나 기존 default 값을 변환할 수 없는 타입으로 변경할 때, 에러가 발생함 (:ref:`change-column` 참조) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 서버측 JDBC에서 cubrid.jdbc.driver.CUBRIDDriver.getDefaultConnection()을 통해 Connection 객체를 가져올 수 없음. 대신, DriverManager.getConnection("jdbc\:default\:connection\:");을 사용해야 함 (:ref:`jsp-server-side-jdbc-connection` 참조) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ USE INDEX(USING INDEX) 구문에서 유효하지 않은 인덱스명이나 테이블명을 지정하는 경우 에러 처리하지 않고 무시함 (해당 사항을 log 파일에 남기려면 error_log_warning 설정값을 yes로 설정하면 됨) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CREATE INDEX 생성시 COMMENT 절의 위치가 WITH 절 또는 INVISIBLE 절 뒤인 구문 마지막 위치로 변경됨 (:doc:`/sql/schema/index_stmt` 참조) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _11_2_cautions: 11.2 ~~~~ CUBRID 11.2의 데이터베이스 볼륨은 CUBRID 11.1 및 그 이전 버전의 볼륨과 호환되지 않는다. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ User schema 개념 도입으로 사용자 별로 동일한 객체명을 사용할 수 있으며, 지원에 따라 다음 동작이 변경됨 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 객체명에 "."(dot)을 허용하지 않는다. * 질의 또는 유틸리티 명령어 사용 시 "[사용자명].객체명"으로 사용해야 한다. (단, 로그인 된 사용자의 객체를 질의하는 경우에는 사용자명을 생략할 수 있음) (:doc:`/sql/user_schema` 참조) * info schema, show full tables 결과에 사용자명 포함되도록 변경되었다. (:doc:`/sql/query/show` 참조) * 11.2 이전 loaddb 파일은 11.2에서 수행할 수 있도록 user명.table명으로 수정하거나 \-\-no-user-specified-name 옵션을 설정하여 loaddb를 수행할 수 있다. (:ref:`loaddb` 참조) JavaSP의 "jdbc\:default\:connection\:" 또는 getDefaultConnection() 사용 시 다음 함수 및 동작 변경됨 (:ref:`JavaSP 주의 사항 ` 참조) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * java.sql.DatabaseMetaData의 모든 function 지원하지 않는다. * java.sql.Connection의 createClob(), createBlob() 지원하지 않는다. * java.sql.Statement의 addBatch(), clearBatch(), executeBatch(), setMaxRows(), cancel() 지원하지 않는다. * 하나의 prepare (또는 execute)에 multiple sql을지원하지 않는다. * cursor는 non-holdable로 변경되었다. * ResultSet은 non-updatable, non-scrollable, non-sensitive로 변경되었다. Truncate table 수행 시 FK의 set null 또는 cascade가 있는 경우 동작이 변경됨 (:doc:`/sql/query/truncate` 참조) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Alter change/modify 시 기입하지 않은 컬럼 속성은 유지되게 변경되었으며, alter 구문으로 auto_increment, on update property를 제거할 수 없게 변경됨 (:ref:`change-column` 참조) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 조건절에 컬럼명만 존재하는 경우 오류 처리되도록 변경됨 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * UPDATE t1 SET c1 = 9 WHERE c1; 형태로 사용하면 오류 발생한다. Multiple SQL는 반드시 세미콜론으로 구분하도록 변경됨 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CUBRID 패키지내의 CCI Driver 디렉토리가 $CUBRID/lib, $CUBRID/include에서 $CUBRID/cci/lib, $CUBRID/cci/include로 각각 변경됨 (:ref:`CCI 개요 ` 참조) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * CCI 사용 시 환경변수 LD_LIBRARY_PATH에 $CUBRID/cci/lib를 추가해야 한다. 백업 시 압축(-z, \-\-compress) 옵션이 기본으로 설정되도록 변경됨 (:ref:`backupdb` 참조) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 새로운 기능 추가로 인해 시스템 카탈로그 정보가 변경되거나 추가됨 (:doc:`/sql/catalog` 참조) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _11_0_cautions: 11.0 ~~~~ CUBRID 11.0의 데이터베이스 볼륨은 CUBRID 10.2 및 그 이전 버전의 볼륨과 호환되지 않는다. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 옵션 없이 테이블 생성 시 reuse_oid 테이블로 생성된다. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CHAR 데이터 타입의 최대 길이는 256M 문자열로 변경되었다. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 문자열 데이터 타입에 길이보다 큰 문자열이 들어가는 경우 오류가 발생하게 수정되었다. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 문자열 끝의 공백 문자를 인식하게 수정하여, 문자열 끝의 공백 문자에 따라 다른 문자열로 인식된다. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 통계 수집 방식의 변경으로 주기적인 통계 수집 수행이 필요하다. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _10_2_cautions: 10.2 ~~~~ CUBRID 10.2의 데이터베이스 볼륨은 CUBRID 10.1 및 그 이전 버전의 볼륨과 호환되지 않는다. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. _10_1_and_old_cautions: 10.1 ~~~~ CUBRID 10.1의 데이터베이스 볼륨은 CUBRID 10.0 및 그 이전 버전의 볼륨과 호환되지 않는다. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 10.0 및 이하 버전 ~~~~~~~~~~~~~~~~~ CUBRID 10.0의 데이터베이스 볼륨은 CUBRID 9.3 및 그 이전 버전의 볼륨과 호환되지 않는다. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DB를 생성할 때 로케일(언어 및 문자 집합)을 지정 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * DB를 생성할 때 로케일을 지정하도록 변경되었다. CUBRID_CHARSET 환경 변수 제거 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 9.2 버전 이후 DB를 생성할 때 로케일(언어 및 문자 집합)을 지정하므로 CUBRID_CHARSET는 더 이상 사용하지 않는다. .. 4.4new [JDBC] 연결 URL의 zeroDateTimeBehavior 값이 "round"일 때 TIMESTAMP의 zero date가 '0001-01-01 00:00:00'에서 '1970-01-01 00:00:00'(GST)으로 변경 (CUBRIDSUS-11612) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 2008 R4.4부터 연결 URL의 "zeroDateTimeBehavior" 속성 값이 "round"일 때 TIMESTAMP의 zero date가 '0001-01-01 00:00:00'에서 '1970-01-01 00:00:00'(GST)으로 변경되었므로, 응용 프로그램에서 zero date를 사용하는 경우 주의해야 한다. AIX에서 CUBRID SH 패키지 설치 시 권장 사항 (CUBRIDSUS-12251) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * AIX OS에서 ksh를 사용하여 CUBRID SH 패키지를 설치하는 경우 다음 오류와 함께 실패한다. :: 0403-065 An incomplete or invalid multibyte character encountered. * 따라서 ksh 대신 ksh93 또는 bash를 사용할 것을 권장한다. :: $ ksh93 ./CUBRID-9.2.0.0146-AIX-ppc64.sh $ bash ./CUBRID-9.2.0.0146-AIX-ppc64.sh CUBRID_LANG 제거, CUBRID_MSG_LANG 추가 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 9.1 버전부터 CUBRID_LANG 환경 변수를 더 이상 사용하지 않는다. * 유틸리티 메시지 및 오류 메시지를 출력할 때는 CUBRID_MSG_LANG 환경 변수를 사용한다. CCI 응용 프로그램에서 여러 개의 질의를 한 번에 수행한 결과의 배열에 대한 오류 처리 방식 수정 (CUBRIDSUS-9364) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * CCI 응용에서 여러 개의 질의를 한 번에 수행할 때 2008 R3.0부터 2008 R4.1 버전까지는 cci_execute_array 함수나 cci_execute_batch 함수에 의한 질의 수행 결과들 중 하나만 오류가 발생해도 해당 질의의 오류 코드를 반환했으나, 2008 R4.3 버전 및 9.1 버전부터는 전체 질의 개수를 반환하고 CCI_QUERY_RESULT_* 매크로를 통해 개별 질의에 대한 오류를 확인할 수 있도록 수정했다. * 수정 이전 버전에서는 오류가 발생한 경우에도 배열 내 각각의 질의들의 성공 실패 여부를 알 수 없으므로, 이를 판단해야 한다. .. code-block:: c ... char *query = "INSERT INTO test_data (id, ndata, cdata, sdata, ldata) VALUES (?, ?, 'A', 'ABCD', 1234)"; ... req = cci_prepare (con, query, 0, &cci_error); ... error = cci_bind_param_array_size (req, 3); ... error = cci_bind_param_array (req, 1, CCI_A_TYPE_INT, co_ex, null_ind, CCI_U_TYPE_INT); ... n_executed = cci_execute_array (req, &result, &cci_error); if (n_executed < 0) { printf ("execute error: %d, %s\n", cci_error.err_code, cci_error.err_msg); for (i = 1; i <= 3; i++) { printf ("query %d\n", i); printf ("result count = %d\n", CCI_QUERY_RESULT_RESULT (result, i)); printf ("error message = %s\n", CCI_QUERY_RESULT_ERR_MSG (result, i)); printf ("statement type = %d\n", CCI_QUERY_RESULT_STMT_TYPE (result, i)); } } ... * 수정된 버전부터는 오류가 발생하면 전체 질의가 실패한 것이며, 오류가 발생하지 않은 경우에 대해 배열 내 각 질의의 성공 여부를 판단한다. .. code-block:: c ... char *query = "INSERT INTO test_data (id, ndata, cdata, sdata, ldata) VALUES (?, ?, 'A', 'ABCD', 1234)"; ... req = cci_prepare (con, query, 0, &cci_error); ... error = cci_bind_param_array_size (req, 3); ... error = cci_bind_param_array (req, 1, CCI_A_TYPE_INT, co_ex, null_ind, CCI_U_TYPE_INT); ... n_executed = cci_execute_array (req, &result, &cci_error); if (n_executed < 0) { printf ("execute error: %d, %s\n", cci_error.err_code, cci_error.err_msg); } else { for (i = 1; i <= 3; i++) { printf ("query %d\n", i); printf ("result count = %d\n", CCI_QUERY_RESULT_RESULT (result, i)); printf ("error message = %s\n", CCI_QUERY_RESULT_ERR_MSG (result, i)); printf ("statement type = %d\n", CCI_QUERY_RESULT_STMT_TYPE (result, i)); } } ... java.sql.XAConnection 인터페이스에서 HOLD_CURSORS_OVER_COMMIT을 지원하지 않음 (CUBRIDSUS-10800) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 현재 CUBRID는 java.sql.XAConnection 인터페이스에서 ResultSet.HOLD_CURSORS_OVER_COMMIT를 지원하지 않는다. 9.0부터 STRCMP가 대소문자를 구분하여 동작 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 9.0 이전 버전까지는 STRCMP가 대소문자를 구분하지 않았지만 9.0부터는 문자열에서 대소문자를 비교하여 구분한다. * STRCMP가 대소문자를 구분하지 않도록 하려면 대소문자를 구분하지 않는 콜레이션(예: utf8_en_ci)을 사용해야 한다. .. code-block:: sql -- In previous version of 9.0 STRCMP works case-insensitively SELECT STRCMP ('ABC','abc'); 0 -- From 9.0 version, STRCMP distinguish the uppercase and the lowercase when the collation is case-sensitive. export CUBRID_CHARSET=en_US.iso88591 SELECT STRCMP ('ABC','abc'); -1 -- If the collation is case-insensitive, it distinguish the uppercase and the lowercase. export CUBRID_CHARSET=en_US.iso88591 SELECT STRCMP ('ABC' COLLATE utf8_en_ci ,'abc' COLLATE utf8_en_ci); 0 2008 R4.1 버전부터 CCI_DEFAULT_AUTOCOMMIT의 기본값이 ON으로 변경됨 (CUBRIDSUS-5879) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * CCI 인터페이스로 개발한 응용 프로그램의 자동 커밋 모드에 영향을 미치는 CCI_DEFAULT_AUTOCOMMIT 브로커 파라미터의 기본값이 CUBRID 2008 R4.1부터 ON으로 변경되었다. 이 변경의 결과로 CCI 및 CC 기반 인터페이스(PHP, ODBC, OLE DB 등) 사용자는 응용 프로그램의 자동 커밋 모드가 이에 대해 적합한지 확인해야 한다. 2008 R4.0 버전부터 페이지 단위를 사용하는 옵션 및 파라미터가 볼륨 크기 단위를 사용하도록 변경됨 (CUBRIDSUS-5136) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 데이터베이스 볼륨 크기와 cubrid createdb 유틸리티의 로그 볼륨 크기를 지정하기 위해 페이지 단위를 사용하는 옵션(-p, -l, -s)은 제거되므로, 2008 R4.0 베타 이후 새로 추가된 옵션(--db-volume-size, --log-volume-size, --db-page-size, --log-page-size)을 사용한다. * cubrid addvoldb 유틸리티의 데이터베이스 볼륨 크기를 지정하려면 페이지 단위를 사용하지 말고 2008 R4.0 베타 이후 새로 추가된 옵션(--db-volume-size)을 사용한다. * 페이지 단위 시스템 파라미터가 제거되므로 바이트 형식의 새 시스템 파라미터 사용을 권장한다. 관련 시스템 파라미터에 대한 자세한 내용은 아래를 참고한다. 2008 R4.0 베타 이전 버전 사용자는 db 볼륨 크기를 설정할 때 주의할 것 (CUBRIDSUS-4222) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 2008 R4.0 베타 버전부터 데이터베이스를 생성할 때 데이터 페이지 크기 및 로그 페이지 크기의 기본값이 4KB에서 16KB로 변경되었다. 페이지 수로 데이터베이스 볼륨을 지정하는 경우 볼륨의 바이트 크기는 예상과 다를 수 있다. 어떠한 옵션도 선택하지 않은 경우 이전 버전에서는 4KB 페이지 크기의 100MB 데이터베이스 볼륨이 생성되었다. 그러나 2008 R4.0부터는 16KB 페이지 크기의 512MB 데이터베이스 볼륨이 생성된다. 또한 사용 가능한 데이터베이스 볼륨의 최소 크기는 20MB로 제한된다. 따라서, 이 크기보다 작은 데이터베이스 볼륨을 생성할 수 없다. 2008 R4.0 이전 버전의 일부 시스템 파라미터의 기본값 변경 (CUBRIDSUS-4095) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 2008 R4.0부터 일부 시스템 파라미터의 기본값이 변경되었다. * max_clients의 기본값(DB 서버에서 허용되는 동시 연결 수 지정)과 index_unfill_factor의 기본값(인덱스 페이지 생성 시 향후 갱신을 위한 예약 공간의 비율 지정)이 변경되었으며, 바이트 단위의 시스템 파라미터의 기본값이 페이지 단위의 이전 시스템 파라미터의 기본값을 초과하는 경우 더 많은 메모리를 사용하게 되었다. +-----------------------------+----------------------------+----------------------+--------------------+ | 기존 시스템 | 추가된 시스템 | 기존 기본값 | 변경된 기본값 | | 파라미터 | 파라미터 | | (단위 :바이트) | | | | | | +=============================+============================+======================+====================+ | max_clients | 없음 | 50 | 100 | +-----------------------------+----------------------------+----------------------+--------------------+ | index_unfill_factor | 없음 | 0.2 | 0.05 | +-----------------------------+----------------------------+----------------------+--------------------+ | data_buffer_pages | data_buffer_size | 100M(page size=4K) | 512M | +-----------------------------+----------------------------+----------------------+--------------------+ | log_buffer_pages | log_buffer_size | 200K(page size=4K) | 4M | | | | | | +-----------------------------+----------------------------+----------------------+--------------------+ | sort_buffer_pages | sort_buffer_size | 64K(page size=4K) | 2M | | | | | | +-----------------------------+----------------------------+----------------------+--------------------+ | index_scan_oid_buffer_pages | index_scan_oid_buffer_size | 16K(page size=4K) | 64K | | | | | | +-----------------------------+----------------------------+----------------------+--------------------+ * 또한, cubrid createdb를 사용하여 데이터베이스를 생성할 때 데이터 페이지 크기 및 로그 페이지 크기의 최소 값이 1K에서 4K로 변경되었다. 시스템 파라미터가 잘못 설정된 경우 데이터베이스 서비스, 유틸리티 및 응용 프로그램을 수행할 수 없도록 변경됨 (CUBRIDSUS-5375) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * cubrid.conf 또는 cubrid_ha.conf에 정의되지 않은 시스템 파라미터를 설정하거나, 시스템 파라미터의 값이 임계값을 초과하거나, 페이지 단위 시스템 파라미터 및 바이트 단위 시스템 파라미터가 동시에 사용되는 경우 관련 서비스, 유틸리티 및 응용 프로그램이 수행되지 않도록 변경되었다. CUBRID 32비트 버전에서 2G를 초과하는 값을 사용하여 data_buffer_size를 설정할 경우 데이터베이스 구동에 실패함 (CUBRIDSUS-5349) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * CUBRID 32비트 버전에서 data_buffer_size의 값이 2G를 초과하는 경우 데이터베이스 구동에 실패한다. 이 설정 값은 OS 제한 때문에 32비트 버전에서 2G를 초과할 수 없다. Windows Vista 및 그 이후 버전에서 CUBRID 유틸리티를 사용한 서비스 제어 시 권장 사항 (CUBRIDSUS-4186) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Windows Vista 및 그 이후 버전에서 cubrid 유틸리티를 사용하여 서비스를 제어하려면 명령 프롬프트 창을 관리자 권한으로 구동한 후 사용하는 것을 권장한다. * 명령 프롬프트 창을 관리자 권한으로 구동하지 않고 cubrid 유틸리티를 사용하는 경우 UAC(User Account Control) 대화 상자를 통하여 관리자 권한으로 수행할 수 있으나 수행 결과의 메시지를 확인할 수 없다. * Windows Vista 및 그 이후 버전에서 명령 프롬프트 창을 관리자 권한으로 구동하는 방법은 다음과 같다.: * [시작 > 모든 프로그램 > 보조프로그램 > 명령 프롬프트]를 마우스 오른쪽 버튼을 클릭한다. * [관리자로 수행(A)]을 선택하면 권한 상승을 확인하는 대화 상자가 활성화되고, “예"를 클릭하여 관리자 권한으로 구동한다. CUBRID 소스 빌드 후 수행 시, 매니저 서버 프로세스 관련 오류 발생 (CUBRIDSUS-3553) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 사용자가 CUBRID 소스를 직접 빌드하고 설치하는 경우, CUBRID와 CUBRID Manager를 각각 빌드하여 설치해야 한다. CUBRID 소스만 체크 아웃하고 빌드 후 cubrid service start 또는 cubrid manager start를 실행하면 "cubrid manager server is not installed"라는 오류가 발생한다. 2008 r3.0 또는 그 이전 버전에서 사용하던 GLO 클래스 지원 중단 (CUBRIDSUS-3826) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * CUBRID 2008 R3.0 및 그 이전 버전은 glo(Generalized Large Object) 클래스를 사용하여 Large Object를 처리했지만 glo 클래스는 CUBRID 2008 R3.1 및 그 이후 버전에서 제거되었다. 대신, BLOB 및 CLOB(이후 LOB) 데이터 타입이 지원된다. LOB 데이터 타입에 대한 자세한 내용은 :ref:`blob-clob` 절을 참고한다. * glo 클래스 사용자는 다음 작업을 수행할 것을 권장한다.: * GLO 데이터를 파일로 저장한 후에 다른 응용 프로그램 및 DB 스키마에서 GLO를 사용하지 않도록 수정한다. * unloaddb 및 loaddb 유틸리티를 사용하여 DB 마이그레이션을 수행한다. * 수정된 응용 프로그램에 따라 파일을 LOB 데이터로 로드하는 작업을 수행한다. * 수정한 응용 프로그램이 정상적으로 동작하는지 확인한다. * 예를 들어, cubrid loaddb 유틸리티가 GLO 클래스를 상속하거나 GLO 데이터 타입이 있는 테이블을 로드하는 경우 "Error occurred during schema loading." 오류 메시지와 함께 데이터 로딩을 중지한다. * GLO 클래스의 지원이 중단됨에 따라 각 인터페이스에 대해 삭제된 함수는 다음과 같다.: +------------+----------------------------+ | 인터페이스 | 삭제한 함수 | +============+============================+ | CCI | cci_glo_append_data | | | | | | cci_glo_compress_data | | | | | | cci_glo_data_size | | | | | | cci_glo_delete_data | | | | | | cci_glo_destroy_data | | | | | | cci_glo_insert_data | | | | | | cci_glo_load | | | | | | cci_glo_new | | | | | | cci_glo_read_data | | | | | | cci_glo_save | | | | | | cci_glo_truncate_data | | | | | | cci_glo_write_data | | | | +------------+----------------------------+ | JDBC | CUBRIDConnection.getNewGLO | | | | | | CUBRIDOID.loadGLO | | | | | | CUBRIDOID.saveGLO | | | | +------------+----------------------------+ | PHP | cubrid_new_glo | | | | | | cubrid_save_to_glo | | | | | | cubrid_load_from_glo | | | | | | cubrid_send_glo | | | | +------------+----------------------------+ 마스터와 서버 프로세스 사이의 프로토콜이 변경된 경우 또는 두 버전이 동시에 실행되는 경우 포트 설정 필요 (CUBRIDSUS-3564) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 마스터 프로세스(cub_master)와 서버 프로세스(cub_server) 사이의 통신 프로토콜이 변경되었으므로 CUBRID 2008 R3.0 또는 그 이후 버전의 마스터 프로세스는 이전 버전의 서버 프로세스와 통신할 수 없고 이전 버전의 마스터 프로세스는 2008 R3.0 또는 그 이후 버전과 통신할 수 없다. 따라서 이전 버전이 이미 설치된 환경에 새 버전을 추가하여 동시에 두 버전의 CUBRID를 실행하는 경우 버전별로 다른 포트가 사용되도록 cubrid.conf의 cubrid_port_id 시스템 파라미터를 수정해야 한다. JDBC에서 URL 문자열로서 연결 정보를 입력할 때 물음표 명시 (CUBRIDSUS-3217) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * JDBC에서 URL 문자열로서 연결 정보를 입력할 때 이전 버전에서 물음표(?)를 입력하지 않은 경우에도 속성 정보가 지정되었다. 그러나 이 CUBRID 2008 R3.0 버전에서는 구문에 따라 물음표를 명시해야 한다. 그렇지 않은 경우 오류가 표시된다. 또한, 연결 정보에 사용자명 또는 암호가 없는 경우에도 콜론(:)을 명시해야 한다. :: URL=jdbc:CUBRID:127.0.0.1:31000:db1:::altHosts=127.0.0.2:31000,127.0.0.3:31000 -- 에러처리 URL=jdbc:CUBRID:127.0.0.1:31000:db1:::?altHosts=127.0.0.2:31000,127.0.0.3:31000 -- 정상처리 데이터베이스명에 @을 포함할 수 없음 (CUBRIDSUS-2828) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 데이터베이스명에 @이 포함되면 호스트명이 지정된 것으로 해석될 수 있다. 이를 방지하기 위해 cubrid createdb, cubrid renamedb 및 cubrid copydb 유틸리티를 실행할 때는 데이터베이스에 @이 포함될 수 없도록 수정되었다.