728x90

데이터베이스 특정 시점을 복원하는 방법을 정리하였습니다.

간단한 예제를 참고하도록 합니다.


-- 테스트 데이터베이스를 생성합니다. 이때, 복구모드는 FULL(전체)로 되어 있어야 합니다.

CREATE DATABASE LAIGO

go


USE
LAIGO

go


-- 테스트 테이블을 생성합니다.

CREATE TABLE TB_TEST

(

DATA char(1)

)

go

-- A,B,C 데이터를 삽입합니다.

INSERT INTO TB_TEST VALUES('A')

INSERT INTO TB_TEST VALUES('B')

INSERT INTO TB_TEST VALUES('C')


-- 데이터를 확인합니다.
SELECT
* FROM TB_TEST


DATA

----

A

B

C


-- Full Backup 합니다.

BACKUP DATABASE LAIGO TO DISK = 'D:\LAIGO.bak' WITH INIT

-- D,E,F 데이터를  삽입합니다.

INSERT INTO TB_TEST VALUES('D')

INSERT INTO TB_TEST VALUES('E')

INSERT INTO TB_TEST VALUES('F')


-- 데이터를 확인합니다.
SELECT
* FROM TB_TEST


DATA

----

A

B

C

D

E

F



-- 로그백업1

BACKUP LOG LAIGO TO DIsk = 'D:\LAIGO_LOG1.bak'


-- G,H,I 데이터를 삽입합니다.

INSERT INTO TB_TEST VALUES('G')

INSERT INTO TB_TEST VALUES('H')

INSERT INTO TB_TEST VALUES('I')


-- 데이터를 확인합니다.
SELECT
* FROM TB_TEST


DATA

----

A

B

C

D

E

F

G

H

I



-- 현재시간을 확인합니다.

select getdate()


2008-06-11 11:30:56.293



-- 과감히 데이터를 삭제합니다.

DELETE FROM TB_TEST


(
9개행적용됨)


-- 모두 삭제 되었음을 확인할 수 있습니다.
SELECT
* FROM TB_TEST

DATA

----


-- 이제부터 복구 절차입니다. 현재 트랜잭션 로그를 백업합니다.

BACKUP LOG LAIGO TO DISK = 'D:\LAIGO_LOG2.bak' WITH NO_TRUNCATE



use
master

go

-- Full Backup 데이터 복원합니다.

RESTORE DATABASE LAIGO FROM DISK = 'D:\LAIGO.bak' WITH NORECOVERY



-- 그 다음 로그 백업 데이터를 복원합니다.

RESTORE LOG LAIGO FROM DISK = 'D:\LAIGO_LOG1.bak' WITH NORECOVERY



-- 역시 그 다음, 최종 로그 백업 데이터를 이용하여 데이터가 삭제되기 전 시점으로 복원합니다.

RESTORE LOG LAIGO FROM DISK = 'D:\LAIGO_LOG2.bak'

WITH STOPAT = '2008-06-11 11:30:56.293' , RECOVERY



-- 확인절차

USE LAIGO

Go


-- 복구가 완료되었습니다.

SELECT * FROM TB_TEST


DATA

----

A

B

C

D

E

F

G

H

I



작성자 : Lai Go / 작성일자 : 2008.06.12

728x90
[master 데이터베이스 복구]

master 데이터베이스가 손상되면 SQL Server는 서비스 시작이 실패하며 따라서 복구 작업을
포함한 어떤 작업도 할 수 없습니다. 이렇게 master 데이터베이스가 손상되었다면 일단 SQL Server
서비스가 시작할수 있도록 Rebuildm.exe유틸리티를 사용해서 모든 시스템 데이터베이스를 초기화하거나
특정 시점의 master.mdf파일과 mastlog.ldf파일의 본사본을 사용하여 서비스를 시작할 수 있습니다.
master데이터베이스를 복구하고자 하는 경우에는 SQL server서비스를 반드시 단일 사용자 모드로 시작하여야 하며
현재 설치되어 있는 SQL Server의 빌드번호와 백업된 master데이터베이스의 빌드번호가 일치해야 한다.
빌드번호는 서비스팩업데이트나 보안패치 적용시 변경됩니다.

--------------------------------------------------------------
|손상된db | 손상시 문제점               | 복구를 위한 작업    |
--------------------------------------------------------------
|master   | sql server 서비스 시작 실패 | rebuildm.exe수행 후 |
|         |                             | 백업을 사용한 복구  |
---------------------------------------------------------------


