본문 바로가기

분류 전체보기

(143)
SQL - Flashback Version Query (데이터 변경내역 이력 확인) 특정테이블의 데이터가 그동안 어떻게 변경되어 왔는지 그 이력정보를 확인할때 사용하는기능 9:48 ~ 지금현재까지의 EMP table 의 변경을 확인하는 쿼리 select ename, sal, job, versions_operation from emp versions between timestamp to_timestamp('21/11/29 09:48:16', 'RR/MM/DD HH24:MI:SS') AND MAXVALUE where ename = 'KING' order by versions_starttime nulls first; → MAXVLAUE = 현재시간 → versions_operation 의 u 는 update , d 는 delete 이다. 십분전으로 복구!할것 alter table emp en..
SQL - Flashback DROP 된 데이터 복구 (인덱스도 함께 복구) DROP 시킨 데이터 복구 하기 CREATE INDEX EMP_SAL_IDX ON EMP(SAL); → 해당 테이블은 인덱스가 존재한 상태 DROP TABLE EMP; → 테이블을 drop 시킴. 1. 휴지통속 emp 테이블 확인 ( 삭제된 인덱스 이름들 꼭 복사해놓기) select object_name, original_name, droptime from user_recyclebin; → 확인해보면 emp 테이블과 연관된 인덱스들도 같이 휴지통으로 들어간다. → index 이름이 뭐였는지 original_name 에 있는 이름을 잘 확인해야한다.(어디 복사해놓아야함!!!!) 2. 휴지통속에있는 테이블을 밖으로 복원하는 명령어 FLASHBACK table emp to before drop; → drop ..
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 제약이..