일련번호 채번 동시성 높이기1) 데이터가 삽입되는 시점에 실시간으로 현재의 MAX + 1 하는 방식2) MAX 값을 관리하는 별도의 채번 테이블에서 가져오는 방식 2번 방법의 경우 채번 후 다음 처리로 진행하기 전에 채번 테이블 값을 1만큼 증가시켜야한다.채번 트랜잭션과 거래 트랜잭션이 분리되어있을 경우, 거래 중에 채번이 수행되고 그 이후 처리가 롤백 될 경우 채번은 커밋되어있고 거래는 롤백되는 상황이 생겨 데이터의 일관성이 깨진다.autonomous 트랜잭션메인 트랜잭션에 영향을 주지 않고 서브 트랜잭션만 따로 커밋하는 기능수행 방법pragma autonomous_transaction;선분이력 정합성 유지select for update 문을 사용해 레코드에 Lock 설정한다.
비관적 동시성 제어(Pessimistic Concurrency Control)- 사용자들이 같은 데이터를 동시에 수정할 것이라고 가정- 한 사용자가 데이터를 읽는 시점에 Lock을 걸고 조회 또는 갱신처리가 완료될 때까지 이를 유지한다.- Locking은 첫번째 사용자가 트랜잭션을 완료하기 전까지 다른 사용자들이 그 데이터를 수정할 수 없게 만들기 때문에 비관적 동시성 제어를 잘못 사용하면 동시성을 저해받게 된다. 잘 사용하면 동시성 증가시킴. 구현 예시select * from 고객where 고객번호 = :cstno for update;--새로운 포인트 계산update 고객 set 포인트 = :포인트 where 고객번호 = :cstnofor update nowait --> 대기없이 Exception(OR..
문장수준 읽기 일관성(Statement-Level Read Consistency)- 쿼리가 시작된 시점을 기준으로 데이터를 일관성 있게 읽어들이는 것을 말한다.트랜잭션 수준 읽기 일관성(Transaction-Level Read Consistency)- 트랜잭션이 시작된 시점을 기준으로 일관성 있게 데이터를 읽어들이는 것을 말한다. 트랜잭션 고립화 수준(Transaction Isolation Level)레벨0(= Read Uncommitted)트랜잭션에서 처리중인 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용Dirty Read, Non-Repeateable Read, Phantom Read 현상 발생Oracle은 이 레벨을 지원하지 않음.레벨1(= Read Committed)Dirty Rea..
Oracle에서 사용되는 인덱스의 종류 B-TREE(Balanced Tree, 균형트리) BITMAP 함수기반(Function-Based) 어플리케이션 도메인(Application domain) Index-Organized 자동으로 생성되는 인덱스 - 테이블 생성 시에 제약조건(Primary Key or Unique)을 사용하면 자동으로 인덱스가 생성된다. * INDEX_TYPE : NORMAL로 생성된다. * NORMAL 인 INDEX_TYPE은 오라클에서 B-Tree 구조를 의미한다.(Oracle 기본은 B-Tree) - 이때, 자동으로 생성된 인덱스는 DROP INDEX 구문으로 삭제할 수 없다.(인덱스를 삭제하고 싶다면 제약조건을 제거해야한다.) 오라클의 기본 인덱스 오라클의 기본 인덱스 구조는 ..
ALL - 서브쿼리의 여러개의 결과를 모두 만족해야한다. SELECT * FROM userTBL WHERE height > ALL (SELECT height FROM userTBL WHERE addr = '경남'); ANY(SOME) - 서브쿼리의 여러개의 결과 중 한가지만 만족해도 된다. - " = ANY "는 "IN"과 같은 의미로 사용된다. SELECT * FROM userTBL WHERE height > ANY (SELECT height FROM userTBL WHERE addr = '경남'); SELECT * FROM userTBL WHERE height = ANY (SELECT height FROM userTBL WHERE addr = '경남'); SELECT * FROM userTBL WHE..
WHERE START WITH CONNECT BY 절의 구조를 지닌다. 쿼리가 인식하는 순서는 다음과 같다. 1) START WITH 절 : 시작위치를 지정 2) CONNECT BY 절 : PRIOR 을 사용해서 부모와 자식의 관계를 명시한다. PRIOR 은 실제 부모노드의 값을 가지고 있는 컬럼의 앞에 명시해준다. 예시) 이름 ID 관리자ID CEO 1000 NULL Manager1 2000 1000 Maneger2 3000 1000 위의 데이터의 경우 순방향 전개일 경우(START WITH 절에 부모노드를 조회한 경우 관리자ID=NULL 등) CONNECT BY PRIOR ID = 관리자ID 또는 CONNECT BY 관리자ID = PRIOR ID 3) WHERE 절 : 마지막으로 인식된다. 참조 블로..