[오라클]오라클 고수의 도움이 필요합니다!! 시퀀스 ora-04009 0 12 2,354

by 한현희 [Oracle 백업/복구] [2017.07.03 17:55:08]


안녕하세요.

A , B DB가 각각 있습니다.

현재 동기화  A에서 B DB 로 동기화 복제 솔루션에 의해서 이뤄지고 있고,

매일 9시에 시퀀스 초기화 스크립트를 통해  A DB에서 이루어지고 (정상)  B DB로 동기화 되어가는 중에 ORA-04009 : MAXVAULE cannot be made to be less than the current value (posting from SPLEX, queue P_QU1, to B)

라는 에러가 발생합니다.

원인은  동기화시 시퀀스를 Cache로 생성하면 A DB의 start값이 1일경우 B  DB의 초기값이 Cache +1 로 동기화됨 (Cache:100이면  A DB 시퀀스: 1, B DB 시퀀스  : 101)

해당 시퀀스는 MINVALUE 0 MAXVALUE 99999999999 INCREMENT BY 1 START WITH 1 CACHE 1000 NOORDER CYCLE; 입니다..

A DB는 운영DB라 운영에는 차질이 없으나 B DB에서 에러가 나는 상황을 개선하고자 여러 방안들이 나오고 있습니다.

1) 초기화방법 개선(0으로 초기화)

2) 초기화를 하지 않고 시퀀스를 cycle로 관리

 등등...

제안이 나온건데 2번방안이 이해도 가지 않고, 더 좋은 방안이 있다면 마구마구 댓글부탁드립니다!!!

 

 

by 조사4국 [2017.07.03 18:41:12]

현재는  초기화 스크립트안 ALTER문이 A서버에서돌고 B서버에서도는데 A서버는 에러가  안나고 B서버에서 위에러가 나는상황입니다..


by 신이만든짝퉁 [2017.07.03 18:55:16]

저도 될지 안될지 모르겠는데,

B서버에서 시퀀스를 alter 로 초기화하지 말고, drop 후 create 하는 방법을 써보세요.


by 조사4국 [2017.07.03 20:48:30]

아 drop  후 create 방법 감사합니다

테스트해보겠습니다..

더좋은방밥도 생각나시면 또말씀부탁드립니다^^


by 임상준 [2017.07.04 13:18:02]

b db 에도 시퀀스가 있나요?

동기화가 데이터인가요 DDL 인가요?


by 한현희 [2017.07.04 17:50:57]

쿼리문으로 a db에서 b db 로 동기화되는 방식입니다.


by 마농 [2017.07.04 18:01:46]

쿼리를 만들어 동기화 하는 방식이라면?
시퀀스 사용하지 않고, 있는 그대로 넣는 방식으로 해보세요.


by 한현희 [2017.07.04 18:38:51]

A DB와 B DB가 복제되는 방식이 ogg를 사용하고있습니다..A DB에서 날린쿼리문이 커밋되는순간 B DB로 동일하게 적용되는 방식입니다...
A DB에서 시퀀스 초기화를 매일 수행하는데 수행하는 문장이 B DB에서 동일하게 적용될때 A DB에는 오류가 나지 않으나 B DB에만 동일하게 적용되는 상황입니다.
시퀀스를 사용하지 않고, 있는 그대로 넣는 방식이라면 어떤말씀이신가요?


by 임상준 [2017.07.05 10:49:45]

정확하게 상황이 이해가 잘 안 가서 한번 더 질문 드립니다.

1. 사용하시는 둘이 shareplex  인가요 oracle golden gate 인가요?

2. 소스 db(A) 에서 시퀀스 초기화(?) 는 DDL 로 수행하시는거죠?

3. 현재 DDL 복제가 설정 된 상황인가요?

4. 타겟 DB 에도 동일한 이름의 시퀀스가 있어서 A DB 의 시퀀스가 B DB 에 DDL 복제를 통해 2번의 DDL 이 적용 받는 상황인거죠?

5. A DB 에서 시퀀스를 사용해 데이터를 넣는 테이블은(테이블의 데이터는) B DB 에 복제 대상인가요?

5. 그렇다면 B DB 의 시퀀스의 용도는 무엇인가요?


by 마농 [2017.07.05 16:09:52]

NOORDER 를 ORDER 로 바꿔 보세요.


by 한현희 [2017.07.06 08:57:56]

그렇게 되면 A,B DB가 한 시퀀스를 바라보게되어 B DB에서 A DB를 바라보게되는데 운영DB라 부하를 주고싶지않아 NOORDER로 설계가 되었습니다


by 마농 [2017.07.06 09:30:50]

A, B 가 서로 다른 DB 아닌가요?
서로 각각의 시퀀스를 가지는 것 아닌가요?
ORDER 로 바꾼다고 B DB 가 A 의 시퀀스를 바라보지는 않겠지요?
동기화 하고자 하는 두개 DB 에 대한 얘기가 아닌
B DB 안에 있는 두개의 RAC 노드에 대한 얘기를 하고 계신 듯 하네요.

RAC 환경에서 시퀀스를 사용함에 있어서
1. 부하를 주고 싶지 않다.(CACHE, NOORDER)
2. 시퀀스를 건너뛰게 하고 싶지 않다.(NOCACHE, ORDER)
이 두가지 를 동시에 만족할 수는 없습니다.
둘 중에 어느것이 더 중요한지를 따져서 선택해야 겠지요.


by 한현희 [2017.07.05 16:52:33]

정확하게 상황이 이해가 잘 안 가서 한번 더 질문 드립니다.

1. 사용하시는 둘이 shareplex  인가요 oracle golden gate 인가요?
 ->  oracle golden gate 입니다.

2. 소스 db(A) 에서 시퀀스 초기화(?) 는 DDL 로 수행하시는거죠?
 -> 네 맞습니다.

3. 현재 DDL 복제가 설정 된 상황인가요?
 -> 네 맞습니다.

4. 타겟 DB 에도 동일한 이름의 시퀀스가 있어서 A DB 의 시퀀스가 B DB 에 DDL 복제를 통해 2번의 DDL 이 적용 받는 상황인거죠?
 -> 네 맞습니다.

5. A DB 에서 시퀀스를 사용해 데이터를 넣는 테이블은(테이블의 데이터는) B DB 에 복제 대상인가요?
 -> 네 맞습니다.

5. 그렇다면 B DB 의 시퀀스의 용도는 무엇인가요?
 ->  A DB에서 수행된 INSERT문이 A DB에 있는 시퀀스를 참고한 INSERT문으로 A DB 에 있는 테이블에 INSERT 됫으며
      복제화는 SQL 문장 자체로 이루어는 방식이기 때문에  B DB에서도 시퀀스를 이용한 INSERT 문에서 사용하게 됩니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입