반응형
특정 파일 또는 파일 그룹이 깨졌을 경우
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 |