티스토리 뷰
DB를 만지고 작업을 하는 사람으로.. 가끔 말도 안되는 실수를 저지르곤 합니다..
예를 들면 이런것이죠..
특정 테이블 TABLE1 란 곳에 B란 컬럼을 UPDATE 하려고 할때..
A컬럼 |
B컬럼 |
1 |
insert 합니다. |
UPDATE TABLE1 SET
B = 'update 합니다.';
업데이트 쿼리문을 쓰는데요..
데이터가 여러개일때..
저렇게 업데이트를 하면..
A컬럼 |
B컬럼 |
1 |
update 합니다. |
2 |
update 합니다. |
3 |
update 합니다. |
4 |
update 합니다. |
로 모든 데이터들이 업데이트가 됩니다..
UPDATE TABLE1 SET
B = 'update 합니다!.'
WHERE A = '2';
조건을 줘야 해당 데이터만 변경이 되죠..
A컬럼 |
B컬럼 |
1 |
insert 합니다. |
2 |
update 합니다!. |
3 |
select 합니다. |
4 |
delete 합니다. |
그런데.. 위에 처럼 조건을 빼고 업데이트를 하고.. commit 까지 하는 경우가 아주 가끔(AUTO COMMIT일때); 있습니다..
그럼 다시 복원을 해야하는데..
몇 건 안되면서 해당 B 컬럼에 데이터가 뭔지 알면.. 큰 문제는 되지 않을겁니다..
해당 B 컬럼의 데이터를 얼른 수정해주면 되거든요;..
그런데.. 데이터가 약 10만건이라면?..
A컬럼 |
B컬럼 |
1 |
update 합니다. |
... |
... |
99998 |
update 합니다. |
99999 |
update 합니다. |
그리고 해당 B컬럼에 들어가는 데이터들이 뭔지 모른다면?..
그럼 난리 나는거죠;..
자.. 이미 데이터는 업데이트 되고.. 커밋까지 완료된 상황입니다..
다시 원래되로 복원하려면..
빠른 시간내에.. 작업을 해야합니다..
시간이 지날수록 복원 작업이 어려워지기 때문이죠.. 어려워지는거지 안되는건 아닙니다..
복원 쿼리 들어갑니다..
UPDATE TABLE1 AA SET B = ( SELECT B FROM TABLE1 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) WHERE NO = AA.NO )
해당 TABLE1 의 칼럼 B를 10분 전 TABLE1 의 칼럼 B로 다시 업데이트를 하는것이죠..
그렇기 때문에.. 해당 10분 안에 작업하신분들은 다시 10분 전 상태로 돌아가게 되니.. 그 점을 유의하셔야됩니다..
그럼 이번에는 데이터를 삭제를 했다?.. 커밋까지 완료된 상황에서는 어떻게 할까요?..
INSERT INTO TABLE1 AA SELECT * FROM TABLE1 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) WHERE NO = AA.NO
10분 전 데이터를 다시 인서트하면 되겠죠..
앞으로는 UPDATE, INSERT, DELETE 하기 전에.. 한번 더 확인을 하고.. COMMIT 을 하시란걸 당부하면서..
성공적인 복구 되시기를..
- Total
- Today
- Yesterday
- CNN Student News
- 군대이야기
- ndsl
- 티스토리달력2011
- NDS GAME LIST
- 젤다의 전설
- 게시판
- 동유럽
- jsp
- 가을
- 아이폰
- 야생의 숨결
- 슈퍼마리오 RPG
- oracle
- 스포어
- 오라클
- 겨울
- 웃기는 사진
- 3분 영어 위클리
- 티스토리달력2010
- NDSi
- 2011사진공모전
- Free Coupon
- DLC
- 동물의숲
- Project Diet
- C/C++
- Spore
- NDS
- Wii GAME
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |