오라클 시퀀스를 사용한 기능을 추가하던 중 시퀀스가 증가하지 않는 현상이 발생하였음. 간략한 작업 내용은 특정 시퀀스를 조회하여 보관하고 다시 동일한 시퀀스를 조회하여 함께 사용하는 작업이었음. 첫 번째 시퀀스 조회 시 증가된 번호를 가져왔으나 두 번째 시퀀스 조회 시 첫 번째에 조회된 번호가 그대로 들어있었음. 첫번째 시퀀스 조회 결과 : 1 두번째 시퀀스 조회 결과 : 1 해당 기능과 관련된 일부 소스는 아래와 같음. MyBatis 영역 SELECT SEQ.NEXTVAL FROM DUAL Repository 영역 TestDAO interface 작성 생략 @Repository public class TestDAOImpl implements TestDAO{ @Override public int getT..
작업내용 매일 한정된 수의 사용자를 접속시점 무작위로 당첨시켜 사용자 정보를 적재 및 즉석으로 확인 가능한 기능 현재 상황 작업환경 2대 이상의 다중 서버 환경 messageQueue 용도 서버 도입 불가 oracle DB RAC 환경 최초로직 쿠폰을 지급하기 전 현재까지 당첨된 사용자의 수를 조회하여 한정된 수치에 도달하지 않은 경우 당첨자 정보를 DB에 적재하는 방법 최초로직 문제점 예를들어 100개 한정된 수량의 쿠폰을 지급 시 다중서버 및 동시응모에 의한 100명을 초과하는 당첨자가 발생하는 경우를 확인 (이때 테스트는 junit을 통하여 멀티스레드 환경으로 진행) 최초로직 원인 A트랜잭션과 B트랜잭션이 거의 동시에 진행된 경우 A트랜잭션 조회 시점에 당첨자 수 99명 당첨자 적재 100명 커밋 ..
oracle DB를 사용하여 중이며 추가적으로 데이터를 조회해야 하는 작업이었다. 문제가 발생했던 쿼리를 임의의 테이블로 재구성 해보았고 아래와 같다. SELECT (SELECT Z.사용자명 FROM (SELECT U.사용자명 FROM 사용자_테이블 U WHERE U.사용자_소속 = P.상품_관리자_소속 order by U.로그인_일자 DESC ) Z WHERE Z.ROWNUM = 1) 가장 최근에 접속한 사용자 FROM 상품_테이블 P 쿼리를 간략하게 설명하자면 상품을 관리하는 사용자의 소속에서 가장 최근에 로그인한 한 명을 추출하는 쿼리이다 해당 쿼리를 실행하였을 때 표출되는 메시지는 아래와 같다. ORA-00904: "P"."상품_관리자_소속": invalid identifier 메시지를 그대로 읽..
발단 oracle DB 환경을 관리하던 중 DB서버 이동을 하게 되었음. 신규 서버에 oracle DB가 다시 세팅되고 며칠간 모니터링 수행 중 Tablespace 중 UNDOTBS 사용량이 아주 빠른 속도로 증가되는 것을 발견. 원인 파악을 하여 바로 조치하는 것이 제일 베스트이지만 당장의 서비스 운영을 위해서 임시조치로 해당 테이블스페이스를 증설한 상태에서 원인 파악에 들어갔음. 사전조사 및 참고자료 UNDOTBS(Undo Tablespace)란? 읽기 일관성을 유지하기 위해 사용되는 Tablespace로 데이터베이스 운영 중 많은 사용자들에게서 DML 작업이 이루어지는데 이때 Rollback하게 되는 경우를 대비하여 DML 작업이 발생했을 때 삭제 및 수정 이전의 값에 대한 정보를 UNDO Segm..
원인 작업하다가 아래와 같은 쿼리에서 의문점이 생김. 좌측 날짜와 시간을 나타내는 문자형 데이터(실제로는 테이블 데이터 비교하기 쉽게 직접 값 넣음)와 우측 현재 시스템 시간을 YYYYMMDD 형식으로 변환한 문자형을 비교하는데 보자마다 생긴 의문점은 자릿수와 날짜 형식이 다른데 어떻게 비교가 되는가 였고 더욱 의문점은 원하는 결과가 나왔다는 것이다. 문제의 쿼리 1 2 3 4 5 6 7 SELECT * FROM TABLE01 WHERE '20200101000000'
SQL 변수 종류 리터럴 변수 란? sql 구문 중 where절에 column과 비교되는 값이 상수값으로 직접 선언된 경우의 변수 예) SELECT * FROM TABLE01 WHERE COL01 = "TEST"; 바인드 변수 란? sql 구문 중 where절에 column과 비교되는 값이 바인드 변수 형태로 사용하는 경우의 변수 바인드 변수의 자리에는 parameter로 넘겨지는 값들이 대체됨. 예) SELECT * FROM TABLE01 WHERE COL01 :=1; PARSE 종류 HARD PARSE sql 구문을 수행 시 SGA - shared pool - Library Cache 영역에서 해당 구문이 존재 여부를 조회하여 존재하지 않는 경우 해당 구문의 문법 및 권한 검사, 테이블 및 컬럼 존재..
발단현재 사용 중인 DB는 oracle이며, 이미 생성되어 있는 테이블에 중국어 데이터를 insert 할 작업이 잡혔다.전달받은 중국어 데이터를 insert 후 정상적으로 데이터가 적재되었는지 확인하였으나실제 확인된 데이터는 ?(물음표)가 포함되어 있는 비정상적인 형태로 적재가 확인되었다. 직접 결과를 확인하며 진행하기 위해 select 쿼리 실행 후 결과를 보고 비교해보겠다.수행 쿼리 : select '服务' from dual; 결과 : 服? 이와 같이 중국어 데이터의 깨짐 현상이 보였다. 원인 분석참고로 중국어, 일어 등의 유니코드를 지원하지 않는 CharacterSet을 가진 DB에서 유니코드를 지원하기 위해 사용되는 CharacterSet으로 National CharacterSet 이 있다.Nat..
- Total
- Today
- Yesterday
- 날짜
- web
- SpringBoot
- gradle
- mybatis
- JPA
- Eclipse
- vscode
- TLS
- SQL
- 이벤트발생
- IMAGE
- parse
- docker
- spring
- 깨짐
- Java
- Linux
- Oracle
- React
- SSL
- Windows
- jQuery
- btye
- 컨테이너
- jaxen
- JSON
- Git
- html
- WAS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |