본문 바로가기
TechNical/MS SQL

예전에.. 재미로 만들어본 야매 복제 DB -_-;;

by 강멍멍이 2008. 2. 20.
반응형

예~~전에 30분전 데이터를 가지고 있는 DB를 야매로 만들어 본 적이 있습니다.
근데.. 이거두 하두 예전에 한거라서... 어케 했던건지.. 기억이 잘 나지는 않네요...
이대로 하면 잘 되는지도 모르겠네요 ㅡㅡ;;

아무튼 제 기억으로는...

항상 30분 전의 데이터를 유지하는 DB를 만들었었던거 같습니다. ㅎㅎ
.... 이게 쓸모가 있는지는 모르겠지만... 그냥 이런것두 있구나 라고 생각하세요 ㅎㅎ

-- [참고용] 파일명에 날짜 입력 방식
-- 날짜 형식 , ex) 200705041041
select  convert(CHAR(8),getdate(),112)+replace((substring(convert(CHAR(19),getdate(),120),12,6)),':','')
-- 30분전
select dateadd(mi,-30,getdate())
-- 크로스
select  convert(CHAR(8),getdate(),112)
    + replace((substring(convert(CHAR(19),dateadd(mi,-30,getdate()),120),12,6)),':','')

위에꺼는 시스템 날짜를 가져와서 쪼물딱거리기 위한 참고용 쿼리이구여.
요기서 부터가 시작입니다. ^^

-- [유지관리 계획] 설정
-- pubs 풀 백업 1시간 간격
-- pubs 로그 백업 5분 간격

-- 복구용 쓰래기통 디비 맹글기
-- pubs 디비의 30분전 데이터를 가지고  있을 DB
create database trashcan

-- 최초 Setting !
-- pubs 디비를 trashcan 디비로 복구 with replace,norecovery,move
-- 현재 시각의 30분전 백업 파일
-- [현재 시간 10:30]
-- 복구된 데이터 파일 10:00 꺼
restore database trashcan
from disk='C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\pubs\pubs_db_200705041000.BAK'
with replace,norecovery,
move 'pubs' to 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\trashcan.mdf',
move 'pubs_log' to 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\trashcan_log.ldf'


-- 30분 시간만 칼 같이 잘 준수 한다면 이 부분은 안 해도 될 듯 하다 -_-a
-- 어차피 30분 전 로그를 norecovery로 복구 하니까.. 하지만 후다닥 작업 실행 해야 된다는거~
-- 로그 파일 복구 with norecovery
-- 현재 시간의 30분전 로그만 복구
-- 이 후는 작업에 걸린 일정대로 자동으로 수행
-- 현재 시간 [10:31]
-- 복구된 로그 파일 10:00 꺼
restore log trashcan
from disk='c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\pubs\pubs_tlog_200705041000.TRN'
with norecovery

-- 새 작업을 생성하고 아래의 스크립트를 삽입해서 5분 간격으로 일정을 걸어 둔다.
-- 30분전 트랜잭션 파일을 열어서 계속 복구를 한다.(원본 DB와 30분 간격 유지)
-- !! 위의 로그 복구를 실행하고 5분이 지나기 전에 작업을 걸어 두어야 LSN 에러가 나지 않는다 !!
-- 현재 시간 [10:32]
-- 10:35분이 되면 작업이 실행 될 것이다.
declare @filename varchar(100)
set @filename = 'c:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\pubs\pubs_tlog_'
 + convert(CHAR(8),getdate(),112)
 + replace((substring(convert(CHAR(19),dateadd(mi,-30,getdate()),120),12,6)),':','')
 + '.TRN'
restore log trashcan from disk=@filename
with norecovery

-- 10:35분이 되면 위의 쿼리가 실행이 되고 10:05분에 백업된 로그가 복구가 될 것이다.
-- trashcan 디비는 항상 로드중(회색)으로 표기되어 있다.


 

반응형

댓글