본문 바로가기

DB/Oracle

(6)
테이블 LOCK 작업을 하는데 특정 테이블의 update가 안되는 이슈가 있었다. 단순 오류가 아니라 update 쿼리 실행시 db가 그대로 잠겨 페이지 또한 올라오지 않았다. 원인을 먼저 찾아보기위해 세션을 확인하기 위한 쿼리를 실행했다. SELECT A.USERNAME AS 계정명, A.SCHEMANAME AS 스키마명, A.STATUS AS 활성화여부, A.SID AS 세션식별자, A.SERIAL# AS 시리얼번호, A.MACHINE AS OS머신명, A.PROGRAM AS OS프로그램명, A.TYPE AS 세션타입, A.LOGON_TIME AS 세션로그인날짜, B.FIRST_LOAD_TIME AS 처음실행한시각, B.SQL_TEXT AS 실행쿼리, C.TYPE AS 락타입 FROM V$SESSION A, V$SQ..
오라클 인덱스관리 인덱스를 생성하면 테이블 select 속도가 빨라지는 것은 사실이나 용도에 맞게 인덱스를 생성해야한다. 그렇지 않으면 Full Table Scan 보다 느려지는 경우가 종종있다. (추가로 인덱스도 tablespace 용량을 꽤나 잡아먹는다.) 1) DML 쿼리문 주의 사항 ▶ insert 작업을 할 경우에 index split 현상이 발생할 수 있다. index split : 인덱스의 Block들이 하나에서 두 개로 나눠지는 현상 기존 블록에 여유공간이 없는 상황에서 새로운 데이터가 들어오면 기존 블록의 내용 중 일부를 새 블록에 기록한 후 기존 블록에 빈 공간을 만들어서 새로운 데이터를 추가하게 되며 속도가 느려진다. ▶ delete의 문제 delete를 하면 테이블의 데이터들은 지워지는데 인덱스는 지..
오라클 현재 실행중인 쿼리확인 오라클에서 현재 실행중인 쿼리확인을 위한 쿼리 status가 ACTIVE인 것들로 조건을 줘서 검색하면 된다 SELECT a.sid, -- SID a.serial#, -- 시리얼번호 a.status, -- 상태정보 a.process, -- 프로세스정보 a.username, -- 유저 a.osuser, -- 접속자의 OS 사용자 정보 b.sql_text, -- sql c.program -- 접속 프로그램 FROM v$session a, v$sqlarea b, v$process c WHERE a.sql_hash_value=b.hash_value AND a.sql_address=b.address AND a.paddr=c.addr AND a.status='ACTIVE';
ORACLE 데이터 문자,숫자(판별식) REGEXP_LIKE와 REGEXP_REPLACE 함수를 써서 정규식을 활용한 판별을 진행 ​ 1.정규식 [0-9] 숫자, [^0-9] 숫자 외의 것 [가-힣] 한글, [^가-힣] 한글 외의 것 [A-Z] 영어대문자, [^A-Z] 영어대문자 외의 것 (소문자도있음) ​ 2.WHERE 절에서 REGEXP_LIKE 사용 ⊙ 기본 LIKE 문처럼 정규식에 포함된 문자 하나라도 있으면 조회된다. ⊙ NOT을 사용하면 해당 문자가 포함되지않은 데이터가 조회된다 ⊙ ^정규식에 NOT을 사용하여 해당 문자가 아닌 모든것을 제외하므로써 해당 문자만 포함되어있는 데이터만 조회된다 EX) WHERE REGEXP_LIKE(컬럼, '[0-9]') --데이터에 숫자가 하나라도 포함되면 조회 WHERE REGEXP_LIKE(컬럼..
오라클 삭제한 데이터 복구 기본 쿼리 select * from 테이블명 AS OF TIMESTAMP (SYSTIMESTAMP -INTERVAL '시간' MINUTE) 해당 테이블의 10분 전 데이터를 뽑아낼 수 있는쿼리 ​ MINUTE(분) 이 아니라 SECOND(초) 나 HOUR(시간) 으로 도 조회가 가능 만능은 아니고 어느정도 시간이 지나기 전까지만 복구가 가능하며 저런식으로 잘못 삭제한 테이블의 데이터를 가져와서 ​ insert into 테이블명 select * from 테이블명 AS OF TIMESTAMP ( SYSTIMESTAMP - INTERVAL '10' MINUTE ) 이런식의 쿼리로 다시 insert가 가능하다. 혹시 delete를 잘못했을 때 간단하게 복구가능 할 수 있는 쿼리로 반드시 알아둬야할 쿼리라고 생각..
오라클 업데이트(update) 서브쿼리문 여러행의 SELECT 문 결과를 테이블에 업데이트해주기 위한 SQL문 기본문법 UPDATE {대상 테이블명} SET (필드1, 필드2, 필드3) = (SELECT 필드1, 필드2, 필드3 FROM { 테이블명1 }) WHERE EXISTS( SELECT 1 FROM { 테이블명1 } ) 하단 EXISTS 문이 없으면 UPDATE 대상 테이블 전체가 업데이트됨

반응형