반응형
- /**********************************************************************************************
-- Title : [2k] 파일 & 파일그룹 백업 시연
-- Reference : dbRang.com
-- Key word : backup database, filegroup
**********************************************************************************************/
-- master dB 사용
use master
go
-- 기존 ttt_dB가 있으면 지운다.
-- 시스템 테이블 sysdatabases에서 찾는겨~
if exists(select name from sysdatabases where name = 'ttt_dB')
drop database ttt_dB
go
-- ttt_dB 생성과 기본 .mdf 및 .ldf 생성
create database ttt_dB
on
( name = 'ttt_Sys'
-- Primary 그룹에 자동 설정(파일 그룹 지정이 없으면 Primary 그룹이 default)
, filename = 'd:\ttt_Sys.MDF'
, size = 1MB
, filegrowth = 0%
)
log on
( name = 'ttt_Log' -- Primary 그룹에 자동 설정
, filename = 'd:\ttt_Log.LDF'
, size = 1MB
, filegrowth = 0%
)
go
-- ttt_FG_1 파일 그룹 추가
alter database ttt_dB
add
filegroup ttt_FG_1
go
-- ttt_FG_1 파일 그룹에 ttt_F_1 파일 추가
alter database ttt_dB
add file
( name = 'ttt_F_1'
, filename = 'd:\ttt_F_1.ndf'
, size = 2MB
, filegrowth = 0%
) to filegroup ttt_FG_1
go
-- ttt_FG_2 파일 그룹 추가
alter database ttt_dB
add
filegroup ttt_FG_2
go
-- ttt_FG_2 파일 그룹에 ttt_F_2 파일 추가
alter database ttt_dB
add file
( name = 'ttt_F_2'
, filename = 'd:\ttt_F_2.ndf'
, size = 2MB
, filegrowth = 0%
) to filegroup ttt_FG_2
go
-- ttt_dB 사용
use ttt_dB
go
-- Primary 그룹에 ttt_T_0 테이블 생성
create table ttt_T_0
(
T_0_ID int not null
) /* FileGroup을 지정하지 않으면 default로 Primary에 생성됨. */
go
-- ttt_FG_1 파일그룹에 ttt_T_1 테이블 생성
create table ttt_T_1
(
T_1_ID int not null primary key
, T_1_CH char(5) not null
, T_1_VC varchar(5) null
) on ttt_FG_1
go
-- ttt_FG_2 파일 그룹에 ttt_T_2 테이블 생성
create table ttt_T_2
(
T_2_ID int not null primary key
, T_2_CH char(5) not null
, T_2_VC varchar(5) null
) on ttt_FG_2
go
-- Ctrl+D 를 눌러 결과창을 그리드로 볼수 있게하고 5번째 그리드로 확인한다.
-- 아니면 상단 메뉴에서 [쿼리]-[표 형태로결과 표시]를 클릭 하시오.
-- 아래 SP에서 지정된 파일 그룹을 확인 할 수 있다.
-- 보기 힘드니깐 exec를 하나씩 실행하고 5번째 그리드를 통해서 파일 그룹 확인혀~
exec sp_help ttt_T_0
exec sp_help ttt_T_1
exec sp_help ttt_T_2
-- 데이터 입력
insert ttt_T_0 values(0)
insert ttt_T_0 values(1)
insert ttt_T_1 values(1,'CH_aa','VC_aa')
insert ttt_T_1 values(2,'CH_ab','VC_ab')
insert ttt_T_2 values(1,'CH_ba','VC_ba')
insert ttt_T_2 values(2,'CH_bb','VC_bb')
go
-- 확인
select * from ttt_T_0
select * from ttt_T_1
select * from ttt_T_2
go
-- master 사용
use master
go
-- 디바이스 추가.
-- 재 작업시 이미 디바이스가 설정되어 있을 수 있지요...^^;; 그땐 지워...
-- sp_dropdevice 'ttt_Device_F' -- 디바이스 삭제
-- sp_dropdevice 'ttt_Device_P'
-- sp_dropdevice 'ttt_Device_1'
-- sp_dropdevice 'ttt_Device_2'
-- sp_dropdevice 'ttt_Device_L'
-- sp_dropdevice 'ttt_Device_L2'
-- sp_dropdevice 'ttt_Device_L3'
-- sp_dropdevice 'ttt_Device_L4'
-- ttt_Full backup
exec sp_addumpdevice 'disk', 'ttt_Device_F', 'd:\ttt_FG_F_Bak.dat'
-- ttt_FG_Primary backup
exec sp_addumpdevice 'disk', 'ttt_Device_P', 'd:\ttt_FG_P_Bak.dat'
-- ttt_FG_1 backup
exec sp_addumpdevice 'disk', 'ttt_Device_1', 'd:\ttt_FG_1_Bak.dat'
-- ttt_FG_2 backup
exec sp_addumpdevice 'disk', 'ttt_Device_2', 'd:\ttt_FG_2_Bak.dat'
-- ttt_Log1 backup //Primary 변경 로그 백업
exec sp_addumpdevice 'disk', 'ttt_Device_L', 'd:\ttt_FG_L_Bak.dat'
-- ttt_Log2 backup //FG1 변경 로그 백업
exec sp_addumpdevice 'disk', 'ttt_Device_L2', 'd:\ttt_FG_L2_Bak.dat'
-- ttt_Log3 backup //FG2 변경 로그 백업
exec sp_addumpdevice 'disk', 'ttt_Device_L3', 'd:\ttt_FG_L3_Bak.dat'
-- ttt_Log4 backup //복원 전 선행 로그 백업
exec sp_addumpdevice 'disk', 'ttt_Device_L4', 'd:\ttt_FG_L4_Bak.dat'
-- 아래부터 나오는 ##번호는 첨부된 엑셀파일에서 데이터 입력 현황을 볼 수 있는 태그요.
-- ##1. 일단 전체 백업
backup database ttt_dB
to ttt_Device_F
go
-- ttt_T_0 테이블에 간단한 데이터 입력
insert ttt_dB.dbo.ttt_T_0 values(100)
go
-- ##2. Primary 그룹 백업
backup database ttt_dB
filegroup = 'PRIMARY'
to ttt_Device_P
with init -- init option? 찾아서 공부해~ 캭~!
go
-- ttt_T_0 테이블에 간단한 데이터 입력
insert ttt_dB.dbo.ttt_T_0 values(200)
go
-- ##3. ttt_T_0 테이블의 Log 백업
backup log ttt_dB
to ttt_Device_L
with init
go
-- ttt_T_1에 간단한 데이터 입력
insert ttt_dB.dbo.ttt_T_1 values(100,'CH100','VC100')
go
-- ##4. ttt_FG_1 그룹 백업
backup database ttt_dB
filegroup = 'ttt_FG_1'
to ttt_Device_1
with init
go
-- ttt_T_1 테이블에 간단한 데이터 입력
insert ttt_dB.dbo.ttt_T_1 values(200,'CH200','VC200')
go
-- ##5. ttt_FG_1 로그 백업
backup log ttt_dB
to ttt_Device_L2
with init
go
-- ttt_T_2에 간단한 데이터 입력
insert ttt_dB.dbo.ttt_T_2 values(300,'CH300','VC300')
go
-- ##6. ttt_FG_2 그룹 백업
backup database ttt_dB
filegroup = 'ttt_FG_2'
to ttt_Device_2
with init
go
-- ttt_T_2에 간단한 데이터 입력
insert ttt_dB.dbo.ttt_T_2 values(400,'CH400','VC400')
go
-- ##7. ttt_FG_2 로그 백업
backup log ttt_dB
to ttt_Device_L3
with init
go
-- ##8. ttt_FG_2의 ttt_T_2 테이블에 데이터 입력
-- 이 건은 로그 백업을 하지 않지만 차후에 이건까지 복구를 한다.
insert ttt_dB.dbo.ttt_T_2 values(900,'CH900','VC900')
go
-- 현재까지의 전체 테이블 확인
select * from ttt_dB.dbo.ttt_T_0
select * from ttt_dB.dbo.ttt_T_1
select * from ttt_dB.dbo.ttt_T_2
-- 이 다음에 할일은 dB 파일을 망가뜨리는 것이니 잘 따라 하시게...
-- 우선 SQL Server 서비스 관리자에서 서비스를 중지한다.
-- 다음 탐색기 d: 드라이브에서 ttt_F_2.ndf를 삭제.. 이는 ttt_FG_2를 임의로 망가뜨리는
-- 것이라네..
-- 그런 후, SQL Server 서비스 관리자에서 서비스를 시작해 보시게.
-- EM을 열고 해당 서버에서 새로고침을 한번하고 데이터베이스를 열어보면 ttt_dB 아이콘이
-- 회색으로 되면서
-- (주의대상)이라고 표시됨.... 당근 사용이 불가...
-- 이제부터 ttt_FG_2 그룹의 ttt_F_2 복구 시작.
-- 주의! 파일및 파일그룹 백업의 복원은 선행적으로 로그 백업이 우선되어야 한다.
-- dB가 망가졌는데 어캐 로그 백업을 하냐? 그건~ 만든사람 맘인거 같어~
-- 암턴 해봐~ 잘돼~
backup log ttt_dB
to ttt_Device_L4
with no_truncate, init -- no_truncate 옵션 : 에러 직전까지의 로그 복원위한 옵션...
go
-- ttt_FG_2 파일 그룹 복원
restore database ttt_dB
filegroup = 'ttt_FG_2'
from ttt_Device_2
with norecovery
-- norecovery 옵션 : 쉽게 말해 이 작업 다음에 또 복구할 작업이 있다...할때 쓴다.
go
-- ttt_FG_2에서 로그백업한 내용 복구
restore log ttt_dB
from ttt_Device_L3
with norecovery
go
-- 파일및파일 그룹 복구 선행된 로그 백업 복구
-- no_truncate 옵션으로 인해 에러 직전까지의 데이터 복구 가능...
restore log ttt_dB
from ttt_Device_L4
with recovery
go
-- ##9. 푸하하하~!
-- 확인해 보자공....
select * from ttt_dB.dbo.ttt_T_0
select * from ttt_dB.dbo.ttt_T_1
select * from ttt_dB.dbo.ttt_T_2
반응형