-- 1) 윈도우즈 탐색기에서 테스트를 위해 C:\Data 폴더 및 C:\Backup 폴더 생성
-- 2) 여러 파일 그룹을 갖는 Sample 데이터베이스 만들기
USE Master
GO
CREATE DATABASE Sample
ON PRIMARY (
NAME = 'Sample', FILENAME = 'C:\Data\Sample.mdf'),
FILEGROUP FG01(
NAME = 'Sample_01', FILENAME = 'C:\Data\Sample_01.ndf'),
FILEGROUP FG02(
NAME = 'Sample_02', FILENAME = 'C:\Data\Sample_02.ndf'),
FILEGROUP FG03(
NAME = 'Sample_03', FILENAME = 'C:\Data\Sample_03.ndf')
LOG ON (
NAME = 'Sample_log', FILENAME = 'C:\Data\Sample_log.ldf')
GO
-- 3) 각각의 파일 그룹에 테이블 만들기
USE Sample
GO
CREATE TABLE T1 (
col1 int,
col2 int
) ON FG01
CREATE TABLE T2 (
col1 int,
col2 int
) ON FG02
CREATE TABLE T3 (
col1 int,
col2 int
) ON FG03
-- 4) 전체 백업
BACKUP DATABASE Sample
TO DISK = 'C:\Backup\Sample_Full.bak'
WITH INIT -- 처음엔 생략 가능(반복 학습을 위해 포함시킴)
GO
-- 5) 데이터 추가 #1
INSERT INTO T1 VALUES (1, 10)
INSERT INTO T2 VALUES (1, 10)
INSERT INTO T3 VALUES (1, 10)
GO
-- 6) 트랜잭션 로그 백업
BACKUP LOG Sample
TO DISK = 'C:\Backup\Sample_Log.bak'
WITH INIT -- 처음엔 생략 가능
GO
-- 7) 데이터 추가 #2
INSERT INTO T1 VALUES (2, 20)
INSERT INTO T2 VALUES (2, 20)
INSERT INTO T3 VALUES (2, 20)
GO
-- 8) 서비스 종료 후 Sample_02 제거 후 재 시작
-- 9) Sample 데이터베이스 접근 시도시 에러 발생
-- 다음 에러는 세션이 끊어져 발생하는 것이므로 무시하고 다시 시도하면 됨
-- 메시지 233, 수준 20, 상태 0, 줄 0
-- 서버로 요청을 보내는 동안 전송 수준 오류가 발생했습니다.
-- (provider: 공유 메모리 공급자, error: 0 - 파이프의 다른 끝에 프로세스가 없습니다.)
USE Sample
GO
-- 메시지 945, 수준 14, 상태 2, 줄 1
-- 파일에 액세스할 수 없거나 메모리 또는 디스크 공간이 부족하여
-- 데이터베이스 'Sample'을(를) 열 수 없습니다.
-- 자세한 내용은 SQL Server 오류 로그를 참조하십시오.
-- 10) Sample_02 파일 오프라인 시키기
-- 이렇게 한 후 서비스 재시작 하면 나머지 파일의 테이블은 사용가능 해짐
ALTER DATABASE Sample
MODIFY FILE (NAME = 'Sample_02', OFFLINE)
GO
-- 11) 서비스 재시작
-- 12) Sample 데이터베이스 접근 가능 확인
USE Sample
GO
SELECT * FROM T1 -- 정상
GO
SELECT * FROM T2 -- 에러
GO
SELECT * FROM T3 -- 정상
GO
-- 13) T2 테이블이 포함된 Sample_02 파일 살리기
-- a) 로그 꼬리 백업
-- 데이터 추가#2 부분에서 추가된 데이터의 백업이 없으므로 필수적으로 로그 꼬리 백업 필요
USE Master
GO
BACKUP LOG Sample
TO DISK = 'C:\Backup\Sample_Tail_Log.bak'
WITH INIT -- 처음엔 생략 가능
GO
-- b) 전체 백업에서 파일 복원
RESTORE DATABASE Sample
FILE = 'Sample_02'
FROM DISK = 'C:\Backup\Sample_Full.bak'
WITH NORECOVERY -- 이어서 복원할 내용이 있으므로 NORECOVERY 옵션
GO
-- c) T1, T3 테이블은 여전히 사용 가능한 상태
USE Sample
GO
SELECT * FROM T1
SELECT * FROM T3
-- d) 데이터 추가도 가능
INSERT INTO T1 VALUES(3, 30)
INSERT INTO T3 VALUES(3, 30)
GO
-- e) 로그 복원
USE Master
GO
RESTORE LOG Sample
FROM DISK = 'C:\Backup\Sample_Log.bak'
WITH NORECOVERY -- 이어서 복원할 내용이 있으므로 NORECOVERY 옵션
GO
RESTORE LOG Sample
FROM DISK = 'C:\Backup\Sample_Tail_Log.bak'
WITH RECOVERY -- 마지막 복원 과정이므로 RECOVERY 옵션
GO
-- 14) 복원 결과 최종 확인
USE Sample
GO
SELECT * FROM T1 -- 정상
GO
SELECT * FROM T2 -- 정상
GO
SELECT * FROM T3 -- 정상
GO
-- 15) 정리
USE Master
GO
DROP DATABASE Sample
GO
-- 윈도우즈 탐색기에서 C:\Data 폴더 및 C:\Backup 폴더 삭제
-- 16) 수고하셨습니다^^
댓글 없음:
댓글 쓰기