안녕하세요

SQL Server 운영과 튜닝으로 테스트 중에 궁금한 점이 있어 질문드립니다.

우선, 감사드리며, 시작 합니다.

 

목적

  : 다른 DB 이름으로 시점복구(STOPAT)

   -- 아무래도, 운영중에 테이블이나 데이타가 유실시, 해당 서버에서 다름 DB 이름으로 복구 하고

   -- 테이블(데이타)만 복구 하는 Need 가 예상되어 테스트 수행

 

[이하 테스트 Script ]

-- 가. 테스트 백업

-- DROP DATABASE SQLTAG2
USE master
GO
IF EXISTS ( SELECT * FROM SYS.DATABASES WHERE NAME =N'SQLTAG' )
DROP DATABASE SQLTAG
GO

IF EXISTS ( SELECT * FROM SYS.DATABASES WHERE NAME =N'SQLTAG2' )
DROP DATABASE SQLTAG2
GO


CREATE DATABASE SQLTAG ;
GO

USE SQLTAG
GO

CREATE TABLE T1 ( PK INT IDENTITY PRIMARY KEY , NAME VARCHAR(20) )
GO

INSERT T1 VALUES ( 'FULL')
GO

BACKUP DATABASE [SQLTAG] TO DISK='D:\SQL\BACKUP\SQLTAG_FULL.BAK'
GO

INSERT T1 VALUES ('DIFF 1')
GO

BACKUP DATABASE [SQLTAG] TO DISK='D:\SQL\BACKUP\SQLTAG_DIFF_1.BAK'
GO

 


INSERT T1 VALUES ('LOG 1')
GO

BACKUP LOG [SQLTAG] TO DISK='D:\SQL\BACKUP\SQLTAG_LOG_1.TRN'
GO

INSERT T1 VALUES ('LOG 2');
GO

BACKUP LOG [SQLTAG] TO DISK='D:\SQL\BACKUP\SQLTAG_LOG_2.TRN'
GO


SELECT * FROM T1
GO

SELECT GETDATE()
GO
-- 2016-02-04 10:08:22.043


DELETE FROM T1
GO

USE MASTER
GO
-- 로그꼬리 백업 이 아닌 일반 Transaction Log 백업 수행
BACKUP LOG [SQLTAG] TO DISK='D:\SQL\BACKUP\SQLTAG_LOG_3.TRN'
GO

 

나. 복구 시도


USE MASTER
GO

-- 백업 파일 목록 확인
RESTORE FILELISTONLY
FROM DISK='D:\SQL\BACKUP\SQLTAG_FULL.BAK'
GO

-- 현재 SQLTAG2 라는 DB 는 존재하지 않음  --> 아래 수행 결과 SQLTAG2(복원 중)으로 생성됨
RESTORE DATABASE [SQLTAG2]
FROM DISK ='D:\SQL\BACKUP\SQLTAG_FULL.BAK'
WITH REPLACE, NORECOVERY,  -- 한번에 복구만 할 경우는 WITH RECOVERY, OPTION 사용 하면 끝
MOVE 'SQLTAG' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SQLTAG2.mdf',
MOVE 'SQLTAG_log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SQLTAG2_log.ldf'
GO

 

-- 이후 Transcacion Log 백업 반영 시도

USE MASTER
GO

-- 백업 파일 목록 확인
RESTORE FILELISTONLY
FROM DISK='D:\SQL\BACKUP\SQLTAG_FULL.BAK'
GO

-- 현재 SQLTAG2 라는 DB 는 존재하지 않음  --> 아래 수행 결과 SQLTAG2(복원 중)으로 생성됨
RESTORE DATABASE [SQLTAG2]
FROM DISK ='D:\SQL\BACKUP\SQLTAG_FULL.BAK'
WITH REPLACE, NORECOVERY,  -- 한번에 복구만 할 경우는 WITH RECOVERY, OPTION 사용 하면 끝
MOVE 'SQLTAG' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SQLTAG2.mdf',
MOVE 'SQLTAG_log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SQLTAG2_log.ldf'
GO

-- SQLTAG2 에 TRANSACTION LOG 적용
-- 2번째 차등 백업 복원
-- 백업 파일 목록 확인
RESTORE FILELISTONLY
FROM DISK='D:\SQL\BACKUP\SQLTAG_DIFF_1.BAK'
GO

 

