본문 바로가기

oracle

오라클 Undocumented Hint (materialize, inline 힌트) - With 구문 Oracle With 구문에서 가끔 /*+ materialize */ 라는 힌트를 사용한 SQL을 볼 때가 있습니다. 이건 과거 10g 이하 버전에서 With 절이 반복적으로 호출될 때, 이걸 매번 실행하지 않고 한번만 실행하도록 Global Temporary Table 을 만들어버리도록 명령하는 힌트입니다. 즉, 아래와 같은 SQL 문에서 With 절로 만들어진 dept_count 부분이 메인 SQL문에서 2번 호출되었습니다. 호출될 때마다 With 구문의 SQL을 실행할 겁니다. 하지만, 처음 한번 실행후 실행결과를 임시테이블로 만들어버리면 2번째 호출되는 것은 그냥 임시테이블에서 결과를 가져오기만 하면 되기 때문에 실행이 빨라질 겁니다. 이런 아이디어에서 /*+ materialize */ 힌트가 나.. 더보기
오라클 SQLPlus 화면에 결과를 뿌리지 않고 수행시간, Plan 만 확인 (set autotrace explain statistics) Oracle SQL*Plus 상에서 SQL을 실행할때 실행결과는 화면에 뿌리지 않고 최종수행시간만 알고싶은 경우가 있습니다. 이때, 쉽게 사용할 수 있는 방법이 autotrace 기능입니다. 원래 autotrace 기능은 자동으로 SQL 실행정보(실행계획, 실행통계)를 출력해주는 기능인데, 이것과 함께 set timing on 을 함께 사용하면 됩니다. 위에서 set timing on 명령어를 써줬기 때문에 최종수행시간(Elapsed Time) 이 나옵니다. 하지만, set autotrace trace stat 명령어를 줬기 때문에 실행결과는 나오지 않습니다. 실제 EMP 테이블을 조회하기는 하지만, 조회결과는 화면에 출력하지 않고, 최종 조회된 건수인 "14 rows selected." 정보만 화면에 .. 더보기
오라클 AWR 에서 Top SQL 추출하는 SQL 스크립트 (dba_hist_sqlstat, dba_hist_sqltext) Oracle DBMS 에서 튜닝 대상 SQL을 뽑기 위한 방법으로 AWR 딕셔너리를 이용할 수 있습니다. AWR 리파지토리(저장소)에는 디폴트로 8일간의 SQL 실행정보가 기록되어 있습니다. 여기에서 실행시간이 오래 걸린 SQL들을 추출할 수 있습니다. 아래 SQL문을 sys 또는 system 유저에서 실행하면, AWR 보존기간(디폴트 8일) 동안 실행된 히스토리를 뒤져서 10초이상 실행된 SQL 내역을 뽑아줍니다. -- AWR에서 10초 이상 실행된 SQL문 추출 set linesize 200 col username for a15 col sqltext for a100 col "elapsed_time(s)" for 999,999,999 col "buffer_get" for 999,999,999,999 s.. 더보기
오라클 대량데이터 Update, Delete 작업 빠르게 하는 방법 (feat CTAS) 대량 데이터를 Update 또는 Delete 작업하는 경우 많은 시간이 소요됩니다. Update/Delete 할때마다 기존(변경전/삭제전) 데이터를 Undo Segment 와 Redo Log 에 Writing 해야 하기 때문입니다. 그래서 Update/Delete 해야할 데이터량이 많은 경우에는 CTAS(Create Table As Select) 구문으로 변경해서 작업하는 것이 훨씬 빠르고 유리합니다. 얼마나 빨라지는지 한번 테스트 해보겠습니다. 먼저, 테스트할 대용량 테이블을 생성합니다. create table TEST1 as select empno, salary, deptno, lpad(big_ename, 3000, big_ename) as big_ename, lpad(big_addr, 3000, b.. 더보기
오라클 Lock Type (락종류, 락유형) - AB, AE, MR, TO, TS, TT, US, ZZ 등 Oracle DBMS 에서 동시처리를 하다가 뭔가 서로 꼬이지 않게 하기 위한 기법으로 Lock 이 있습니다. Lock 에는 Lock Type 과 Lock Mode 라는게 있습니다. Lock Type 은 락이 발생한 대상(Target)을 가리킵니다. 즉, Lock 이 Temp Tablespace 에서 발생한 건지, Undo Segment 에서 발생한 건지, Log Miner 와 관계된 건지를 확인할 수 있습니다. Lock Mode 는 락을 어떤식으로 걸었는지 강도(Intensity)를 의미합니다. share, exclusive, row share, row exclusive 가 있습니다. 대표적인 Lock Type 은 'TX' (Transaction Lock), 'TM' (Table Lock) 등이 있고,.. 더보기
오라클 머신러닝 - SQL*Plus 에서 수치 예측(Classification, 분류) 실습 예제 - Neural Network 알고리즘 지난번에 IRIS(분꽃) 데이터를 가지고 Random Forest 알고리즘으로 Classification을 하는 실습을 해봤습니다. 이번에는 Random Forest 알고리즘 대신에 Neural Network 알고리즘을 이용해서 Classification 을 해보겠습니다. Neural Network 알고리즘은 Oracle 18c 이상에서 지원합니다. 따라서 아래 테스트를 하려면 18c 이상의 Oracle DB에서 수행해야 에러가 안납니다. 이번에 실습할 데이터인 IRIS(분꽃) 데이터 다운로드 및 DB에 넣는 방법은 지난번 실습을 참고하시면 됩니다. 그럼, 지난번 Random Forest 에 비해 Neural Network 이 얼마나 더 잘 맞추는 지 확인해보겠습니다. 1) 세팅 테이블 준비 첫번째 단계.. 더보기
오라클 머신러닝 - SQL*Plus 에서 수치 예측(Classification, 분류) 실습 예제 - Random Forest 알고리즘 지난번에 "자전거 렌털 데이터" 를 가지고 회귀분석(Regression)을 하는 실습을 해봤습니다. 이번에는 그때 사용했던 똑같은 방법, 똑같은 알고리즘(Random Forest)을 이용해서 Classification 을 하는 실습을 해보겠습니다. 이번에 사용할 데이터는 R 에서 ML할때 많이 사용되는 샘플인 IRIS (분꽃) 데이터를 사용해 보겠습니다. 아래에 테스트에 사용할 "IRIS (분꽃) 데이터"를 첨부합니다. SQL*Developer 에서 아래 파일을 똑같은 이름(IRIS)의 테이블로 Import 합니다. SQL*Developer 에서 파일을 Import 하는 방법은 여길 참조하세요. ==> >>SQL*Developer 에서 테이블 Import/Export 하는 방법 dbms_data_mini.. 더보기
오라클 머신러닝 - SQL*Plus 에서 수치 예측(Regression, 회귀분석) 실습 예제 Oracle DBMS 내부에 Machine Learning 관련 모듈들이 들어있습니다. 그리고 무료로 제공됩니다. 제공되는 머신러닝 알고리즘은 여길 참고하세요. ==> >>오라클 DBMS 내에서 무료로 제공하는 머신러닝 알고리즘>SQL*Developer 에서 테이블 Import/Export 하는 방법 DBMS_DATA_MINING.CLASSIFICATION, data_table_name => 'BIKE_RENT', case_id_column_name => 'INSTANT', target_column_name => 'COUNT', settings_table_name => 'SETTING_RF' ); end; / model_name : 적절한 이름으로 작명하면 됩니다. mining_function : 정확히.. 더보기