이번 강좌에서는 복원에 대한 전체적인 내용을 살펴 보도록 하겠습니다. 즉, 전체 백업과 차등 백업 및 로그 백업을 받은 상태에서 복원을 하는 순서와 방법을 살펴보게 됩니다.
1. 테스트를 위한 임시 테이블 만들기와 데이터 추가하기
우선 현재의 sqlworld 데이터베이스에 테스트 테이블을 만들고 백업을 받도록 하겠습니다.
1) 테이블 만들기
다음과 같이 테스트 테이블 Test_Log를 만들도록 하겠습니다.
USE sqlworld CREATE TABLE Test1 |
2) 데이터 추가하기
다음과 같이 스크립트를 이용해서 레코드를 추가하도록 하겠습니다.
INSERT INTO Test1 VALUES(1,'AAAAA') |
위 작업을 통해서 다섯개의 레코드가 Test1 테이블에 추가되었습니다.
2. 데이터베이스 백업
1) 데이터베이스 백업을 위한 백업 장치 만들기
다음과 같이 데이터베이스를 백업 받기 위한 백업 장치를 만들도록 하겠습니다.
EXEC sp_addumpdevice 'disk', 'sqlworld_dump', 'E:\Data\sqlworld_dump.bak' |
※ 백업 장치 만드는 방법에 대해서 이해하고 있지 못하신 분들은 예전에 진행된 백업 장치 만들기 강좌를 참고하여 주시기 바랍니다.
2) 데이터베이스 전체 백업
앞에서 만든 sqlworld_dump 백업 장치에 현재까지의 sqlworld 데이터베이스를 전체 백업 받도록 하겠습니다.
BACKUP DATABASE sqlworld TO sqlworld_dump WITH INIT |
이 전체 백업 작업으로 인해서 다섯개의 레코드가 추가된 Test1 테이블이 백업된 것을 알 수 있습니다.
※ 전체 백업에 대해 이해하고 있지 못하신 분들은 예전에 진행된 전체 백업 받기강좌를 참고하여 주시기 바랍니다.
3) 데이터 추가하기
다음과 같이 스크립트를 이용해서 다섯개의 레코드를 더 추가하도록 하겠습니다.
INSERT INTO Test1 VALUES(6,'FFFFF') |
위 작업을 통해서 다섯개의 레코드가 Test1 테이블에 추가되었습니다. 이제 Test1 테이블에는 col1 컬럼이 1 에서 10까지의 값을 갖는 열개의 레코드가 기록되어 있습니다.
4) 데이터베이스 차등 백업
앞에서 만든 sqlworld_dump 백업 장치에 현재까지의 sqlworld 데이터베이스를 차등 백업 받도록 하겠습니다.
BACKUP DATABASE sqlworld TO sqlworld_dump WITH DIFFERENTIAL |
이 차등 백업에 의해 앞의 3) 번에서 이루어진 다섯개의 레코드를 추가한 내용이 백업되었습니다.
※ 전체 백업에 대해 이해하고 있지 못하신 분들은 예전에 진행된 차등백업 받기 강좌를 참고하여 주시기 바랍니다.
5) 데이터 또 추가하기
다음과 같이 스크립트를 이용해서 다섯개의 레코드를 더 추가하도록 하겠습니다.
INSERT INTO Test1 VALUES(11,'KKKKK') |
위 작업을 통해서 다섯개의 레코드가 Test1 테이블에 추가되었습니다. 이제 Test1 테이블에는 col1 컬럼이 1 에서 10까지의 값을 갖는 열개의 레코드가 기록되어 있습니다.
6) 데이터베이스 차등 백업
앞에서 만든 sqlworld_dump 백업 장치에 현재까지의 sqlworld 데이터베이스를 차등 백업 받도록 하겠습니다.
BACKUP DATABASE sqlworld TO sqlworld_dump WITH DIFFERENTIAL |
이 차등 백업에 의해 앞의 3)번과 5) 번에서 이루어진 열개의 레코드를 추가한 내용이 백업되었습니다.
7) 데이터 변경
다음과 같이 스크립트를 이용해서 col1 컬럼이 6보다 작은 다섯개의 레코드에 대하여 col2 컬럼을 전부 'XXXXX' 로 변경하였습니다.
UPDATE Test1 SET col2 = 'XXXXX' WHERE col1 < 6 |
8) 트랜잭션 로그 백업
7) 번에서 이루어진 변경 처리를 로그 백업을 받도록 하겠습니다. 로그 백업을 위해 새로운 백업장치 sqlworld_log_dump 를 만들어 이 장치에 로그를 백업 받도록 하겠습니다.
EXEC sp_addumpdevice 'disk', 'sqlworld_log_dump', 'E:\Data\sqlworld_log_dump.bak' BACKUP LOG sqlworld TO sqlworld_log_dump WITH INIT |
9) 데이터 추가 변경 (문제 발생)
다음과 같이 스크립트를 이용해서 col1 컬럼이 5보다 큰 코드에 대하여 col2 컬럼을 전부 'YYYYY' 로 변경하였습니다.
UPDATE Test1 SET col2 = 'YYYYY' |
앗! WHERE 절을 적지 않아서 모든 레코드의 col2 컬럼이 'YYYYY'로 바뀌어 버렸습니다.
3. 현재까지 백업된 내용 정리
지금까지 이루어진 4번의 백업 작업에 의해 Test1 테이블에 대해서는 다음과 같은 내용이 백업되었습니다.
1) 전체 백업 : col1 컬럼에 1 부터 5 까지 다섯개의 레코드
2) 첫번째 차등 백업 : col1 컬럼에 6 부터 10 까지 다섯개의 레코드
3) 두번째 차등 백업 : col1 컬럼에 6 부터 15 까지 열개의 레코드
4) 로그 백업 : col1 컬럼이 6 보다 작은 다섯개의 레코드에 대해 col2 컬럼을 'XXXXX' 로 변경 한 행위
4. T-SQL을 이용한 데이터베이스 복원
현재의 상황에서 앞에서 수행되었던 모든 백업을 복원하여 col2 컬럼이 'YYYYY'로 바뀐 사태를 수습하도록 하겠습니다.
1) 전체 백업 복원
USE master RESTORE DATABASE sqlworld FROM sqlworld_dump WITH FILE =1, NORECOVERY |
o NORECOVERY 옵션으로 전체 백업 받은 내용을 복원 했습니다.
o FILE = 1은 sqlworld_dump 백업 장치에 여러 가지 백업(한번의 전체 백업과 두번의 차등 백업)이 있으므로 이 중에서 첫번째, 즉 전체 백업을 선택한다는 의미입니다.
2) 차등 백업 복원
RESTORE DATABASE sqlworld FROM sqlworld_dump WITH FILE = 3, NORECOVERY |
o NORECOVERY 옵션으로 차등백업 받은 내용을 복원 했습니다.
o FILE = 3 은 sqlworld_dump 백업 장치에 여러 가지 백업(한번의 전체 백업과 두번의 차등 백업)이 있으므로 이 중에서 세번째, 즉 두번째의 차등 백업을 선택한다는 의미입니다.
o 결국 첫번째의 차등 백업은 사용될 필요가 없습니다.
3) 로그 백업 복원
RESTORE LOG sqlworld FROM sqlworld_log_dump WITH RECOVERY |
o 로그 복원이 복원의 마지막 단계 이므로 RECOVERY 옵션을 사용하였습니다.
5. 과제
다음의 내용을 구현해 보시기 바랍니다.
1) 위에서 T-SQL로 구현한 복원을 EM(Enterprise Manager)를 이용해서 구현해 보세요.
2) 첫번째 차등 백업, 즉 col1 컬럼이 1부터 10까지만 가지고 있는 내용을 복원해 보세요.
부족한 부분은 관련된 강좌를 다시한번 확인하신 후 처리해 보시기 바랍니다.
---------------------------------------------------------------------------------------출처 : http://www.sqlworld.pe.kr
"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기, 각종 광고, 영업, 판매, 제안서, 전단지 반응율 3배×10배 이상 높이는 마법의 8단계 공식" |
☞자세히보기 |
|
|