1. /**********************************************************************************************
    -- Title :[2k] 전체-차등-로그-비상로그 활용한 복구
    -- Reference : hanbitbook.co.kr
    -- Key word : backup log recovery 비상 로그 no_truncate restore
    **********************************************************************************************/
    USE master;

    DROP DATABASE testDB1;

    --데이터베이스 생서
    CREATE DATABASE [testDB1] ON  PRIMARY
    ( NAME = N'testDB1'
    , FILENAME = N'd:\testDB1.mdf'
    )
     LOG ON
    ( NAME = N'testDB1_log'
    , FILENAME = N'd:\testDB1_log.ldf'
    );

    USE [testDB1];

    --테이블 생성
    CREATE TABLE tbl1 (no int);

    --데이터 저장 후 전체 백업
    INSERT INTO tbl1 VALUES(10);

    BACKUP DATABASE testDB1 to DISK='d:\testDB1_bak' WITH INIT;

    --데이터 저장 후 차등 백업
    INSERT INTO tbl1 VALUES(20);
    INSERT INTO tbl1 VALUES(30);

    BACKUP DATABASE testDB1 to DISK='d:\testDB1_bak' WITH DIFFERENTIAL;

    --데이터 저장 후 로그 백업
    INSERT INTO tbl1 VALUES(40);
    INSERT INTO tbl1 VALUES(50);

    BACKUP LOG testDB1 to DISK='d:\testDB1_bak';

    --데이터 저장 후 로그 백업
    INSERT INTO tbl1 VALUES(60);

    BACKUP LOG testDB1 to DISK='d:\testDB1_bak';

    --백업 확인(BackupType 필드 확인)
    RESTORE HEADERONLY FROM DISK='d:\testDB1_bak';

    --데이터 추가
    INSERT INTO tbl1 VALUES(70);
    INSERT INTO tbl1 VALUES(80);
    INSERT INTO tbl1 VALUES(90);

    SELECT * FROM tbl1;

    --장애 임의 발생
    USE master;

    ALTER DATABASE testDB1 SET OFFLINE; -- 이후 testDB1.mdf 삭제

    ALTER DATABASE testDB1 SET ONLINE; --에러 발생
     
    /*
    -- 복구 시작
    */
    --백업 받지 못한 비상 로그 백업(NO_TRUNCATE 옵션 증요)
    BACKUP LOG testDB1 TO DISK='d:\임시로그백업.bak'
    WITH NO_TRUNCATE, INIT;

    --전체 백업분 복구
    RESTORE DATABASE testDB1 FROM DISK='d:\testDB1_bak'
    WITH FILE=1
    ,    NORECOVERY;

    --차등 백업분 복구
    RESTORE DATABASE testDB1 FROM DISK='d:\testDB1_bak'
    WITH FILE=2
    ,    NORECOVERY;

    --처음 로그 백업분 복구
    RESTORE LOG testDB1 FROM DISK='d:\testDB1_bak'
    WITH FILE=3
    ,    NORECOVERY;

    --두번째 로그 백업분 복구
    RESTORE LOG testDB1 FROM DISK='d:\testDB1_bak'
    WITH FILE=4
    ,    NORECOVERY;

    --비상 로그 백업분 복구(RECOVERY설정)
    RESTORE LOG testDB1 FROM DISK='d:\임시로그백업.bak'
    WITH RECOVERY;

    --복구 확인
    USE testDB1;

    SELECT * from tbl1;
신고

+ Recent posts