데이터베이스11

[Oracle] 한 달 전 데이터를 SELECT 하기

한 달 전 데이터를 복구해보자. ERP운영을 하다보면 특정 시점의 데이터가 필요 할 때가 있다. 빠르게 요청받은 몇 시간 전 데이터는 TimeStamp 를 통해 데이터 복구가 가능하지만 3주 전 시점의 데이터는 복구 할 수가 없는데, 가능하게 해보자. 전략은 테스트 디비서버를 하나 두는 것이다. 콜드백업 받은 데이터를 그대로 테스트 디비에 올리고 디비링크로 서로 연결시킨 후 원하는 시점까지 복구 후에 select 하면 원하는 시점 데이터를 볼 수 있다. 정기적으로 Cold Backup을 하고 Hot Backup을 하며 해당 백업파일을 이용하여 복구작업을 해보자. 필수 파일 LOG FILE - 말그대로 로그가 담긴 파일이다. 디비에 변경사항이 생기면 변경 명령이 해당 파일에 저장된다. 원하는 시점까지 복구..

[SQL튜닝] merge no_merge

서브쿼리에 관해서 옵티마이저 동작방식과 merge no_merge 에 대해 알아보자. 쿼리를 짤 때, 작은 것부터 where 절로 row를 줄여나가면 더 빠르겠다는 생각으로 서브쿼리를 많이 이용했었다. 과연 더 빠르게 실행이 됐을까 ? 알아보자. 단순 View Merging 자주쓰는 쿼리 - 2022년 주문서의 제품 수와 거래처 조인쿼리 SELECT * FROM (SELECT GURAECODE,GRANDTOTALSU SU FROM JUMUN_HEAD WHERE JUMUNNO LIKE '2022%') A ,(SELECT * FROM GURAE_CODE WHERE GURAECODE LIKE '6%') B WHERE A.GURAECODE=B.GURAECODE 습관적으로 서브쿼리를 만들면서 쿼리를 짜는데, 해당..

SQL 튜닝 - 실행계획 및 LIKE CONTAINS

간단한 쿼리를 통해 실행 계획을 살펴보자. >> Toad에서 실행계획 보는법 Ctrl + E LIKE '%' 구분의 실행계획 확인 SELECT * FROM BOOK_CODE WHERE BOOKNAME LIKE '%코딩%' Like 문으로 쿼리를 하면 INDEX를 타지 않고 테이블을 통으로 찾아서 읽고있다. =>Table Access Full 그렇다면 BOOKNAME 컬럼에 강제로 INDEX를 태워보자. CREATE INDEX BOOK_CODE_BKNAME ON BOOK_CODE(BOOKNAME); SELECT /*+ INDEX(a BOOK_CODE_BKNAME)*/ A.* FROM BOOK_CODE A WHERE BOOKNAME LIKE '%코딩%'; Cost 가 대폭 증가해버렸다.. Like 문 빠르게..

[SQLite] Noejs SQLite 설치 간단예제

Nodejs SQLite Install Nodejs 연동 바로가기 --> (준비중..) Nodejs 연동 전 간단한 환경설정 진행 SQLite 설치 아래 주소에서 다운로드 진행 www.sqlite.org/download.html SQLite Download Page Templates (1) and (2) are used for source-code products. Template (1) is used for generic source-code products and templates (2) is used for source-code products that are generally only useful on unix-like platforms. Template (3) is used for precomp..

[Oracle] TimeStamp 시점 데이터 복구

결론 TimeStamp Query 복사 후 사용 select * from temp as of timestamp(systimestamp-interval '120' minute) --두 시간 전 데이터 조회 select * from temp as of timestamp(systimestamp-interval '2' hour) as 부터 끝까지 복사해서 table 뒤에 붙여서 사용 원리 - `undo data` 작업을 하기 전 상태로 되돌릴 수 있는 데이터 데이터를 수정하거나 지우고 commit 했다면 `undo segment에 저장` 하게 된다. Timestamp 를 사용하면 이 저장된 곳을 참조한다. 활성화된 undo segment 조회. select * from v$rollname undo segment..

[Oracle] Select문 결과를 주기적으로 이메일 발송하기

Oracle mail, 오라클 메일, Version : 11G 준비사항 & 순서 1. SMTP 메일서버 -서버구축 후 메일서버에서 접속 허용 설정 2. network service 설정 -오라클에서 접근 허용 3. SELECT문 작성 4. 프로시저 만들기 5. 오라클 JOB 등록 기존 스프링 스케쥴러로 데이터를 주기적으로 발송했지만, 빈번한 추가요청에 대응하여 오라클에서 직접 처리했다. 1. SMTP 메일서버구축 -- link 2. Network Service 설정 -- link 3. 주기적으로 보낼 SELECT문 작성 SELECT '1' NO, '구분1' GU,'상태1' STATUS,TO_CHAR(SYSDATE,'YYYY-MM-DD') IL,'ID1' ID,'유저1' NM,'비고1' BG FROM DU..

[Oracle] Date to char 날짜 타입 포맷 변경 예제

오라클에서 원하는 형식으로 날짜(Date) 타입을 가져와보자. TO_CHAR - 문자로 기본날짜 Select SELECT SYSDATE FROM DUAL 보기 좋은 날짜 포맷 SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL -- 2020-10-26 SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MM:SS') FROM DUAL -- 2020-10-26 15:10:54 그 외 예제 SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL UNION ALL SELECT TO_CHAR(SYSDATE,'RRRR-MM-DD') FROM DUAL UNION ALL SELECT TO_CHAR(SYSDATE,'MON') FROM ..

[Oracle] 오라클 DELETE FROM 조건삭제 예시

데이터를 삭제할 수 있는 DELETE 문 DELETE문 기본 예시 delete from temp_ --전체삭제 ㅤ ㅤ --select * from delete from temp_ where colA='a11' --조건삭제 ㅤ ㅤ ㅤ delete from temp_ where colB like '_1_' --특정조건삭제 TABLE : temp_ create table temp_ ( colA VARCHAR2(100),colB VARCHAR2(100),colC VARCHAR2(100)); insert into temp_ select 'a11','b11','c11' from dual union all select 'a22','b22','c22' from dual union all select 'a33','b13..

[Oracle]오라클 INSERT INTO SELECT 예시

INSERT문 기본 예시 insert into temp_ (colA,colB,colC) values ('a1','b1','c1') -- 컬럼명 명시 ㅤ ㅤ insert into temp_ select 'a1','b1','c1' from dual -- 컬럼명 생략 ㅤ ㅤ insert into temp_ (colA,colC) values (1,2) -- 특정 컬럼만 (숫자) 기본 예제 1. temp_ 데이블 생성. create table temp_ ( colA VARCHAR2(100),colB VARCHAR2(100),colC VARCHAR2(100)); 2. 삽입 할 데이터 select select 'a1','b1','c1' from dual union all select 'a2','b2','c2' fro..