본문 바로가기

TechNical/Oracle45

[튜닝] 불필요한 정렬 제거 페이징 처리로 조회되는 SQL이 데이터 양에 따라서 속도가 심하게 차이가 날때는 order by가 PK로 정렬하고 있다면 제거하면 엄청 빨라진다. 조인 걸리는 PK가 인덱스가 기본적으로 정렬이 되기 때문에 PK순서로 보고자 한다면 빼도 같은 순서로 나온다. 건수가 적은 테이블이 먼저 걸리지 않는다면 작은 순서대로 가져오게 /*+ LEADING(A) */ 힌트를 붙여 주자. 2019. 5. 24.
오라클 DBLINK 하면 ORA-01017: invalid username/password; logon denied 오류 충격적인 걸 알려주마.. 뭐 알고 있다면 아주 간단한 문제겠지만 모르면 정말 황당하다 못 해 짜증이 날 만한 문제. 오라클 9i에서 11g로 DBLINK를 걸때 이런 문제가 발생해요. 기존에 쓰던 DBLINK가 있습니다. 상대방 시스템이 업그레이드 되면서 버전업이 되었지요. IP는 변경됐지만 기존에 쓰던 DB 계정의 패스워드는 그대로 입니다. tnsping 때려 보면 아주 잘 날아 갑니다. DBLINK를 생성할때도 아주 잘 생성 됩니다. sqlplus로 붙어도 매우 잘 붙습니다. 근데 막상 DBLINK를 사용 하려고 하면 이런 오류를 뱉어 냅니다. > select * tab@test_dblink ORA-01017: invalid username/password; logon denied ....??? 이게.. 2011. 9. 18.
MERGE INTO 를 사용해 봅시다. 테이블을 조회해서 해당 조건으로 데이터가 존재하면 업데이트 하고 없으면 쑤셔 넣는다는 똑똑한 녀석이다. 실제 쿼리문에서 테이블명이랑 컬럼명만 임의로 막 변경한 거라서 대충 흐름만 보도록 하자. 잘 보다보니 이 놈을 이용해서 시퀀스 넘버도 가져와서 넣을 수 있다. 좋다. ON 부분에는 다중 조건을 쓸 수 있다. UPDATE나 INSERT를 할때 USING 문에서 뽑아온 값으로 넣을 수도 있다. MERGE INTO seq_table f USING ( select col1, col2, col3, col4, col5 , (select max(sqno) + 1 from seq_table x where t.col1 = x.col1 and t.col2 = x.col2 ) as seqno from base_table .. 2010. 9. 17.
각 그룹 금액의 합의 비율금액의 합계 쿼리.... 뭐야 -_-;; 여차저차 하여 비율에 따라 그룹의 합을 구하고 각각 그룹의 금액 * 비율 한 금액의 합을 구하는데 그 총계만 가져와야 할 일이 생겼었다. 비율 금액 10 100 10 200 10 300 20 100 20 300 이런 데이터라면 10 600 20 400 이렇게 그룹이 지어지고 600 * 0.1 = 60 400 * 0.2 = 80 요거의 합 60 + 80 = 140 이렇게 나와야 하는 경우다. 혹자는 이렇게 의문을 가질 수도 있다. 각각의 비율 금액을 계산해서 걍 더하면 되지 않느냐고..?? 좋다. 근데 이게 소수점을 안 가지고 있고 절사 금액 이라면 1, 10 단위의 오차가 발생한다. 뭐... 어떤 용도로 사용하고 계산법은 어떻게 나와야 하느냐에 따른 문제지만 참 거지 같다 -_- 그래서 이런 쿼리가 나왔.. 2010. 9. 17.