반응형


/**
온라인 복원 (전체가 깨졋을 경우로 가정)
 - 대용량 데이터베이스로 가정하고 중요도가 높은 테이블이 포함된 파일그룹부터 복원할 경우
**/
USE master
RESTORE DATABASE testDB2 FROM DISK = 'D:\testDB2-FULL.bak'
WITH RECOVERY, REPLACE

/*
1. 기존의 백업을 무시하고 전체 백업실시
 백업장치를 이용하기 위해 백업장치 3개 생성
    USE master
    EXEC sp_addumpdevice 'disk', 'backupDevice1', 'D:\back1.bak'
    EXEC sp_addumpdevice 'disk', 'backupDevice2', 'D:\back2.bak'
    EXEC sp_addumpdevice 'disk', 'backupDevice3', 'D:\back3.bak'
*/
BACKUP DATABASE testDB2 TO backupDevice1, backupDevice2, backupDevice3
WITH NAME = N'전체 백업', INIT, FORMAT
GO

/* 확인 */
RESTORE HEADERONLY FROM backupDevice1, backupDevice2, backupDevice3

/* 데이터를 추가 */
USE testDB2
INSERT INTO tbl1 VALUES (60)
INSERT INTO tbl2 VALUES (61)
INSERT INTO tbl3 VALUES (62)
GO

/* 데이터베이스 오프라인 후 저장된 파일(FG*.*)를 모두 삭제 */
USE master
ALTER DATABASE testDB2 SET OFFLINE

/* 다시 온라인 시키면 오류메시지와 함께 온라인 된다. */
ALTER DATABASE testDB2 SET ONLINE

/*
가장 중요한 파일그룹부터 복원. 하지만 주파일그룹은 반드시 제일 먼저 복원되어야함.
중요도는 tbl1 -> tbl3 -> tbl2 라고 가정한다면, 주파일그룹 -> FG3 -> FG2 순으로 복원
*/
/* 우선 트랜잭션 로그를 임시 파일에 백업 */
BACKUP LOG testDB2 TO DISK = 'D:\비상로그1.bak'
WITH NO_TRUNCATE, INIT

/* 다시 복원한다. 이번에는 임시 로그도 복원 */
RESTORE DATABASE testDB2 FILEGROUP = 'PRIMARY'
FROM backupDevice1, backupDevice2, backupDevice3
WITH PARTIAL, NORECOVERY
GO
RESTORE LOG testDB2 FROM DISK = 'D:\비상로그1.bak'
GO

/* PRIMARY 그룹의 tbl1에 접근 가능. */
USE testDB2
SELECT * FROM tbl1

/*데이터 추가. 현재 트랜잭션 로그 파일에 로그 기록을 추가*/
INSERT INTO tbl1 VALUES (70)

/* 나머지 그룹 테이블에 접근 불가능 */
SELECT * FROM tbl2

/* 다음으로 중요한 FG3를 복원. 비상로그를 먼저 백업함 */
BACKUP LOG testDB2 TO DISK = 'D:\비상로그2.bak'
WITH NO_TRUNCATE, INIT
GO

USE master
RESTORE DATABASE testDB2 FILEGROUP = 'FG3'
FROM backupDevice1, backupDevice2, backupDevice3
WITH PARTIAL, NORECOVERY
GO
RESTORE LOG testDB2 FROM DISK = 'D:\비상로그2.bak'
GO

/* 접근이 가능해졌는지 확인 */
USE testDB2
SELECT * FROM tbl3

/* FG2 복원 */
BACKUP LOG testDB2 TO DISK = 'D:\비상로그3.bak'
WITH NO_TRUNCATE, INIT
GO

USE master
RESTORE DATABASE testDB2 FILEGROUP = 'FG2'
FROM backupDevice1, backupDevice2, backupDevice3
WITH PARTIAL, NORECOVERY
GO
RESTORE LOG testDB2 FROM DISK = 'D:\비상로그3.bak'
GO

/* 확인 */
USE testDB2
SELECT * FROM tbl2

반응형

+ Recent posts