반응형
- /**********************************************************************************************
-- 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;
반응형