ALTIBASE HDB 6.3.1.10.6 Patch Notes
목차 BUG-45060 offline replication start 와 replication drop 을동시에수행하는경우, replication start 가완료되지않았으면 replication drop 을수행하지못하도록수정하였습니다... 4 BUG-46193 메모리테이블의이중화병렬 sync 의성능을개선합니다... 5 BUG-46202 v$event_name 에중복된항목이있습니다... 7 BUG-46229 MERGE 구문에서의메모리재사용개선... 8 BUG-46230 idumemory 의 getstatus(), setstatus() 함수에러메시지세분화... 9 BUG-46249 group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 10 BUG-46264 디스크테이블에서 window sort 의 order by 절에동일한컬럼을중복하여나열하는경우, hang 이발생할수있습니다... 13 BUG-46265 Create Disk Temp Table 에서 Key column list 가순환할수도있는지검증합니다.... 14 BUG-46266 [sm] V$LFG 에서삭제된 logfile 번호컬럼 (FIRST_DELETED_LOGFILE, LAST_DELETED_LOGFILE) 값이잘못출력됩니다... 15 BUG-46279 Disk temp 사용시 grouping 데이터의정렬이 subquery 를참조하는경우결과값오류가발생합니다... 16 BUG-46292 aexport 에서객체를생성할때, BIGINT 타입의 Object Id 가 integer 타입으로바인딩되어 Numeric value out of range 에러가발생합니다... 19 BUG-46295 뷰생성문마지막라인에단일행주석이포함될경우, 생성된 SQL 파일이정상적으로실행되지않습니다... 20 BUG-46309 PSM 안에서 dequeue 호출시 into 절을누락하면서버가비정상종료할수있습니다... 22 BUG-46314 각서버에서이중화대상 Table 의컬럼순서가다른경우, Update 수행시이중화가정상적으로수행되지않습니다... 25 2 / 32
BUG-46322 Disk Sort Temp Table 중특정 merge join 에서정상상황임에도비정상으로판단하여오류를잘못반환하는문제를수정합니다. 26 BUG-46383 Disk Sort Temp Table 에서잘못된 page 를읽어서 hang 이발생하는문제를수정합니다... 28 BUG-46384 Disk Sort Temp Table 에서작업완료되지않은 page 가다른 page 로변경되어오작동하거나 hang 이발생하는문제를수정합니다... 29 BUG-46407 dump_stack.sh 에서간헐적으로콜스택을가져오지못하는상황이있습니다... 30 BUG-46410 sdctemprow::filteringandfetch() 에서 row Ptr 이잘못설정될수있습니다.... 31 3 / 32
BUG-45060 offline replication start 와 replication drop 을동시에 수행하는경우, replication start 가완료되지않았으면 replication drop 을수행하지못하도록수정하였습니다. 증상변경사항 rp Fatal Frequence 재현절차 N/A 수행결과 N/A 예상결과 N/A 오프라인이중화에서 replication start 와 replication drop 을동시에수행하는경우, offline replication start 가진행중일때 replication drop 이관련자료구조를삭제하여, 예기치못한오류가발생할수있습니다. 이에 replication start 가완료되지않았으면 replication drop 을수행하지못하도록수정하였습니다. N/A 4 / 32
BUG-46193 메모리테이블의이중화병렬 sync 의성능을개선합니다. 증상변경사항 rp Efficiency Always 재현절차 N/A 수행결과 N/A 예상결과 N/A 메모리테이블의이중화병렬 sync 에서성능개선및관리효율성을위해 REPLICATION_SYNC_TUPLE_COUNT 를각테이블에맞게적절한값으로동작하는기능을추가하였습니다. REPLICATION_SYNC_TUPLE_COUNT 프로퍼티를 0 으로설정하면, REPLICATION_SYNC_TUPLE_COUNT 가테이블의레코드최대개수에송신쓰레드를나눈값으로자동계산됩니다. 만약자동으로계산된건수가 50 만건보다작은경우, 50 만건으로설정됩니다. 자동으로계산된레코드건수가 50 만건보다큰경우, 로그가쌓이는것을방지하기위해서 50 만건단위로커밋합니다. 참고로, 기존에는 REPLICATION_SYNC_TUPLE_COUNT 를 0 으로설정하면, sync 가동작하지않았습니다. 또한, REPLICATION_SYNC_TUPLE_COUNT 프로퍼티의기본값이 500000 에서 0 으로변경되었습니다. - 이름 : REPLICATION_SYNC_TUPLE_COUNT - 공개 / 비공개 : 공개 - 변경 / 추가 / 삭제 : 변경 - 최소값, 최대값, 기본값 : 0,2^64-1,0 - 속성설명 : Property 병렬동기화시송신쓰레드가한번에읽어서처리할수있는레코드의최대개수를지정한다. Altibase 운영중 ALTER SYSTEM 문을이용하여이프로퍼티의값을변경할수있다. 0 으로설정시각테이블마다테이블의 row 개수에따라적절한값으로처리된다. ( 보통 row 개수 / 송신쓰레드수로동작하지만 5 / 32
50 만이하인경우 50 만으로동작한다 ) Error Code N/A N/A 6 / 32
BUG-46202 v$event_name 에중복된항목이있습니다. sm Message Error Always set vertical on; 재현절차 select * from v$event_name where name in('latch free: drdb secondary bcb mutex'); isql> select * from v$event_name where name in('latch free: drdb secondary bcb mutex'); EVENT_ID : 32 NAME : latch free: drdb secondary bcb mutex WAIT_CLASS_ID : 3 수행결과 WAIT_CLASS : Concurrency EVENT_ID : 33 NAME : latch free: drdb secondary bcb mutex WAIT_CLASS_ID : 3 WAIT_CLASS : Concurrency 2 rows selected. isql> select * from v$event_name where name in('latch free: drdb secondary bcb mutex'); EVENT_ID : 32 예상결과 NAME : latch free: drdb secondary bcb mutex WAIT_CLASS_ID : 3 WAIT_CLASS : Concurrency 1 row selected. 증상 v$event_name 에중복된항목이있어, 수정하였습니다. 변경사항 N/A 7 / 32
BUG-46229 MERGE 구문에서의메모리재사용개선 증상변경사항 qp-dml-execute Maintainability Always 재현절차 N/A 수행결과 N/A 예상결과 N/A Merge 함수에서메모리재사용코드를적절한값으로사용하도록조정하였습니다. N/A 8 / 32
BUG-46230 idumemory 의 getstatus(), setstatus() 함수에러메시지 세분화 증상변경사항 id Other Always 재현절차 N/A 수행결과 N/A 예상결과 N/A idumemory 의 getstatus(), setstatus() 함수에러메시지세분화 N/A 9 / 32
BUG-46249 group by 표현식에있는컬럼을참조하는집합연산이존재하지 않으면결괏값오류가발생할수있습니다. 재현절차 qp-select-pvo Functional Error Always drop table t1; create table t1 ( c1 varchar(15) ); insert into t1 values ( 'eee' ); insert into t1 values ( 'aaa' ); insert into t1 values ( 'bbb' ); insert into t1 values ( 'ddd' ); insert into t1 values ( 'bbb' ); insert into t1 values ( 'ccc' ); insert into t1 values ( 'aaa' ); insert into t1 values ( 'ccc' ); insert into t1 values ( 'eee' ); insert into t1 values ( 'ddd' ); select /*+ group_sort no_plan_cache */ substr(c1, 1, 3),count(case when substr(c1, 1, 3) = 'SPBKO' then 1 else 0 end) gg1 from t1 group by substr(c1, 1, 3); 수행결과 select /*+ group_hash no_plan_cache */ substr(c1, 1, 3),min(c1),count(case when substr(c1, 1, 3) = 'SPBKO' then 1 else 0 end) gg1 from t1 group by substr(c1, 1, 3); isql> select /*+ group_sort no_plan_cache */ substr(c1, 1, 3) 2,count(case when substr(c1, 1, 3) = 'SPBKO' then 1 else 0 end) gg1 3 from t1 group by substr(c1, 1, 3); SUBSTR(C1, 1, 3) GG1 ------------------------------------------ ddd 1 ddd 1 10 / 32
ddd 1 ddd 1 ddd 1 ddd 3 ddd 1 ddd 1 8 rows selected. 예상결과 isql> select /*+ group_hash no_plan_cache */ substr(c1, 1, 3) 2,min(c1) 3,count(case when substr(c1, 1, 3) = 'SPBKO' then 1 else 0 end) gg1 4 from t1 group by substr(c1, 1, 3); SUBSTR(C1, 1, 3) MIN(C1) GG1 ------------------------------------------------------------ eee eee 2 aaa aaa 2 bbb bbb 2 ddd ddd 2 ccc ccc 2 5 rows selected. isql> select /*+ group_sort no_plan_cache */ substr(c1, 1, 3) 2,count(case when substr(c1, 1, 3) = 'SPBKO' then 1 else 0 end) gg1 3 from t1 group by substr(c1, 1, 3); SUBSTR(C1, 1, 3) GG1 ------------------------------------------ aaa 2 bbb 2 ccc 2 ddd 2 eee 2 5 rows selected. isql> select /*+ group_hash no_plan_cache */ substr(c1, 1, 3) 2,min(c1) 11 / 32
증상 변경사항 3,count(case when substr(c1, 1, 3) = 'SPBKO' then 1 else 0 end) gg1 4 from t1 group by substr(c1, 1, 3); SUBSTR(C1, 1, 3) MIN(C1) GG1 ------------------------------------------------------------ eee eee 2 aaa aaa 2 bbb bbb 2 ddd ddd 2 ccc ccc 2 5 rows selected. group by 표현식에있는컬럼 (t1.c1) 을참조하는집합 연산 (min(c1)) 이존재하지않으면, case 구문에포함된 substring 연산이오동작해서결괏값오류가발생할수있습니다. 수정방법은 case 구문에포함된 substring 연산이 group by 표현식을참조하도록변경합니다. use group_hash hint 12 / 32
BUG-46264 디스크테이블에서 window sort 의 order by 절에동일한 컬럼을중복하여나열하는경우, hang 이발생할수있습니다. 증상변경사항 qp-select-execute Hang Always DROP TABLE T1; CREATE TABLE T1 ( I0 integer, I1 integer ) TABLESPACE sys_tbs_disk_data; 재현절차 INSERT INTO T1 VALUES ( 0, 0 ); INSERT INTO T1 VALUES ( 0, 0 ); SELECT I0,I1, ROW_NUMBER() OVER( ORDER BY I0, I1, I0 ) FROM t1; 수행결과 Hang isql> SELECT I0,I1, ROW_NUMBER() OVER( ORDER BY I0, I1, I0 ) FROM t1; I0 I1 ROW_NUMBER() OVER( ORDER BY I0, I1, I0 ) 예상결과 --------------------------------------------------------------------- 0 0 1 0 0 2 2 rows selected. 디스크테이블에서 window sort 의 order by 절에동일한컬럼을중복하여나열하는경우, 중복을제거하여 hang 이발생하지않도록수정하였습니다. SELECT I0,I1, ROW_NUMBER() OVER( ORDER BY I0, I1 ) FROM t1; 또는 SELECT /*+ TEMP_TBS_MEMORY */ I0,I1, ROW_NUMBER() OVER( ORDER BY I0, I1, I0 ) FROM t1; 13 / 32
BUG-46265 Create Disk Temp Table 에서 Key column list 가순환할수도 있는지검증합니다. sm-disk-resource Hang Always drop table t1; create table t1 ( I0 integer, I1 integer ) tablespace sys_tbs_disk_data; 재현절차 insert into t1 values( 0, 0 ); insert into t1 values( 0, 0 ); SELECT I0,I1, ROW_NUMBER() OVER( ORDER BY I0, I1, I0 ) FROM t1; 수행결과 Hang 예상결과 isql> SELECT I0,I1, ROW_NUMBER() OVER( ORDER BY I0, I1 ) FROM t1; I0 I1 ROW_NUMBER()OVER(ORDERBYI0,I1) ----------------------------------------------------------- 0 0 1 0 0 2 2 rows selected. 증상 Create Disk Temp Table 에서 Key column list 에중복이있는경우, 무시하도록수정하였습니다. 이로인해 HANG 이발생하던문제가수정되었습니다. 변경사항 SELECT I0,I1, ROW_NUMBER() OVER( ORDER BY I0, I1 ) FROM t1; 14 / 32
BUG-46266 [sm] V$LFG 에서삭제된 logfile 번호 컬럼 (FIRST_DELETED_LOGFILE, LAST_DELETED_LOGFILE) 값이 잘못출력됩니다. 증상변경사항 sm Functional Error Always 재현절차 N/A 수행결과 N/A 예상결과 N/A V$LFG 에서삭제된 logfile 번호컬럼 FIRST_DELETED_LOGFILE, LAST_DELETED_LOGFILE 값이잘못출력되던문제를수정하였습니다. N/A 15 / 32
BUG-46279 Disk temp 사용시 grouping 데이터의정렬이 subquery 를 참조하는경우결과값오류가발생합니다. 재현절차 수행결과 qp-select-pvo Functional Error Always DROP TABLE T1; DROP TABLE T3; CREATE TABLE T1 ( game_id int ) TABLESPACE sys_tbs_disk_data; CREATE TABLE T3 ( game_nm int, game_id int ) TABLESPACE sys_tbs_disk_data; INSERT INTO T1 SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 5; INSERT INTO T3 SELECT LEVEL, LEVEL FROM DUAL CONNECT BY LEVEL <= 5; SELECT (SELECT GAME_NM FROM T3 WHERE GAME_ID = a.game_id) AS GAME_NM FROM T1 a GROUP BY a.game_id ORDER BY a.game_id, GAME_NM ; SELECT /*+ TEMP_TBS_MEMORY */ (SELECT GAME_NM FROM T3 WHERE GAME_ID = A.GAME_ID) AS GAME_NM FROM T1 A GROUP BY A.GAME_ID ORDER BY A.GAME_ID, GAME_NM ; isql> SELECT (SELECT GAME_NM FROM T3 WHERE GAME_ID = a.game_id) AS GAME_NM 2 FROM T1 a 3 GROUP BY a.game_id 4 ORDER BY a.game_id, 16 / 32
5 GAME_NM 6 ; GAME_NM -------------- 5 예상결과 1 2 4 5 rows selected. isql> SELECT /*+ TEMP_TBS_MEMORY */ (SELECT GAME_NM FROM T3 WHERE GAME_ID = A.GAME_ID) AS GAME_NM 2 FROM T1 A 3 GROUP BY A.GAME_ID 4 ORDER BY A.GAME_ID, 5 GAME_NM 6 ; GAME_NM -------------- 1 2 3 4 5 5 rows selected. isql> SELECT (SELECT GAME_NM FROM T3 WHERE GAME_ID = a.game_id) AS GAME_NM 2 FROM T1 a 3 GROUP BY a.game_id 4 ORDER BY a.game_id, 5 GAME_NM 6 ; GAME_NM -------------- 1 2 17 / 32
증상 변경사항 3 4 5 5 rows selected. isql> SELECT /*+ TEMP_TBS_MEMORY */ (SELECT GAME_NM FROM T3 WHERE GAME_ID = A.GAME_ID) AS GAME_NM 2 FROM T1 A 3 GROUP BY A.GAME_ID 4 ORDER BY A.GAME_ID, 5 GAME_NM 6 ; GAME_NM -------------- 1 2 3 4 5 5 rows selected. Disk temp 사용시 grouping 데이터의정렬이 subquery 를참조하는경우결과값오류가발생합니다. SELECT /*+ TEMP_TBS_MEMORY */ (SELECT GAME_NM FROM T3 WHERE GAME_ID = A.GAME_ID) AS GAME_NM FROM T1 A GROUP BY A.GAME_ID ORDER BY A.GAME_ID, GAME_NM ; 18 / 32
BUG-46292 aexport 에서객체를생성할때, BIGINT 타입의 Object Id 가 integer 타입으로바인딩되어 Numeric value out of range 에러가발생합니다. 증상변경사항 ux-aexport Fatal Always 재현절차 N/A 수행결과 N/A 예상결과 N/A aexport 에서객체를생성할때, BIGINT 타입의 Object Id 가 integer 타입으로바인딩되어 Numeric value out of range 에러가발생하는데, 이를수정하였습니다. N/A 19 / 32
BUG-46295 뷰생성문마지막라인에단일행주석이포함될경우, 생성된 SQL 파일이정상적으로실행되지않습니다. 재현절차 ux-aexport Functional Error Always import java.sql.connection; import java.sql.drivermanager; import java.sql.sqlexception; import java.sql.statement; import java.util.properties; public class Test4AltiJdbc { public static void main(string[] args) throws SQLException { Properties props = new Properties(); Connection conn = null; Statement stmt = null; String url = "jdbc:altibase://192.168.1.94:56794/mydb"; String sql = "CREATE OR REPLACE VIEW V1 AS SELECT SYSDATE d FROM dual -- e.g. 02-AUG-2018"; props.put("user", "sys"); props.put("password", "manager"); try { Class.forName("Altibase.jdbc.driver.AltibaseDriver"); conn = DriverManager.getConnection(url, props); stmt = conn.createstatement(); stmt.execute(sql); } catch (Exception e) { e.printstacktrace(); } 20 / 32
증상 변경사항 finally { stmt.close(); conn.close(); } } } $ cat ALL_CRT_VIEW_PROC.sql connect "SYS"/"MANAGER"; 수행결과 drop view "SYS"."V1"; CREATE OR REPLACE VIEW V1 AS SELECT SYSDATE D FROM DUAL -- e.g. 02-AUG-2018; $ cat ALL_CRT_VIEW_PROC.sql connect "SYS"/"MANAGER"; drop view "SYS"."V1"; 예상결과 CREATE OR REPLACE VIEW V1 AS SELECT SYSDATE D FROM DUAL -- e.g. 02-AUG-2018 ; 뷰와프로시저의 terminator(; 또는 ;/) 앞에 new line 이추가됩니다. 뷰와프로시저는마지막라인에주석을작성할수있으며, 작성한주석은해당객체생성문과함께그대로메타에기록됩니다. 기존 aexport 는뷰나프로시저의 DDL 을추출할때, 이주석의존재가능성에대한고려없이문장종결자 (; 또는 ;/) 를덧붙였습니다. DDL 마지막에단일행주석이올시, 이종결자가무시되어불완전한문장이출력될수있습니다. 따라서새로운라인에종결자를입력하도록변경하였습니다. N/A 21 / 32
BUG-46309 PSM 안에서 dequeue 호출시 into 절을누락하면서버가비정상 종료할수있습니다. 재현절차 수행결과 qp-psm-trigger-execute Fatal Always DROP QUEUE Q1; DROP PROCEDURE PROC1_DEQUEUE; CREATE QUEUE Q1 (40); CREATE OR REPLACE PROCEDURE PROC1_DEQUEUE AS MSGID INTEGER; MESSAGE VARCHAR(10); CORRID INTEGER; ENQUEUE_TIME DATE; V1 INTEGER; BEGIN DEQUEUE MESSAGE, MSGID FROM Q1; PRINTLN('MSG : ' MESSAGE ); END; / execute PROC1_DEQUEUE; isql> CREATE OR REPLACE PROCEDURE PROC1_DEQUEUE 2 AS 3 MSGID INTEGER; 4 MESSAGE VARCHAR(10); 5 CORRID INTEGER; 6 ENQUEUE_TIME DATE; 7 V1 INTEGER; 8 BEGIN 9 DEQUEUE MESSAGE, MSGID FROM Q1; 10 PRINTLN('MSG : ' MESSAGE ); 11 END; 12 / 22 / 32
증상 변경사항 Create success. isql> execute PROC1_DEQUEUE; [ERR-91015 : Communication failure.] isql> CREATE OR REPLACE PROCEDURE PROC1_DEQUEUE 2 AS 3 MSGID INTEGER; 4 MESSAGE VARCHAR(10); 5 CORRID INTEGER; 6 ENQUEUE_TIME DATE; 7 V1 INTEGER; 8 BEGIN 9 DEQUEUE MESSAGE, MSGID FROM Q1; 10 PRINTLN('MSG : ' MESSAGE ); 11 END; 12 / [ERR-3114D : A SELECT statement in a procedure or function must 예상결과 have an INTO clause. In PROC1_DEQUEUE 0009 : DEQUEUE MESSAGE, MSGID FROM Q1; ^ ^ In PROC1_DEQUEUE 0009 : DEQUEUE MESSAGE, MSGID FROM Q1; ^ ^ ] isql> execute PROC1_DEQUEUE; [ERR-31129 : Procedure or function not found : 0001 : execute PROC1_DEQUEUE ^ ^.] PSM 에서 dequeue 수행시 into 절이없는경우에서버가비정상종료하는현상을수정합니다. 23 / 32
CREATE OR REPLACE PROCEDURE PROC1_DEQUEUE AS V1 INTEGER; V2 VARCHAR(100); V3 VARCHAR(100); BEGIN DEQUEUE c1, c2, c3 into v1, v2,v3 from q1; END; / 24 / 32
BUG-46314 각서버에서이중화대상 Table 의컬럼순서가다른경우, Update 수행시이중화가정상적으로수행되지않습니다. 증상변경사항 dm Functional Error Always 재현절차 N/A 수행결과 N/A 예상결과 N/A 각서버에서이중화대상 table 의컬럼순서가다르더라도, update 수행시이중화가정상적으로수행되도록수정하였습니다. N/A 25 / 32
BUG-46322 Disk Sort Temp Table 중특정 merge join 에서정상 상황임에도비정상으로판단하여오류를잘못반환하는문제를 수정합니다. 증상변경사항 sm-disk-resource Functional Error Always ALTER SYSTEM SET SORT_AREA_SIZE=1048576; ALTER SYSTEM SET TEMP_SORT_GROUP_RATIO=30; ALTER SYSTEM SET OPTIMIZER_JOIN_DISABLE = 0; CREATE TABLE T1 ( I1 CHAR(30000) ) tablespace sys_tbs_disk_data; 재현절차 CREATE TABLE T2 ( I1 CHAR(30000) ) tablespace sys_tbs_disk_data; INSERT INTO T1 SELECT 1 FROM DUAL CONNECT BY LEVEL <= 9; INSERT INTO T2 SELECT 1 FROM DUAL CONNECT BY LEVEL <= 9; SELECT /*+USE_MERGE(T1,T2)*/ count( T1.I1 ) FROM T1 JOIN T2 ON T1.I1=T2.I1; isql> SELECT /*+USE_MERGE(T1,T2)*/ count( T1.I1 ) FROM T1 JOIN T2 ON T1.I1=T2.I1; 수행결과 [ERR-11069 : Internal server error in the storage manager ([FAILURE] ERR-0109E(error=11) Internal server error.)] isql> SELECT /*+USE_MERGE(T1,T2)*/ count( T1.I1 ) FROM T1 JOIN T2 ON T1.I1=T2.I1; COUNT(T1.I1) 예상결과 ----------------------- 81 1 row selected. Disk Sort Temp Table 중특정 merge join 에서정상상황임에도비정상으로판단하여오류를잘못반환하는문제를수정합니다. Temp Table 의크기를작게설정하여공간이부족한상황에서발생합니다. 26 / 32
N/A 27 / 32
BUG-46383 Disk Sort Temp Table 에서잘못된 page 를읽어서 hang 이 발생하는문제를수정합니다. 증상변경사항 sm-disk-resource Hang Rare 재현절차 N/A 수행결과 N/A 예상결과 N/A Disk Sort Temp Table 에서잘못된 Page 를읽어서 hang 이걸리는문제를수정합니다. N/A 28 / 32
BUG-46384 Disk Sort Temp Table 에서작업완료되지않은 page 가다른 page 로변경되어오작동하거나 hang 이발생하는문제를 수정합니다. 증상변경사항 sm-disk-resource Hang Rare 재현절차 N/A 수행결과 N/A 예상결과 N/A Disk Sort Temp Table 에서작업완료되지않은 page 가다른 page 로변경되어오작동하거나 hang 이발생하는문제를수정합니다. N/A 29 / 32
BUG-46407 dump_stack.sh 에서간헐적으로콜스택을가져오지못하는 상황이있습니다. 증상변경사항 id Maintainability Always 재현절차 N/A 수행결과 N/A 예상결과 N/A dump_stack.sh 에서간헐적으로콜스택을가져오지못하는상황이있는데, 이를해결하였습니다. N/A 30 / 32
BUG-46410 sdctemprow::filteringandfetch() 에서 row Ptr 이잘못설정 될수있습니다. 재현절차 수행결과 예상결과 sm-disk-resource Fatal Frequence DROP TABLE T1; DROP TABLE T2; ALTER SYSTEM SET TEMP_HASH_GROUP_RATIO=78; ALTER SYSTEM SET HASH_AREA_SIZE=524288; CREATE TABLE T1 ( I1 INTEGER, I2 VARCHAR(31000) ) tablespace sys_tbs_disk_data; CREATE TABLE T2 ( I1 INTEGER, I2 VARCHAR(31000) ) tablespace sys_tbs_disk_data; INSERT /*+APPEND*/ INTO T1 SELECT ROWNUM, rpad(mod(rownum,100),30000,252) FROM DUAL CONNECT BY LEVEL <= 1000; INSERT /*+APPEND*/ INTO T2 SELECT ROWNUM, rpad(mod(rownum,100),30000,252) FROM DUAL CONNECT BY LEVEL <= 100; SELECT sum(t1.i1) FROM T1 LEFT OUTER JOIN T2 ON T1.I2 = T2.I2 group by T1.I2 ; isql> SELECT sum(t1.i1) FROM T1 LEFT OUTER JOIN T2 ON T1.I2 = T2.I2 group by T1.I2 ; [ERR-91015 : Communication failure.] isql> SELECT sum(t1.i1) FROM T1 LEFT OUTER JOIN T2 ON T1.I2 = T2.I2 group by T1.I2 ; SUM(T1.I1) ----------------------- 5180 5330 5390 5250 5000 31 / 32
증상 변경사항 5500... 5160 5060 5200 5280 100 rows selected. isql> disk temp table 에서 size 가큰 row 를작은크기의 work area 에서 fetch 할때고정되어있어야할 page 가의도치않게 replace 되어서엉뚱한 page 에잘못접근할수있는버그를수정합니다. HASH_AREA_SIZE Property 와 SORT_AREA_SIZE property 를충분히설정. 32 / 32