반응형

특정 파일 또는 파일 그룹이 깨졌을 경우

USE master;
DROP DATABASE testDB2
GO

CREATE DATABASE [testDB2] ON PRIMARY
(
    NAME = N'FG1-1',
    FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\FG1-1.mdf'
),
(
    NAME = N'FG1-2',
    FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\FG1-2.ndf'
),
FILEGROUP [FG2]
(
    NAME = N'FG2-1',
    FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\FG2-1.ndf'
),
(
    NAME = N'FG2-2',
    FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\FG2-2.ndf'
),
FILEGROUP [FG3]
(
    NAME = N'FG3-1',
    FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\FG3-1.ndf'
),
(
    NAME = N'FG3-2',
    FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\FG3-2.ndf'
)
LOG ON
(
    NAME = N'testDB2_log',
    FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\testDB2_log.ldf'
)
GO

USE testDB2
CREATE TABLE tbl1 (num int)
GO
CREATE TABLE tbl2 (num int) ON FG2
GO
CREATE TABLE tbl3 (num int ) ON FG3
GO

-- 제 1회 데이터 입력 후 전체 백업
USE testDB2;
INSERT INTO tbl1 VALUES (10)
INSERT INTO tbl2 VALUES (11)
INSERT INTO tbl3 VALUES (12)
GO

BACKUP DATABASE testDB2 TO DISK = 'D:\testDB2.bak'
WITH NAME = N'제1회-전체백업', INIT
GO

BACKUP LOG testDB2 TO DISK = 'D:\testDB2.bak'
WITH NAME = N'제1회-로그백업'
GO

--제 2회 데이터 입력 후 Primary 그룹만 백업
USE testDB2
INSERT INTO tbl1 VALUES (20)
INSERT INTO tbl2 VALUES (21)
INSERT INTO tbl3 VALUES (22)
GO

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

BACKUP LOG testDB2 TO DISK = 'D:\testDB2.bak'
WITH NAME = N'제2회-로그백업'
GO

--제 3회 데이터 입력 후 FG2 그룹만 백업
USE testDB2
INSERT INTO tbl1 VALUES (30)
INSERT INTO tbl2 VALUES (31)
INSERT INTO tbl3 VALUES (32)
GO

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

BACKUP LOG testDB2 TO DISK = 'D:\testDB2.bak'
WITH NAME = N'제3회-로그백업'
GO

--제 4회 데이터 입력 후 FG3 그룹만 백업
USE testDB2
INSERT INTO tbl1 VALUES (40)
INSERT INTO tbl2 VALUES (41)
INSERT INTO tbl3 VALUES (42)
GO

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

BACKUP LOG testDB2 TO DISK = 'D:\testDB2.bak'
WITH NAME = N'제4회-로그백업'
GO

-- 백업된 내용 확인
RESTORE HEADERONLY FROM DISK = 'D:\testDB2.bak'
/*
참고 : 
BackupType 의 의미는
1 - 데이터베이스 백업
2 - 트랜잭션 로그 백업
4 - 파일 또는 파일그룹 백업
5 - 전체 차등 백업
6 - 파일 차등 백업
7 - 부분 백업
8 - 부분 차등 백업
*/

--제 5회 데이터를 입력
USE testDB2
INSERT INTO tbl1 VALUES (50)
INSERT INTO tbl2 VALUES (51)
INSERT INTO tbl3 VALUES (52)
GO

-- 두번째 파일그룹 중 'FC2-1' 파일이 깨졌다고 가정.
    해당 데이터베이스 오프라인 후 FG2-1.ndf를 지워버린다.
USE master
ALTER DATABASE testDB2 SET OFFLINE
GO

-- 다시 온라인 처리(에러가 나지만 온라인으로 처리가 된다)
USE master
ALTER DATABASE testDB2 SET ONLINE
GO

-- 데이터 복원
    깨진 두번째 파일그룹을 복원하기 위해서는 백업 받은 것 중에서 '제3회-파일그룹백업' 과 '제3회-로그백업' 만 있으면 된다.
    
    - 파일그룹 복원
    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'
    
    - 다시 복원 진행
    USE master
    RESTORE DATABASE testDB2 FILEGROUP = 'FG2'
    FROM DISK = 'D:\testDB2.bak'
    WITH FILE = 5, NORECOVERY
    GO
    RESTORE DATABASE testDB2 FILEGROUP = 'FG2'
    FROM DISK = 'D:\testDB2.bak'
    WITH FILE = 6, NORECOVERY
    GO
    RESTORE DATABASE testDB2 FILEGROUP = 'FG2'
    FROM DISK = 'D:\testDB2.bak'
    WITH FILE = 8, NORECOVERY
    GO
    RESTORE DATABASE testDB2
    FROM DISK = 'D:\testDB2.bak'
    WITH FILE = 9, RECOVERY --디폴드는 RECOVERY
    GO
    
    - 데이터 확인
    USE testDB2;
    SELECT * FROM tbl1
    SELECT * FROM tbl2
    SELECT * FROM tbl3
    
    - 정상처리된 데이터베이스 전체 백업
    BACKUP DATABASE testDB2 TO DISK = 'D:\testDB-FULL.bak'
    WITH NAME = N'전체 백업', INIT
    GO
반응형

'연구개발 > SQL2008' 카테고리의 다른 글

데이터베이스 복원 / 온라인  (0) 2010.05.03
노출 영역 구성  (0) 2010.05.02
데이터베이스 백업 / 복구모델  (0) 2010.04.27
인덱스 정보 조회  (0) 2010.04.22
FullText Search 시에 가중치 주기  (0) 2010.04.22

+ Recent posts