10.2 릴리즈 노트¶
릴리즈 노트 정보¶
본 문서는 CUBRID 10.2(빌드 번호: 10.2.0.8797-d56a158)에 관한 정보를 포함한다.
CUBRID 10.2는 CUBRID 10.1에서 발견된 오류 수정 및 기능 개선과 이전 버전들에 반영된 모든 오류 수정 및 기능 개선을 포함한다.
CUBRID 10.1에 대한 정보는 https://www.cubrid.org/manual/en/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/en/9.3.0/release_note/index.html 에서 확인할 수 있다.
릴리즈 개요¶
CUBRID 10.2는 새로운 기능, 중요한 변경 사항 및 개선 사항이 포함 된 최신 안정화 버전입니다.
CUBRID 10.2는
대폭 향상된 버전이다.
보다 안정적이고, 빠르고, 확장성이 높다: 온라인 병렬 데이터 로딩, 자동 커밋 워크로드 최적화
수많은 중요 버그가 수정되었다.
유용한 SQL 확장: JSON 데이터 타입 및 CTE(Common Table Expressions) 확장
인덱스 성능 및 관리 개선: 온라인 병렬 인덱스 생성, 외래키 생성 성능 개선, Invisible index 구문 제공
대규모 코드 재작성 및 최신화 작업을 포함한다.
CUBRID 10.2는 더 빨라졌다. 이 버전은 YCSB 워크로드 A (140 % : 10.1) 및 YCSB 워크로드 B (130 % : 10.1)와 같은 자동 커밋 워크로드에 최적화되었다. 또한 온라인 병렬 로더를 통해 대량 데이터 로딩 시 CUBRID 10.1 대비 10배 빨라졌다.
CUBRID 10.2는 새로운 기능 제공으로 더 개선 되었다. CUBRID 10.2는 JSON 데이터 타입, path, 함수 및 연산자를 지원한다. CTE(Common Table Expressions)는 이제 SELECT뿐만 아니라 INSERT, REPLACE, DELETE, UPDATE, CREATE TABLE AS SELECT에도 허용된다. 인덱스 관리가 크게 개선되었다. select 및 DML을 수행하며 성능 저하없이 인덱스 생성할 수 있도록 온라인 인덱스 로딩을 지원하고, 온라인 병렬 인덱스 생성 옵션을 제공하여 인덱스 생성 속도를 크게 향상시켰다. 또한 외래키 생성 성능이 2 ~ 3배 향상되었다. Invisible index는 실제 작업 수행 없이 인덱스 제거 효과를 테스트하는데 도움이 된다.
CUBRID 10.2는 더욱 신뢰할 수 있으며 안정적 이다. 이중 쓰기 버퍼(Double Write Buffer)는 I/O 부분 쓰기를 방지하고 성능 저하를 최소화하기위한 많은 최적화를 포함하고 있다. CUBRID 10.2에서는 1300+개 이상의 이슈들이 수정되었고, 엄격한 테스트를 통과했다.
CUBRID 10.2는 Linux의 devtoolset-8(GCC 8.2)과 Windows의 VS 2017로 빌드한다. CUBRID 코드는 C ++로 완전히 재 컴파일되고, 새로운 기능 구현은 C ++ 확장자 및 STL을 완전히 활용한다.
CUBRID 10.2의 데이터베이스 볼륨은 CUBRID 10.1 및 그 이전 버전의 볼륨과 호환되지 않는다. 따라서, CUBRID 10.1 또는 이전 버전을 사용하는 경우 반드시 데이터베이스를 마이그레이션 해야 한다. 이와 관련하여 업그레이드 절을 참고한다.
드라이버 호환성¶
CUBRID 10.2의 JDBC 및 CCI 드라이버는 CUBRID 10.1, 10.0, 9.3, 9.2, 9.1, 2008 R4.4, R4.3 또는 R4.1의 DB 서버와 호환된다.
드라이버 업그레이드를 권장한다.
JSON 데이터 타입과 같은 새로운 기능은 10.2 드라이버에서만 지원되므로, CUBRID 10.2 사용자는 드라이버를 업그레이드할 것을 강력히 권고한다.
변경 사항에 대한 자세한 내용은 10.2 변경사항 절을 참고한다. 이전 버전의 사용자는 10.2 변경사항 및 신규 주의 사항 절을 확인해야 한다.
10.2 변경사항¶
change logs of CUBRID 10.2 를 참고한다.
주의사항¶
신규 주의 사항¶
CUBRID 10.2의 데이터베이스 볼륨은 CUBRID 10.1 및 그 이전 버전의 볼륨과 호환되지 않는다.¶
기존 주의 사항¶
DB를 생성할 때 로케일(언어 및 문자 집합)을 지정¶
DB를 생성할 때 로케일을 지정하도록 변경되었다.
CUBRID_CHARSET 환경 변수 제거¶
9.2 버전 이후 DB를 생성할 때 로케일(언어 및 문자 집합)을 지정하므로 CUBRID_CHARSET는 더 이상 사용하지 않는다.
[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_* 매크로를 통해 개별 질의에 대한 오류를 확인할 수 있도록 수정했다.
수정 이전 버전에서는 오류가 발생한 경우에도 배열 내 각각의 질의들의 성공 실패 여부를 알 수 없으므로, 이를 판단해야 한다.
...
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));
}
}
...
수정된 버전부터는 오류가 발생하면 전체 질의가 실패한 것이며, 오류가 발생하지 않은 경우에 대해 배열 내 각 질의의 성공 여부를 판단한다.
...
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)을 사용해야 한다.
-- 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 데이터 타입에 대한 자세한 내용은 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 유틸리티를 실행할 때는 데이터베이스에 @이 포함될 수 없도록 수정되었다.