본문 바로가기

Oracle

(101)
SQL - Flashback 데이터 table 복구 특정과거시점의 데이터로 테이블을 되돌려 놓는것 앞서 배웠던 query 복구는 플래시백 하여서 그 결과값을 새로 백업 파일로 만들어 만든 backup table 을 다시 원래 테이블로 데이터 insert 하는 과정을 거쳤다면 지금하는 Table 복구는 복구 할 시점부터 현재까지 수행했던 DML 작업 ( insert,update,delete, merge ) 을 반대로 수행하며 과거로 돌리는 것이다. 그런데 만약 복구할 시점부터 현재시점 사이에 DDL(create, alter, drop, truncate, rename)과 , DCL (grant, revoke ) 문이 수행되었다면, 해당 flashback table 명령어가 수행되지 않고 에러가 발생합니다. delete 후 commit 된 테이블 delete ..
SQL - Flashback 데이터 복구 query 복구 QUERY 복구 백업을 복구하지 않고, 과거 시점의 데이터를 조회하는 방법 과거시점의 데이터를 조회해서 그 데이터를 새로 create as table 해준다. 테이블을 플래쉬백 할 수 있는 골든 타임은 기본적으로 15 분이다. ( 회사마다 설정된 시간이 조금 씩 다름 ) 시간 확인해보는 쿼리문 select name, value from v$PARAMETER where name = 'undo_retention' ; value 값에 초단위로 적힌 시간을 확인하면 플래쉬백 할 수 있는 기본 시간을 확인 해 볼 수 있다. table 을 지우고 commit 까지 해버린 상황 delete from emp; commit ; 현재시간확인 select systimestamp from dual; →복붙하기 21/11/26..
SQL 을 이용한 네이버 영화평 분석 현재 평점이 높고 많은 영화를 찾고 그에대한 감정분석을 해보기 1. 네이버 영화평 테이블 구성 ( MOVIE_REVIEW) reviewData2.csv 2. 컬럼명 변경 해 주기 alter table movie_review rename column 열1 to m_name; alter table movie_review rename column 열2 to m_score; alter table movie_review rename column 열3 to m_review; 3. 영화 평이 입력된 영화가 몇개인지 출력 select count(distinct(m_name)) from movie_review; 또는 select count(*) from ( select distinct(m_name) from movie_..
SQL - SEQUENCE 절대 중복되지않는 번호 사원번호, 계좌번호, 은행번호표 등 절대 중복되면 안되는 경우 시퀀스를 사용하고 이렇게 생성된 sequence 는 index 가 자동 등록 된다. 사람이 일일히 번호를 입력하지 않고 기계에게 밭겨 번호가 안전하게 입력할 수 있도록 한다. 시퀀스 생성 문법 create sequence seq1 start with 1 increment by 1 MAXVALUE 100; → start with 시작숫자 → increment by 증가치 → maxvalue 최대값 → 최대값 넘어가면 오류뜬다~ 시퀀스 삭제하기 drop sequence seq1; 내가만든 시퀀스 리스트 확인하기 select sequence_name from user_sequences; stock table 생성하기 create table stoc..
SQL - INDEX 데이터검색속도 높이기(2) order by 없이 index 정렬 (desc 도 가능!) 인덱스를 이용한 튜닝방법중에 정렬을 일으키는 SQL 튜닝 order by 절을 대용량 데이터때 사용하게 되면 성능이 아주 느려진다. 따라서 order by 절 사용을 가급적 자제하는게 좋다. 따라서 order by 절을 안쓰고 데이터를 정렬하는 방법이 있는데 그게 바로 인덱스를 활용하는것이다. 인덱스는 생성할때만 정렬하고 그이후에는 정렬된 데이터가 인덱스의 구조로 이미 저장되어있으므로 인덱스에서 데이터를 차례대로 읽어오면 정렬된 결과를 볼 수 있다. 튜닝전 select ename,sal from emp order by sal asc; 튜닝후 create index emp_sal_idx on emp(sal); → 인덱스를 생성시키거나, 생성되어있다면 select ename, sal from emp wher..
SQL - INDEX 데이터검색속도 높이기 index 는 책의 '목차' 와 비슷하다. 테이블의 검색속도를 높이기 위한 database object 이다. ex) 일반쿼리 검색 속도가 너무 느리다면 실행계획을 먼저 살펴 본 후 index 가 없으면 index 를 생성해 다시 실행 해 준다. (검색할 컬럼 = where 절 에 사용할 컬럼 ) ! index 의 구조 : 컬럼명과 rowid 로 구성되어있다. 인덱스(목차)를 생성하려는 컬럼의 데이터가 자동으로 asc 하게 정렬되어 구성됨 정말 필요할때만 인덱스를 생성해야한다. 불필요하게 인덱스를 많이 생성한다면 insert, update, delete 속도가 느려진다. 인덱스를 생성하는 방법 2 가지 수동으로 create index 인덱스이름 on 테이블명(컬럼명) 자동으로 primary key 제약이..
SQL VIEW 생성하기 view 의 종류 2가지 단순뷰 복합뷰 테이블의 갯수 1개 2개이상 함수포함여부 포함안함 포함 데이터 갱신여부 갱신됨 갱신안될 수도 있다. VIEW 의 장점 보안상 민감한 데이터를 노출 시키고 싶지 않을때 복잡한 쿼리문을 간단하게 쿼리하고 싶을때 emp57 emp 테이블에서 사원번호, 이름, 월급을 가져온 데이터로 view 생성하기 create or replace view emp57 as select empno, ename, sal from emp ; emp57 view 의 데이터를 이름이 scott 인 사원의 월급을 0 로 수정 update emp57 set sal = 0 where ename = 'SCOTT'; *****view 를 수정하게 되면 table 도 수정이 된다. (단순 view) 직업이 ..
SQL TEMPORARY CREATE 생성방법 (임시테이블 ) 임시테이블 종류 2가지 on commit delete rows : 데이터를 commit 할때까지만 유지 on commit preserve rows : 데이터를 세션이 종료할때까지만 유지 데이터를 영구히 저장하는게 아닌 임시로 보관하는 테이블이다. EX) 잠깐만 볼 데이터를 위해 , SK 휴대폰 요금 이번달 청구서~ 같은경우! 예제 임시테이블 emp56 을 만들기 create global temporary table emp56 (empno number(10), emane varchar2(20), sal number(10)) on commit delete rows; 기존에 쓰던 일반 테이블과 다른 점은 global temporary on commit delete rows / on commit preserve..