본문 바로가기

DataBase/Oracle

Oracle 결과값에 Single quotation 표시법 SELECT CHR(39) || ID || CHR(39) FROM TB_USER; 결과값이 싱글쿼테이션(') 으로 묶여서 출력 된다. 더보기
오라클 DB 정보, 상태 조회 테이블스페이스별 데이터파일의 I/O 를 조회하자 /* 파일 i/o 가 한쪽에만 치우칠 경우, 부하를 분산 시켜줄 필요가 있다 */ SELECT PHYRDS, PHYWRTS, D.NAME FILENAME, T.NAME TSNAME FROM V$DATAFILE D, V$FILESTAT F, V$TABLESPACE T WHERE D.FILE# = F.FILE# AND D.TS# = T.TS# ORDER BY T.NAME, D.NAME; -------------- 현재 접속된 사용자가 어떤 SQL을 사용하고 있을까? select a.sid, a.serial#, b.hash_value, b.sql_text from v$session a, v$sqltext b where 1=1 and a.username = '&u.. 더보기
오라클 튜닝 튜닝(tuning)이란 불필요한 일들을 최소화하는 것이다. 보다 적은 노력으로 많은 결과를 내고자 하는 활동. 1. 튜닝(Tuning) Overview 포로젝트를 개발함에 있어 시작부터 끝까지 튜닝에 대한 마인드를 가지고 모든 일을 처리하는 것이다. 튜닝 절차 애플리케이션 형태 애플리케이션 형태를 알면 튜닝 포인트를 찾는데 도움이 된다. - OLTP(Online Transaction Processing) 대부분의 업무는 Insert/Update 이다. 예) 은행의 온라인 업무, 항공사의 예약 업무, 주문 시스템 데이터의 정확성과 가용성이 중요. 튜닝 항목 롤백 세그먼트, 인덱스, 클러스터, 해싱, 데이터 블록 크기, 테이블 또는 롤백 세그먼트의 동적 할당, 트랜잭션 처리 모니터, 멀티 스레드 서버, SG.. 더보기
인덱스를 타지 않는 SQL * 인덱스를 타지 않는 SQL 1. 인덱스 컬럼 절의 변형 2. 내부적인 데이터 변환 3. NULL 조건의 사용 4. 부정형 조건의 사용 5. LIKE 연산자 사용 6. 최적기가 판단 1 - 인덱스 컬럼 절의 변형 SQL> select ename from emp where sal * 2.1 > 950 --인덱스 사용불가 SQL> select ename from emp where sal > 950 /2.1 --인덱스 사용가능 SQL> select ename from emp where to_char(hiredate,'DDMMYY') = '250884' --인덱스 사용불가 SQL> select ename from emp where hiredate = to_date('250884','DDMMYY') --인덱스 .. 더보기
ORACLE TABLE SPACE 사용량 확인 쿼리및 조취법 select a.TABLESPACE_NAME, a.BYTES bytes_used, b.BYTES bytes_free, b.largest, round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) percent_used from ( select TABLESPACE_NAME, sum(BYTES) BYTES from dba_data_files group by TABLESPACE_NAME ) a, ( select TABLESPACE_NAME, sum(BYTES) BYTES , max(BYTES) largest from dba_free_space group by TABLESPACE_NAME ) b where a.TABLESPACE_NAME=b.TABLESPACE_NAME order by ((a.B.. 더보기
LOCK 문제 확인과 해결 방법 1. SID, SERIAL# 찾기 SELECT A.SID, A.SERIAL#, B.TYPE, C.OBJECT_NAME FROM V$SESSION A, V$LOCK B, DBA_OBJECTS C WHERE A.SID=B.SID AND B.ID1=C.OBJECT_ID AND B.TYPE='TM' AND C.OBJECT_NAME IN ('ITOC010'); >alter system kill session 'SID,SERIAL#' ; ------------------------------------------------- 2. OS 상에서 Process Kill select substr(s.username,1,11) "ORACLE USER" , p.pid "PROCESS ID" , s.sid "SESSION I.. 더보기
데이터사전 정보조회 ◈ DICTIONARY(DICT) 뷰 - 데이터 사전 및 동적 성능 뷰에 대한 정보를 알고 싶으면 DICTIONARY 뷰나 DICT_COLUMNS 뷰를 조회하면 됩니다. - 조회 할 수 있는 모든 데이터사전의 테이블이름과 설명을 조회 할 수 있습니다. 물론 설명은 영문으로 되어 있습니다. - 동의어인 DICT를 이용해서도 똑같은 정보를 조회 할 수 있습니다. SQL> SELECT * FROM DICTIONARY WHERE table_name LIKE '%INDEX%'; SQL> SELECT * FROM DICT WHERE table_name LIKE '%INDEX%'; ◈ DICT_COLUMNS 뷰 - 뷰를 질의하면 해당 데이터사전의 컬럼에대한 정보를 조회 할 수 있습니다. SQL> SELECT * FR.. 더보기
Merge 사용하기 - 문법 MERGE INTO table_name alias USING (table|view|subquery) alias ON (join condition) WHEN MATCHED THEN UPDATE SET col1 = val1[, col2 = val2…] WHEN NOT MATCHED THEN INSERT (컬럼리스트) VALUES (값들....); MERGE는 UPDATE와 INSERT를 결합한 문장으로 각각의 쓰임새는 다음과 같다. INTO clause : data가 update 되거나 insert될 table 이름 USING clause : 대상 table의 data와 비교한 후 update 또는 insert할 때 사용할 data의 source. ON clause : update나 insert를 .. 더보기
실행계획 해석하기(1) 실행 계획 해석하기(1) 실행계획을 예를 들어 하나씩 해석해 보도록 하죠^^ 이전의 강좌에도 있지만 실행 계획은 일반적으로 아래와 같은 기준으로 해석 됩니다. - 실행계획의 가장 안쪽으로 들여 쓰기 된 것이 먼저 수행 - 실행 계획의 각 문장은 들여쓰기간 한 단계 덜된 부모 문장에 종속 - 동일하게 들여 쓰기 된 문장이 여러 개 있는 경우 가장 위 문장이 우선 실행 - 인덱스를 경유하여 테이블을 Access하는 두 실행 계획은 하나로 취급(테이블 Lookup에 사용되는 Index Scan을 의미) 아래의 예를 보도록 할까요? SQL> SELECT /*+ FULL(D) */ ENAME, SAL, JOB FROM DEPT D WHERE DEPTNO = 20 UNION ALL SELECT /*+ INDEX(E.. 더보기
실행계획 해석하기(Nested Loops Join) 실행계획 해석하기(Nested Loops Join) 실행 계획을 보면 Nested Loop라는 것이 보이는데 그 바로 밑에 나온 문장이 드라이빙 테이블(OUTER TABLE)이며 그 아래 문장이 비드라이빙 테이블(INNER TABLE) 입니다. 다음의 예를 보도록 하죠… SQL> SELECT E.EMPNO, E.ENAME, D.DNAME, D.LOC FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO ORDER BY EMPNO; 9i) Execution Plan ------------------------------------------------------ SELECT STATEMENT Optimizer=CHOOSE SORT (ORDER BY) TABLE ACCESS (BY.. 더보기