반응형
  1. /**********************************************************************************************
    -- Title : [2k5] 파일 그룹 백업을 통한 복구
    -- Reference : hanbitbook.co.kr
    -- Key word : backup database filegroup 비상 로그
    **********************************************************************************************/
    USE master;

    DROP DATABASE testDB2;  -- 혹시기존에DB가있으면삭제, 오류가나도상관없음

    CREATE DATABASE [testDB2] ON  PRIMARY
    ( NAME = N'FG1-1'
    , FILENAME = N'd:\FG1-1.mdf'
    ),
    ( NAME = N'FG1-2'
    , FILENAME = N'd:\FG1-2.ndf'
    ),
     FILEGROUP [FG2]
    ( NAME = N'FG2-1'
    , FILENAME = N'd:\FG2-1.ndf'
    ),
    ( NAME = N'FG2-2'
    , FILENAME = N'd:\FG2-2.ndf'
    ),
    FILEGROUP [FG3]
    ( NAME = N'FG3-1'
    , FILENAME = N'd:\FG3-1.ndf'
    ),
    ( NAME = N'FG3-2'
    , FILENAME = N'd:\FG3-2.ndf'
    )
     LOG ON
    ( NAME = N'testDB2_log'
    , FILENAME = N'd:\testDB2_log.ldf'
    );

    USE testDB2;

    CREATE TABLE tbl1 (num int);
    CREATE TABLE tbl2 (num int)  ON FG2;
    CREATE TABLE tbl3 (num int)  ON FG3;

    INSERT INTO tbl1 VALUES(10);
    INSERT INTO tbl2 VALUES(11);
    INSERT INTO tbl3 VALUES(12);

    BACKUP DATABASE testDB2 TO disk = 'd:\testDB2.bak'
    WITH NAME = N'제1회-전체백업', INIT;

    BACKUP LOG testDB2 TO disk = 'd:\testDB2.bak'
    WITH NAME=N'제1회-로그백업';

    INSERT INTO tbl1 VALUES(20);
    INSERT INTO tbl2 VALUES(21);
    INSERT INTO tbl3 VALUES(22);

    BACKUP DATABASE testDB2 FILEGROUP = 'PRIMARY'
      TO disk = 'd:\testDB2.bak'
      WITH NAME=N'제2회-파일그룹백업';

    BACKUP LOG testDB2 TO disk = 'd:\testDB2.bak'
    WITH NAME=N'제2회-로그백업';

    INSERT INTO tbl1 VALUES(30);
    INSERT INTO tbl2 VALUES(31);
    INSERT INTO tbl3 VALUES(32);

    BACKUP DATABASE testDB2 FILEGROUP = 'FG2'
      TO disk = 'd:\testDB2.bak'
      WITH NAME=N'제3회-파일그룹백업';

    BACKUP LOG testDB2 TO disk = 'd:\testDB2.bak'
    WITH NAME=N'제3회-로그백업';

    INSERT INTO tbl1 VALUES(40);
    INSERT INTO tbl2 VALUES(41);
    INSERT INTO tbl3 VALUES(42);

    BACKUP DATABASE testDB2 FILEGROUP = 'FG3'
      TO disk = 'd:\testDB2.bak'
      WITH NAME=N'제4회-파일그룹백업';

    BACKUP LOG testDB2 TO disk = 'd:\testDB2.bak'
    WITH NAME=N'제4회-로그백업';

    RESTORE HEADERONLY FROM DISK = 'd:\testDB2.bak'

    INSERT INTO tbl1 VALUES(50);
    INSERT INTO tbl2 VALUES(51);
    INSERT INTO tbl3 VALUES(52);

    USE master;

    ALTER DATABASE testDB2 SET OFFLINE
    /*여기서 DB 에러 발생(FG2-1.ndf 파일 삭제)*/

    ALTER DATABASE testDB2 SET ONLINE
    GO

    USE master;
     
    --에러 발생시 비상 로그 백업부터
    RESTORE DATABASE testDB2 FILEGROUP = 'FG2'
       FROM DISK='d:\testDB2.bak'
       WITH FILE = 5, NORECOVERY;

    BACKUP LOG testDB2 TO DISK='d:\testDB2.bak'
     WITH NAME='제5회-비상로그백업', NO_TRUNCATE;

    RESTORE HEADERONLY FROM DISK = 'd:\testDB2.bak';

    -- FG2 파일 그룹 백업분
    RESTORE DATABASE testDB2 FILEGROUP = 'FG2'
       FROM DISK='d:\testDB2.bak'
       WITH FILE = 5, NORECOVERY;

    -- FG2k 파일 그룹 백업분 이후 로그 처음것
    RESTORE LOG testDB2 FILEGROUP = 'FG2'
       FROM DISK='d:\testDB2.bak'
       WITH FILE = 6, NORECOVERY;

    -- FG2k 파일 그룹 백업분 이후 로그 두번째것
    RESTORE LOG testDB2 FILEGROUP = 'FG2'
       FROM DISK='d:\testDB2.bak'
       WITH FILE = 8, NORECOVERY;

    -- 마지막 비상 로그분
    RESTORE LOG testDB2
       FROM DISK='d:\testDB2.bak'
       WITH FILE = 9;       -- 디폴트는 RECOVERY

    USE testDB2;

    SELECT * FROM tbl1;
    SELECT * FROM tbl2;
    SELECT * FROM tbl3;

    -- 파일 그룹 백업 복구 후 전체 백업 필수
    BACKUP DATABASE testDB2 TO disk = 'd:\testDB2-FULL.bak'
    WITH NAME = N'전체백업', INIT;
반응형

+ Recent posts