SQL Server/SQL Server Tip

Online restore

SungWookKang 2015. 7. 17. 08:43
반응형

Online restore

 

온라인 복원? 데이터 베이스가 온라인 상태에서 복원을 하는 것을 뜻한다.

SQL Server 2005 Enterprise 이상 버전에서 지원한다.

 

대용량 데이터베이스에서는 파일 그룹을 나누어 사용하는 경우가 많다.

백업 단위 또한 매우 클 것이다. 만약 데이터베이스 장애가 발생하여 복원 할 일이 생겼다.

이 때 모든 데이터가 PRIMARY 그룹에만 있다면 어떻게 될까?

데이터베이스는 PRIMARY그룹을 복원하느라 많은 시간이 걸릴 것이다.

하지만 파일 그룹이 나누어져 있다면 PRIMARY 먼저 복원하고 부분적으로 필요에 따라

우선순위를 정하여 파일 그룹을 복원하여 사용하자.

데이터베이스 복원 시 PRIMARY 그룹만 복원되어도 온라인 상태가 되는 것을 확인 할 수 있다.

--KSW 데이터베이스 생성, PRIMARY 파일 그룹, FG1, FG2, FG_INDEX 그룹 생성.

CREATE DATABASE KSW

ON PRIMARY

(NAME = 'PRIMARY_FILE', FILENAME = 'C:\BACKUP\KSW.MDF'),

FILEGROUP FG1

(NAME = 'FG1_FILE', FILENAME = 'C:\BACKUP\KSW_FG1.NDF'),

FILEGROUP FG2

(NAME = 'FG2_FILE', FILENAME = 'C:\BACKUP\KSW_FG2.NDF'),

FILEGROUP FG_INDEX

(NAME = 'FG_INDEX_FILE', FILENAME = 'C:\BACKUP\KSW_FG_INDEX.NDF')

LOG ON

(NAME = 'KSW_LOG', FILENAME = 'C:\BACKUP\KSW_LOG.LDF')

 

 

 

--FG1, FG2 그룹에 테이블 생성.

USE KSW

GO

 

CREATE TABLE FG1_TABLE (ID INT IDENTITY,NAME NVARCHAR(50)) on FG1

GO

 

INSERT INTO FG1_TABLE (NAME)

SELECT 'FG1'

GO 2000

 

CREATE TABLE FG2_TABLE (ID INT IDENTITY,NAME NVARCHAR(50)) on FG2

GO

 

INSERT INTO FG2_TABLE (NAME)

SELECT 'FG2'

GO 2000

 

--데이터베이스 백업.

BACKUP DATABASE KSW TO DISK = 'C:\Backup\KSW.BAK' WITH INIT

GO

 

 

--장애 상황을 위하여 데이터베이스 삭제.

USE master

GO

 

DROP DATABASE KSW

GO

 

--백업 정보 확인.

RESTORE FILELISTONLY FROM DISK = 'C:\BACKUP\KSW.BAK'

GO

 

 

--PRIMARY 그룹 우선 복원.

RESTORE DATABASE KSW FILEGROUP = 'PRIMARY' FROM DISK = 'C:\BACKUP\KSW.BAK' WITH PARTIAL

GO

 

 

--데이터베이스 온라인 상태 확인

SELECT name, state_desc FROM SYS.databases WHERE NAME = 'KSW'

GO

 

 

--데이터 조회 해보기.

USE KSW

GO

 

SELECT * FROM FG1_TABLE

SELECT * FROM FG2_TABLE

 

 

--FG1 그룹 복원

USE MASTER

GO

 

RESTORE DATABASE KSW FILEGROUP = 'FG1' FROM DISK = 'C:\BACKUP\KSW.BAK'

GO

 

 

--데이터 조회 해보기.

USE KSW

GO

 

SELECT * FROM FG1_TABLE

GO

 

 

--FG2, FG_INDEX 그룹 복원

RESTORE DATABASE KSW FILEGROUP = 'FG2' FROM DISK = 'C:\BACKUP\KSW.BAK'

GO

 

RESTORE DATABASE KSW FILEGROUP = 'FG_INDEX' FROM DISK = 'C:\BACKUP\KSW.BAK'

GO

 

 

만약 클러스터 인덱스가 다른 파일 그룹에 생성되어 있고 그 파일 그룹이 복원되지 않는다면 어떻게 될까?

우리가 일반적으로 겪은 서스펙트 상태가 나타날까?

아니면 정상적으로 온라인 상태가 될까?

--FG_INDEX 그룹에 Clustered Index 생성.

CREATE CLUSTERED INDEX CL_FG1_TABLE_ID ON FG1_TABLE(ID) ON FG_INDEX

GO

 

CREATE CLUSTERED INDEX CL_FG2_TABLE_ID ON FG2_TABLE(ID) ON FG_INDEX

GO

 

SP_HELP FG1_TABLE

GO

 

 

PRIMARY 및 FG1 그룹만 복원 하였다.

인덱스 그룹은 복원하지 않았는데 서스펙트 상태가 나타나지 않는다?

인덱스가 깨진 것 과는 다르게 인식 되는건가?

왜??

--다시 백업하고 PRIMARY, FG1 그룹만 복원

USE master

GO

 

DROP DATABASE KSW

GO

 

RESTORE DATABASE KSW FILEGROUP = 'PRIMARY' FROM DISK = 'C:\BACKUP\KSW.BAK' WITH PARTIAL

GO

 

RESTORE DATABASE KSW FILEGROUP = 'FG1' FROM DISK = 'C:\BACKUP\KSW.BAK'

GO

 

USE KSW

GO

 

SELECT * FROM FG1_TABLE

GO

 

FG_INDEX (인덱스가 저장된 파일 그룹)가 복원 되지 않으면 데이터 조회가 안됨.

 

--FG_INDEX 그룹 복원

USE master

GO

 

RESTORE DATABASE KSW FILEGROUP = 'FG_INDEX' FROM DISK = 'C:\BACKUP\KSW.BAK'

GO

 

SELECT * FROM FG1_TABLE

 

 

 

내가 쓰는 환경처럼 인덱스 파일 그룹을 따로 사용하고 있다면 인덱스 그룹부터 먼저 복원 하도록 하자. 실컷 데이터 복원했는데 인덱스 그룹 복원 안되어 데이터 조회가 안된다면…

아무런 의미가 없지 않을까…?

 

참고 자료

라이고 블로그 http://www.laigo.kr/643

MSDN http://technet.microsoft.com/ko-kr/library/ms188671(v=sql.105).aspx

반응형