ALTIBASE HDB 6.5.1.2.7 Patch Notes
목차 BUG-43540 ora(alti)adapter 에서복제대상 DB 장애로데이터정합성이깨진후맞춰지지않습니다... 3 BUG-43821 PERCENTILE_CONT, PERCENTILE_DISC, MEDIAN 에서 DATE 타입을지원해야합니다.... 5 BUG-43831 adapter 반영테이블의사용자를 XLog Sender 에서지정한사용자로하여야합니다.... 7 BUG-43845 set feedback 동작을맞게수정합니다... 12 BUG-43858 PSM 에서 view target 절에 PSM 변수를사용하는경우 invalid literal 에러가발생할수있습니다.... 14 BUG-43859 regexp_substr 함수수행중비정상종료해결... 16 BUG-43860 to_date 함수에서 0 으로설정할수있는오류에대해서는무시할수있어야합니다... 17 BUG-43868 replication heartbeat message 가출력되지않고 HP 에서 getsockopt 의인자를잘못넘겨주고있습니다... 18 BUG-43871 Receiver 에서 statement 를종료시킬때 Cursor/Statement 가 open/begin 상태인지확인하지않고 close/end 를하여 FATAL 이발생합니다... 19 BUG-43882 MEMORY_INDEX_UNBALANCED_SPLIT_RATE 기본값변경... 21 BUG-43887 Hierarchical Query View 는 Unnest 되면안됩니다.... 22 BUG-43897 (+) outer join operator 를테이블의갯수이상사용하는경우비정상종료할수있습니다... 23 2 / 24
BUG-43540 ora(alti)adapter 에서복제대상 DB 장애로데이터정합성이 깨진후맞춰지지않습니다. Module Category 재현빈도 Reproducing Conditions 재현절차 수행결과 예상결과 rp-oraadapter Functional Error Frequence ora(alti)adapter 수행도중 oracle/altiadapter 비정상종료 ora(alti)adapter 만떠있고, 로그를계속무시하는상황발생하여데이터들어짐. xlog sender 에서데이터를다시보내주어데이터정합성보장문제 ================================ adapter 수행중에타겟 DB 비정상종료하면 adapter 가계속떠서 trc 에에러내면서로그를넘김니다. 그래서, 나중에데이터정합성이틀어지게됩니다. 해결방법 ============================= 프로퍼티를추가하여해결 증상 - ORACLE_SKIP_ERROR = 1 - 이프로퍼티는 Oracle ( 또는 Other Altibase ) 와의처리도중에발생한에러에대해서프로퍼티 ERROR_RETRY_COUNT 만큼재시도했는데도에러가발생시 Adapter 를종료할지, 무시하고진행할지에대한프로퍼티입니다. - 기본값은 1 입니다. - 0 : Adapter 종료 - 1 : 무시하고진행 - ORACLE_ERROR_RETRY_COUNT = 0 - 이프로퍼티는 Oracle ( 또는 Other Altibase ) 와의처리도중에발생한에러에대해서재시도를몇번할지에대한프로퍼티입니다. - 기본값은 0 이며, 0 일경우기존 Adapter 처럼재시도를하지않습니다. 3 / 24
- ORACLE_ERROR_RETRY_INTERVAL = 0 - 이프로퍼티는 Oracle ( 또는 Other Altibase ) 와의처리도중에발생한에러에대해서재시도할때, 몇초마다재시도할지에대한프로퍼티입니다. - 기본값은 0 이며, 0 일경우쉬지않고재시도를수행합니다. - ADAPTER_ERROR_RESTART_COUNT = 0 - Adapter 구동중에서발생한모든에러 ( Ala, Oracle 모두포함 ) 에대해서 Adapter 가재시작 ( ala 와의재접속, oracle/other altibase 와의재접속 ) 할지에대한프로퍼티입니다. - 기본값은 0 이며 0 일경우에러발생시 Adapter 는바로종료됩니다. - ADAPTER_ERROR_RESTART_INTERVAL = 0 - 이프로퍼티는 Adapter 구동중에발생한모든에러에대해서재시도할때, 몇초마다재시도할지에대한프로퍼티입니다. - 기본값은 0 이며, 0 일경우쉬지않고재시도를수행합니다. 변경사항 Workaround - ALA_SENDER_REPLICATION_PORT = 0 - Ala 가 Replication 과 Handshake 할때 Replication 의 Sender 를깨우기위해필요한프로퍼티입니다. ( Sender 가슬립중일경우에깨워서바로접속하기위함 ) - 기본값은 0 이며 0 일경우깨우지않고바로 Handshake 를진행합니다. Performance View Property Compile Option Error Code 해당없음 4 / 24
BUG-43821 PERCENTILE_CONT, PERCENTILE_DISC, MEDIAN 에서 DATE 타입을지원해야합니다. Module Category 재현빈도 mt-datatype Functionality Always CREATE TABLE T1 (I1 DATE); 재현절차 SELECT MEDIAN(I1) FROM T1; SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY I1) FROM T1; SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY I1) FROM T1; INSERT INTO T1 VALUES ( SYSDATE ); Reproducing Conditions SELECT MEDIAN(I1) FROM T1; SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY I1) FROM T1; SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY I1) FROM T1; isql> CREATE TABLE T1 (I1 DATE); Create success. isql> SELECT MEDIAN(I1) FROM T1; MEDIAN(I1) -------------- 수행결과 1 row selected. isql> SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY I1) FROM T1; PERCENTILE_CONT(0.5)WITHINGROUP(ORDERBYI1) --------------------------------------------- 1 row selected. 5 / 24
isql> SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY I1) FROM T1; PERCENTILE_DISC(0.5)WITHINGROUP(ORDERBYI1) --------------------------------------------- 증상 변경사항 Workaround 1 row selected. isql> INSERT INTO T1 VALUES ( SYSDATE ); 1 row inserted. isql> SELECT MEDIAN(I1) FROM T1; [ERR-21011 : Invalid literal] isql> SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY I1) FROM T1; [ERR-21011 : Invalid literal] isql> SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY I1) FROM T1; [ERR-21011 : Invalid literal] 예상결과해당없음 PERCENTILE_CONT, PERCENTILE_DISC, MEDIAN 에서 DATE 타입을지원합니다. Performance View Property Compile Option Error Code 해당없음 6 / 24
BUG-43831 adapter 반영테이블의사용자를 XLog Sender 에서지정한 사용자로하여야합니다. Module Category 재현빈도 rp-oraadapter Enhancement Frequence create replication ala for analysis with '127.0.0.1', 33333 from sys.test to orauser.test; Reproducing Conditions 증상 oraadapter.conf ORACLE_SERVER_ALIAS = ksc5601utf16_server ORACLE_USER = scott 재현절차 ORACLE_PASSWORD = tiger oracle 에서 scott 계정에 orauser.test 테이블에갱신권한줌. oraadapter start alter replication ala start; insert into test(...); 수행결과 oracle 에데이터삽입실패. 예상결과데이터삽입성공문제점 ======================================== Oracle 1. OAT 계정생성후롤을이용하여모든테이블에대한 ISUD 권한부여 2. oraadapter.conf 에접속계정을 OAT 로명시 3. alti 계정에 tb_test1 테이블생성 * alti 계정은모든테이블의오너계정. Account lock 설정후접근차단. * OAT 계정은 adapter 전용계정으로 alti 로부터테이블조회, 삽입, 삭제, 갱신등의권한을받음. Altibase 1. sys 유저로 tb_test1 테이블생성 7 / 24
2. 이중화생성 ala for analysis ~~~ from sys.tb_test1 to alti.test1; oraadpater : oautility start 완료 Altibase : replication start 완료 다음과같은에러발생 [2016-07-25 13:33:19] Adapter is ready to process logs. [2016-07-25 13:33:42] OCI library error: 942 ORA-00942: table or view does not exist [2016-07-25 13:33:42] INSERT : [2016-07-25 13:33:42] Table name TB_TEST1 [2016-07-25 13:33:42] Table Id 0 [2016-07-25 13:33:42] Column count 4 [2016-07-25 13:33:42] Column name C1 [2016-07-25 13:33:42] Hidden Column NO [2016-07-25 13:33:42] Column value '3' [2016-07-25 13:33:42] Column name C2 현재 oraadapter 에서 oracle 로데이터를 insert, delete, update 할때 따로계정명을명시하지않음 ex ) insert into TB_TEST1 values( 1 ); 여기서 TB_TEST1 은 alti 계정의테이블이므로 OAT 계정은해당 테이블을찾을수없음. ( alti.tb_test1 이라명시해야함 ) 해결방법 ======================================== xlog sender 만들때사용한 to user 와 oraadapter conf 의 oracle_user 가 다를경우 (altiadapter 도동일 ) 데이터삽입이안됩니다. 이유는 adapter 에서 sql 을만들때 user 를지정하지않고그냥테이블 명만사용하기때문입니다. 따라서 xlog sender 의 to user 에들어온값으로 user 를지정해야합니다. checkconstraint 문제 8 / 24
================================= $ oacheckconstraints Primary key constraint checking... stty: 표준입력 : 장치에대해부적절한 ioctl There are no replication tables. [ALTI.TB_TEST1] FAIL : Altibase "SYS"."TB_TEST1", Oracle "ALTI"."TB_TEST1" The end result of checking constraints : [FAIL] $ oacheckconstraints Primary key constraint checking... stty: 표준입력 : 장치에대해부적절한 ioctl There are no replication tables. [ALTI.TB_TEST1] FAIL : Altibase "SYS"."TB_TEST1", Oracle "ALTI"."TB_TEST1" The end result of checking constraints : [FAIL] 현재 CheckConstraints 는 USER View 를이용하여사용자조회를함. 하지만아래와같이 $ oacheckconstraints Primary key constraint checking... stty: 표준입력 : 장치에대해부적절한 ioctl There are no replication tables. [ALTI.TB_TEST1] FAIL : Altibase "SYS"."TB_TEST1", Oracle "ALTI"."TB_TEST1" The end result of checking constraints : [FAIL] $ oautility start Primary key constraint checking... stty: 표준입력 : 장치에대해부적절한 ioctl There are no replication tables. [ALTI.TB_TEST1] FAIL : Altibase "SYS"."TB_TEST1", Oracle "ALTI"."TB_TEST1" The end result of checking constraints : [FAIL] Failed to start /data/oracle/oraadapter.choi/bin/oraadapter, please check constraints. 보시는것처럼확인되는 error 메세지는 ALTI.TB_TEST1 을찾을수없다 9 / 24
라고나옵니다. 그러나실제로는 ALTI 유저는 TB_TEST1 을가지고있는상태입니다. 아래는 oacheckconstraint 를수정했을경우의각유틸리티실행 결과입니다. $ oacheckconstraints Primary key constraint checking... stty: 표준입력 : 장치에대해부적절한 ioctl OK : Altibase "SYS"."TB_TEST1", Oracle "ALTI"."TB_TEST1" The end result of checking constraints : [OK] $ oautility start Primary key constraint checking... stty: 표준입력 : 장치에대해부적절한 ioctl OK : Altibase "SYS"."TB_TEST1", Oracle "ALTI"."TB_TEST1" The end result of checking constraints : [OK] Start /data/oracle/oraadapter.choi/bin/oraadapter... 오라클에 USER_ 뷰는현재접속중인 USER 에관련된내용을보여주는것으로알고있습니다. 따라서뷰의특징에따라현재접속한유저가가지고있지않는테이블은확인할수없으므로위의에러가발생한것으로보입니다. 타유저가가진테이블까지조회가필요하다면 USER_ 보다 ALL_ 뷰를 사용하는것이맞는것으로보입니다. SELECT * FROM user_users; 해설 : 현재접속한사용자의 view 를조회한다. SELECT * FROM all_users; 해설 : 모든사용자의 view 를조회한다. 따라서접속하지않은계정의 Table 을조회하기위해서는 ALL View 를 10 / 24
이용해야한다. 변경사항 Workaround Performance View Property Compile Option Error Code oraadapter.conf 를테이블소유계정에맞춤 ORACLE_USER = orauser 11 / 24
BUG-43845 set feedback 동작을맞게수정합니다. Module ux-isql Category Functional Error 재현빈도 Always drop table t1; create table t1(i1 int); SHOW FEEDBACK; 재현절차 select * from t1; SET FEEDBACK 2; select * from t1; isql> drop table t1; [ERR-31031 : Table or view was not found : 0001 : drop table T1 ^ ^ ] isql> create table t1(i1 int); Create success. isql> SHOW FEEDBACK; Reproducing Feedback : 1 Conditions 수행결과 isql> select * from t1; T1.I1 -------------- No rows selected. isql> SET FEEDBACK 2; isql> select * from t1; T1.I1 -------------- isql> SQL> select * from t1; no rows selected 예상결과 SET FEEDBACK 2; SQL> select * from t1; no rows selected 증상 SET FEEDBACK 동작을맞게수정합니다. 12 / 24
변경사항 Workaround Performance View Property Compile Option Error Code 해당없음 13 / 24
BUG-43858 PSM 에서 view target 절에 PSM 변수를사용하는경우 invalid literal 에러가발생할수있습니다. Module Category 재현빈도 Reproducing Conditions 재현절차 mt-function Functional Error Always CREATE OR REPLACE PROCEDURE PROC1(P_DATE IN VARCHAR(20)) IS CALC_YMD VARCHAR2(20); BEGIN SELECT TO_CHAR(INPUT_DT-1, 'YYYYMMDD') INTO CALC_YMD FROM ( SELECT TO_DATE(P_DATE, 'YYYYMMDDHH24MISS') INPUT_DT FROM DUAL ); END; / exec proc1('20160905184601'); 증상 변경사항 Workaround isql> exec proc1('20160905184601'); 수행결과 [ERR-21011 : Invalid literal at "SYS.PROC1", line 5] isql> exec proc1('20160905184601'); 예상결과 Execute success. undef type 이 view column 으로오는경우에기존코드에서 undef type 을처리하지못하고있었습니다. Performance View Property Compile Option Error Code CREATE OR REPLACE PROCEDURE PROC1(P_DATE IN VARCHAR(20)) IS CALC_YMD VARCHAR2(20); 14 / 24
BEGIN SELECT TO_CHAR(INPUT_DT-1, 'YYYYMMDD') INTO CALC_YMD FROM ( SELECT TO_DATE(CAST(P_DATE as VARCHAR(20)), 'YYYYMMDDHH24MISS') INPUT_DT FROM DUAL ); END; / exec proc1('20160905184601'); 15 / 24
BUG-43859 regexp_substr 함수수행중비정상종료해결 Module mt-function Category Fatal 재현빈도 Frequence SELECT REGEXP_SUBSTR(' 대한민국 ( 국토교통부 )','(') FROM DUAL; SELECT REGEXP_SUBSTR(' 대한민국 ( 국토교통부 )','(') FROM DUAL; 재현절차 SELECT REGEXP_SUBSTR(' 대한민국 ( 국토교통부 )','(') FROM DUAL; SELECT REGEXP_SUBSTR(' 대한민국 ( 국토교통부 )','(') FROM DUAL; SELECT REGEXP_SUBSTR(' 대한민국 ( 박근혜만세 )', '(') FROM DUAL; isql> SELECT REGEXP_SUBSTR(' 대한민국 ( 국토교통부 )','(') FROM 수행결과 DUAL; Reproducing communication failure... Conditions isql> SELECT REGEXP_SUBSTR(' 대한민국 ( 국토교통부 )','(') FROM DUAL; [ERR-21053 : The pattern requires parentheses, brackets, or braces. 예상결과 0001 : SELECT REGEXP_SUBSTR(' 대한민국 ( 국토교통부 )','(') FROM DUAL ^ ^ ] 증상 regexp_substr 에서예외상황의메모리액세스문제를수정합니다. Performance View 변경사항 Property Compile Option Error Code Workaround 16 / 24
BUG-43860 to_date 함수에서 0 으로설정할수있는오류에대해서는 무시할수있어야합니다. Module Category 재현빈도 Reproducing Conditions 재현절차 수행결과 예상결과 mt-function Maintainability Always select TO_DATE('200606090000', 'YYYYMMDDHH24MISS') from dual; isql> select TO_DATE('200606090000', 'YYYYMMDDHH24MISS') from dual; [ERR-21038 : Literals in the input do not match the format string. 0001 : select TO_DATE('200606090000', 'YYYYMMDDHH24MISS') from DUAL ^ ^ ] isql> select TO_DATE('200606090000', 'YYYYMMDDHH24MISS') from dual; TO_DATE('20060609000000','YYYYMMDDHH24MISS --------------------------------------------- 09-JUN-2006 1 row selected. 증상 Date format 에서시간값이생략되면생략된시간의값을 00 으로설정한다. 변경사항 Workaround Performance View Property Compile Option Error Code 17 / 24
BUG-43868 replication heartbeat message 가출력되지않고 HP 에서 getsockopt 의인자를잘못넘겨주고있습니다. Module Category 재현빈도 Reproducing Conditions 증상변경사항 Workaround rp-control Fatal Frequence 재현절차 수행결과 예상결과 HP OS 에서이중화를시작하여이중화 Heartbeat 이동작하면간헐적으로 SIGBUS 로비정상종료가발생할수있음. Performance View Property Compile Option Error Code 18 / 24
BUG-43871 Receiver 에서 statement 를종료시킬때 Cursor/Statement 가 open/begin 상태인지확인하지않고 close/end 를하여 FATAL 이발생합니다. Module Category 재현빈도 Reproducing Conditions 재현절차 수행결과 예상결과 rp Fatal Always 해당없음해당없음해당없음 Receiver 에서 statement 를종료시킬때 Cursor 가 open 상태인지확인하지않고 close 를하여 FATAL 이발생합니다. 발생상황 ================================================ 증상 1. DB1 에서 DB2 로 Sync 2. DB2 에서 insertrow 중 Retry Error 가발생하여 Cursor 를닫고 Cursor 를다시열어 insertrow 를재시도하려고함 3. 이때 Cursor 를여는도중에러로인해 ( INC-34858 에서발생한에러는 lock timeout ) Cursor 를열지못하고예외상황으로빠짐 4. 예외상황으로인해할당된자원을반납하기위해 Sstatement End 와 Cursor Close 를하는상황. 이때 3 번과정에서 Cursor 는 open 을하지못한상태. 따라서 mopencursorcnt = 0 임 5. Cursor 를 Close 할때 mopencursorcnt - 1 을수행. =>mopencursorcnt = 0 이므로 -1 을해서 UINT MAX 값이들어감 =- > ASSERT 발생상황 ================================================ 1. DB1 에서 DB2 로 Sync 2. DB2 에서 insertrow 중 Retry Error 가발생하여 Cursor 를닫고 Cursor 를다시열어 insertrow 를재시도하려고함 3. 이때 Cursor 를여는도중에러로인해 ( INC-34858 에서발생한에러는 19 / 24
lock timeout ) Cursor 를열지못하고예외상황으로빠짐 4. executesyncinsert 예외상황에서 Statement 를 end 해줌. 5. applysyncinsert 예외상황에서 Statement 를 end 해줌. => end 가 2 번일어나서 idumemmgr 에서 IDE_ASSERT( scur->mfreeslotcnt <= scur- >mmaxslotcnt ) 해결방안 ================================================ CursorClose 할때와 Statement end 할때상태플래그를보고 ( rpxreceiverapply 에는멤버변수로 Cursor 가오픈되었는지 Statement 가 begin 되있는지가지고있다. ) open/begin 상태일때만 close/end 하도록수정. Performance View Property 변경사항 Compile Option Error Code Workaround 해당없음 20 / 24
BUG-43882 MEMORY_INDEX_UNBALANCED_SPLIT_RATE 기본값변경 Module Category 재현빈도 Reproducing Conditions 증상변경사항 Workaround sm_index Other Always 재현절차해당없음수행결과해당없음예상결과해당없음 6.1.1 ~ 6.5.1 에 MEMORY_INDEX_UNBALANCED_SPLIT_RATE 의기본값을 10:90 에서 50:50 으로변경 Performance View Property MEMORY_INDEX_UNBALANCED_SPLIT_RATE 의기본값을 90 에서 50 으로변경 Compile Option Error Code 21 / 24
BUG-43887 Hierarchical Query View 는 Unnest 되면안됩니다. Module Category 재현빈도 Reproducing Conditions 재현절차 수행결과 예상결과 qp-select-pvo Functional Error Always SELECT 1 FROM (select 'AAA' dummy from dual) A, ( SELECT dummy FROM dual ) B WHERE A.dummy = B.dummy (+) AND A.dummy IN ( SELECT REGEXP_SUBSTR(dummy, '[^/]+', 1, LEVEL) FROM ( SELECT dummy, REGEXP_COUNT(dummy, '/') + 1 as CNT FROM dual ) CONNECT BY LEVEL < CNT ) ; Error : # 135212, The argument '-2147483648' is out of range. 1 -------------- No rows selected. 증상 Hierarchical Query View 는 Unnest 되면안되도록수정하였습니다. 변경사항 Workaround Performance View Property Compile Option Error Code subquery 에 no_unnest hint 사용 22 / 24
BUG-43897 (+) outer join operator 를테이블의갯수이상사용하는경우 비정상종료할수있습니다. Module Category 재현빈도 qp-select-pvo Fatal Always drop table t1; create table t1( i1 integer, i2 integer ); Reproducing Conditions 재현절차 수행결과 예상결과 select 1 from t1 a, t1 b, t1 c, t1 d where b.i2 = a.i2(+) and a.i2 = d.i2(+) and a.i1 = b.i1(+) and b.i1 = c.i1(+) and c.i1 = d.i1(+) ; isql> select 1 from t1 a, t1 b, t1 c, t1 d 2 where b.i2 = a.i2(+) 3 and a.i2 = d.i2(+) 4 and a.i1 = b.i1(+) 5 and b.i1 = c.i1(+) 6 and c.i1 = d.i1(+) 7 ; [ERR-91015 : Communication failure.] isql> select 1 from t1 a, t1 b, t1 c, t1 d 2 where b.i2 = a.i2(+) 3 and a.i2 = d.i2(+) 4 and a.i1 = b.i1(+) 5 and b.i1 = c.i1(+) 6 and c.i1 = d.i1(+) 7 ; [ERR-31359 : A table cannot be outer-joined to itself. 0002 : where B.I2 = A.I2(+) ^ ^ 23 / 24
] 증상 변경사항 Workaround (+) 을테이블개수이상사용하면서잘못사용하는경우 (full outer 처럼사용하거나 ) 에대한고려가없었음. Performance View Property Compile Option Error Code 24 / 24