본문 바로가기

카테고리 없음

MSSQL 백업 & 복구 시나리오 #1

MSSQL 2005를 이용해 간단한 데이터베이스를 백업하고 복구하는 시나리오를 살펴보자

1. SSMS 또는 쿼리편집창을 이용해 테스트 데이터베이스를 생성한다
  database name : testDB1
  data file = c:\data\testDB1.mdf
  log file = c:\data\testDB1_log.ldf
  와 같이 구성된 데이터베이스가 있다고 가정한다.

2. 위 데이터베이스에는 다음과 같은 테이블이 하나 존재한다
  Create table tbl1 (no int)

3. 테이블에 데이터를 입력해 보자
4. SSMS를 이용하여 testDB1을 전체백업 한다(장치는 디스크에 파일로 지정한다, (testDB1.bak))
5. 테이블에 데이터를 추가한다
6. SSMS를 이용하여 testDB1을 차등 백업한다. - 이때 백업되는 내용은 기존 전체 백업했던 파일을 이용하여 백업하는데 덮어 쓰는 것이 아니라 기존 전체 백업했던 파일에 차등 분이 Append되어 백업 된다 (testDB1.bak).
7. 테이블에 데이터를 더 추가한다.
8. SSMS를 이용하여 3차로 데이터베이스를 백업하는데 이번에는 로그백업을 수행한다.
9. 테이블에 데이터를 더 추가한다.
10. 이번에도 로그백업을 한번 더 수행하여 4차 백업을 만든다.(이때도 백업될 디스크 및 파일은 동일하다(testDB1.bak)
   -- 백업되지 않은 데이터를 만들기 위하여 테이블에 데이터를 더 삽입해 보자
11. 장애발생을 가정하기 위하여 다음과 같은 쿼리문으로 데이터베이스를 오프라인으로 만든다(SSMS를 이용해도 된다)
    USE master
    ALTER DATABASE testDB1 SET OFFLINE


    -- SSMS 탐색기에서 해당 testDB1 데이터베이스가 (오프라인)으로 표시된 것을 볼 수 있다(새로고침 해야 함)
12. Windows 탐색기를 이용해 데이터베이스 파일 C:\Data\testDB1.mdf 파일을 제거한다.
13. 다시 데이터베이스를 온라인으로 만들어 보자
    ALTER DATABASE testDB1 SET ONLINE
   -- 실행하게 되면 ONLINE시 testDB1의 데이터베이스 파일이 존재하지 않아서 실패 했다고 나오는데
   -- 데이터베이스는 (ONLINE) 된다.(새로고침)
14. 장애발생되기 전에 백업되지 않았던 데이터를 위해 긴급 백업을 하나 더 해보자
   BACKUP LOG testDB1 TO DISK = 'C:\임시로그백업.bak'  -- 이번에는 다른 백업 파일을 지정한다

15. 이제부터 정상적으로 차례대로 백업했던 파일을 가지고 복원을 시도해 보자
16. SSMS에서 데이터베이스를 선택하고 "데이터베이스 복원"을 선택한다.<추가> 버튼을 클릭하여 1~4회까지
백업 받았던 파일인 "testDB1.bak" 파일을 찾아서 지정한다.
그러면 복원 대상 데이터베이스와 복원에 사용할 백업 세트 리스트가 나온다.
17. "복원옵션" 페이지에서 '기존 데이터베이스 덮어쓰기'를 체크하고 복구 상태를 두번째 'RESTORE WITH NORECOVERY'로 선택한다. - 이옵션은 장애발생 이전에 추가된 데이터는 백업되지 않았고 비상 백업에 의해서 임시 백업된 데이터가 추가로 있기 때문에 아직 복원이 완료되지 않았음을 지시 하는 것이다.

18. "확인"을 클릭 - SSMS에서 해당 데이터베이스를 보면 testDB1이 (복원중...) 메시지가 보인다.
19. 복원이 완료 되었으면 장애이후 긴급백업 했던 로그를 마지막으로 복구 한다.
   - testDB1 데이터베이스를 선택하고 마우스 오른쪽 버튼을 클릭하여 팝업 메뉴에서 "작업">"복원">"트랜잭션로그"를 선택한다.
20. "파일 또는 테이프 원본"을 선택하고 <...> 버튼을 클릭하여 긴급으로 임시 백업 받았던 "C:\임시로그백업.bak" 파일을 지정한다.
21. 그러면 복원창에 임시 백업했던 정보가 보인다.
22. 복원이 완료 되었다.
23. 데이터베이스가 완전히 복원 되었는지 확인
    SELECT * FROM tbl1

* 위 형태는 실무적인 측면에서도 가장 일반적으로 사용되는 백업/복구 형태 이므로 잘 알아두고 응용해보자
* 참고로 로그 백업은 복구모델이 "단순"으로 되어 있으면 로그백업을 수행 할 수 없다. 위 작업은 복구 모델이
   "전체복구모델", "대량로그복구모델"로 세팅되어 있을 경우에만 가능하다.
* 단순복구모델일 경우에는 전체백업과 차등백업만 이용해서 백업 및 복구가 가능하다.


[참조]뇌를 자극하는 SQL Server 2005, P.762