RESTORE DATABASE [SQLTAG2]
FROM DISK ='D:\SQL\BACKUP\SQLTAG_DIFF_1.BAK'
WITH REPLACE, NORECOVERY,
MOVE 'SQLTAG' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SQLTAG2.mdf',
MOVE 'SQLTAG_log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SQLTAG2_log.ldf'
GO

 

-- 트랜잭션1 복원
RESTORE LOG [SQLTAG2]
FROM DISK ='D:\SQL\BACKUP\SQLTAG_LOG_1.TRN'
WITH REPLACE, NORECOVERY,
MOVE 'SQLTAG' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SQLTAG2.mdf',
MOVE 'SQLTAG_log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SQLTAG2_log.ldf'
GO


-- 트랜잭션2 복원
RESTORE LOG [SQLTAG2]
FROM DISK ='D:\SQL\BACKUP\SQLTAG_LOG_2.TRN'
WITH REPLACE, NORECOVERY,
MOVE 'SQLTAG' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SQLTAG2.mdf',
MOVE 'SQLTAG_log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SQLTAG2_log.ldf'
GO


-- 트랜잭션3 복원 (꼬리 백업이 아닌 일발 트랜잭션 로그 백업 )
-- 백업 파일 목록 확인
RESTORE FILELISTONLY
FROM DISK='D:\SQL\BACKUP\SQLTAG_LOG_3.TRN'
GO

 

RESTORE LOG [SQLTAG2]
FROM DISK ='D:\SQL\BACKUP\SQLTAG_LOG_3.TRN'
WITH REPLACE,STOPAT ='2016-02-04 10:08:22.043', NORECOVERY,
MOVE 'SQLTAG' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SQLTAG2.mdf',
MOVE 'SQLTAG_log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SQLTAG2_log.ldf'
GO

-- 에러 코드
메시지 3154, 수준 16, 상태 4, 줄 1
백업 세트에 기존 'SQLTAG2' 데이터베이스가 아닌 데이터베이스의 백업이 있습니다.
메시지 3013, 수준 16, 상태 1, 줄 1
RESTORE LOG이(가) 비정상적으로 종료됩니다.

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 41812
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 22519
9163 MSSQL 2014 버전 DB를 2008 마이그레이션 방법 [2] 마찡가 2016.02.05 2644
9162 날짜가 같은 필드에 특정 카테고리 번호를 순서대로 붙이는 쿼리 질문좀 드립니다. [3] 다자녀아빠 2016.02.04 2378
9161 데이터 50건뽑기...조건이 좀 애매합니다..ㅠㅠ [9] SQL왕왕초보 2016.02.04 2652
9160 Oracle 쿼리 문의사항 [4] 손원일 2016.02.04 2878
9159 닷넷 윈도우 프로그램 개발 시 db 보안 [2] 청소하자 2016.02.04 2522
9158 SQL 서버 운용관련 질문 [2] HSQL 2016.02.04 2235
» 다른이름 DB 로 시점 복구(STOPAT) 문의 드립니다. [2] 구로동라이더 2016.02.04 3968
9156 서버이전후 백업시간 증가 [3] 류종근 2016.02.04 2705
9155 날짜검색 쿼리 문의드려요 [2] Sisylian 2016.02.03 2927
9154 join 문을 처음 해보는데 잘안됩니다.. [3] 슈토파이터 2016.02.03 2308
9153 데이타에서 IN 사용하기..? [6] 문상연 2016.02.02 2321
9152 JOIN할 테이블을 SELECT문으로 설정할 순 없을까요 [7] sincie 2016.02.02 2644
9151 트랜잭션 로그 용량 오류 문의 [7] 솔총이 2016.02.01 3372
9150 mssql 질문 좀 드릴께요. 일정한 수의 행을 반복하면서 열로 변경하는 방법이 있을까요? [2] 시가넘버쓰리 2016.01.30 2881
9149 월별 ,년별 통계쿼리 질문 [4] 다자녀아빠 2016.01.29 5755
9148 이런 시스템에 트리거 ? CDC (Change Data Capture)? 어떤게..좋을까요? [1] 둥이가이 2016.01.29 3299
9147 hashbytes() 질문 [2] 형님 2016.01.29 3160
9146 MS SQL FAIL OVER시 쿼리에 대해서... [1] 그늘 2016.01.29 3348
9145 MySQL -> MS-SQL로 데이터베이스 마이그레이션 궁금증입니다. [2] Gusto 2016.01.28 4116
9144 다국어(NVARCHAR) 에 대한 CHECKINDEX 문의 드립니다 [4] 구로동라이더 2016.01.28 3164





XE Login