보통 개발자들은 DB까지 다룬다.
전문적인 DBA가 아니다 보니, 바쁘게 개발하면서 실수로 데이터를 날려먹거나
UPDATE를 잘못쳐서 잘못 변경되는 일이 많다.
개발DB에 붙여서 쿼리실행한줄 알았더니, 알고보니깐 운영DB던가...
다른 큰 기업들은 개발자들과 DBA가 정확하게 나뉘어서
개발자들이 DB까진 컨트롤하진 않지만, 그게 아닌 사람들은 DB까지 많이 다룬다.
(지식만 있어서는 안되고, 실제 쿼리작성 및 실행함. 단, 모든 중소기업이 다 그렇진 않음)
어찌됐든, 실수로 UPDATE나 DELETE해버린 내역을 복구하기 위한 방법이다.
(오라클에 한함, 다른DBMS는 모르겠음)
먼저 테이블 명이 SAMPLE_TABLE이라는게 있다고 하자.
여기서 내가 WHERE조건이 ABC라는 키값의 값을 실수로 DELETE했다고 치자, 그 다음에 아래 쿼리를 조회하면?
SELECT *
FROM SAMPLE_TABLE
WHERE = 'ABC'
당연히 위 쿼리의 결과값은 당연히 아무것도 나오지 않을것이다.
하지만, FROM 절의 테이블명 뒤에 아래 구문을 붙여준다면?
AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE)
(▼붙여서 실행)
SELECT *
FROM SAMPLE_TABLE AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE)
WHERE = 'ABC'
내가 삭제하기 전의 값이 추출된다.(10분 이전의 데이터) 물론 10분만 되는것은 아니고 그 이상 가능하다.
단위는 SECOND, MINUTE, HOUR, DAY로 바꿔 쓸 수 있다.
복구를 하려면 , 아래쿼리 처럼 하면 되겠다.
INSERT INTO SAMPLE_TABLE
SELECT *
FROM SAMPLE_TABLE AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE)
WHERE ID = 'ABC'
*애스터리스크를 사용한건 같은테이블에 순서대로 변경없이 모든컬럼에 넣기 위함이다.
컬럼별로 값을 다르게 하거나, 지정하려면 컬럼명을 기재해야한다. 다른테이블에 넣을때도 마찬가지다.
다른 테이블에 넣을땐, INSERT INTO 다른테이블명 .... 을 써서 INSERT한다.
실수로 날려먹었다고 당황하지말자.