<보안패치의 빌드번호 구성>
빌드넘버 : ProductName-KBArticleNumber-X.YY.ZZZZ-LangName.exe
1) ProductName은 제품 이름과 버전 정보입니다.
2) KBArticleNumber는 관련된 Microsoft기술 자료 문서의 ID입니다.
3) X는 주 버전 번호를 나타냅니다.
4) YY는 두 자리 수의 부 버전 번호를 나타냅니다.
5) ZZZZ는 보안 패치 등 핫픽스 번호를 나타냅니다.(빌드번호)
6) LangName은 보안패치가 현지화된 언어의 세 자리 약어입니다.
   예를 들어, KOR(한국어), ENU(영어), JPN(일본)등이 있습니다.
* 현재 master DB 빌드번호 체크
 select @@version
* backup된 master.bak 빌드번호 체크
restore headeronly
   from disk='c:\bak\master.bak'
위 두개의 dB의 빌드번호가 일치되어야 restore가 가능하다.
 
=========================================================================================
case1. 현재 설치되어 있는 SQL Server빌드 번호보다 master 데이터베이스 백업의 빌드 번호가 낮은경우
       - 이와 같은 경우는 먼저 SQL Server를 재설치하고 master데이터베이스를 복구합니다.
       1) 백업된 시스템 데이터베이스 빌드 번호와 동일한 서비스 팩과 보안패치를 준비합니다.
       2) 복구하고자 하는 인스턴스를 프로그램 추가/삭제 를 통해 삭제합니다.
       3) sql2000 및 서비스팩, 보안패치를 순서에 따라 설치합니다.
       4) sql server서비스를 단일 사용자 모드에서 시작하고 master데이터베이스를 복구합니다.
# 삭제가 안될경우에는
http://support.microsfot.com/dedault.aspx?scid=kb;ko;290991의 문서를 참고하여
  수동으로 제거하기 바랍니다.
=========================================================================================
case2. 현재 설치되어 있는 SQL Server 빌드번호와 시스템 데이터베이스 백업의 빌드번호가 일치하는 경우
 
       1) Rebuildm.exe유틸리티를 실행합니다.
          ㄱ) 방법1 : 실행창에서 rebuildm.exe를 입력한 뒤 엔터키를 누릅니다.
   ㄴ) 방법2 : c:\program files\microsoft sqlserver\80\tools\binn" 폴더로 이동하여 rebuildm.exe
       를 더블클릭 합니다.
       2) 버튼을 눌러서 초기 시스템 데이터베이스 파일(mssqlCD가 필요)이 들어 있는 폴더의 경로를 지정합니다.
       3) 데이터 정렬은 sql server설치시의 정렬과 동일한지 확인합니다. 기본적으로 운영체제의 언어에 따라
          설정됩니다. 다시 작성 버튼을 눌러 재구성을 진행합니다.
       4) 시스템 데이터베이스의 재구성이 완료되면 sql server 서비스를 종료합니다. 명령프롬프트를 사용해서
          sql server서비스를 단일 사용자 모드로 시작합니다.
   net start mssqlserver /m
       5) 쿼리분석기로 연결한 뒤 master 데이터베이스의 백업을 사용하여 복구를 진행합니다.
          복구예) restore database master
                     from disk='c:\backup\masterFULL.bak'
# sqlCD에 있는 Rebuildm.exe파일을 사용할때는 x86\DATA폴더를 하드디스크로 복사한 뒤 읽기 전용 속성을
  해제하고 사용해야 합니다.
[참조문서]
http://support.microsoft.com/default.aspx?scid=kb;en-us;273572
=========================================================================================
728x90
MS-SQL single user mode 구동법
 - MSSQL설치폴더\(인스턴스명\)binn\sqlservr.exe -m [인스턴스명]
 
   ※ 인스턴스명은 필요 시 입력
   ※ 손상된 master 데이터베이스나 다른 시스템 데이터베이스를 복구하는 경우 사용
   ※ 한 시점에 오직 사용자 한 명만 서버에 연결할 수 있음
 
 
명령 프롬프트에서 net stop mssqlserver 명령으로 mssqlserver 서비스를 정지시킨 후

net start mssqlserver /m 명령으로 단일 사용자 모드 시작이 가능합니다.

인스턴스로 설치를 하셨다면 net start mssql$<인스턴스명> 식으로 시작과 정지가 가능합니다.

+ Recent posts