데이터베이스 개발자 질문과 답변 게시판

데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.

안녕하세요

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
9159 닷넷 윈도우 프로그램 개발 시 db 보안 [2] 청소하자 2016.02.04 2377
9158 SQL 서버 운용관련 질문 [2] HSQL 2016.02.04 2173
» 다른이름 DB 로 시점 복구(STOPAT) 문의 드립니다. [2] 구로동라이더 2016.02.04 3847
9156 서버이전후 백업시간 증가 [3] 류종근 2016.02.04 2614
9155 날짜검색 쿼리 문의드려요 [2] Sisylian 2016.02.03 2870
9154 join 문을 처음 해보는데 잘안됩니다.. [3] 슈토파이터 2016.02.03 2248
9153 데이타에서 IN 사용하기..? [6] 문상연 2016.02.02 2266
9152 JOIN할 테이블을 SELECT문으로 설정할 순 없을까요 [7] sincie 2016.02.02 2573
9151 트랜잭션 로그 용량 오류 문의 [7] 솔총이 2016.02.01 3211
9150 mssql 질문 좀 드릴께요. 일정한 수의 행을 반복하면서 열로 변경하는 방법이 있을까요? [2] 시가넘버쓰리 2016.01.30 2732
9149 월별 ,년별 통계쿼리 질문 [4] 다자녀아빠 2016.01.29 2946
9148 이런 시스템에 트리거 ? CDC (Change Data Capture)? 어떤게..좋을까요? [1] 둥이가이 2016.01.29 3216
9147 hashbytes() 질문 [2] 형님 2016.01.29 3084
9146 MS SQL FAIL OVER시 쿼리에 대해서... [1] 그늘 2016.01.29 3283
9145 MySQL -> MS-SQL로 데이터베이스 마이그레이션 궁금증입니다. [2] Gusto 2016.01.28 3911
9144 다국어(NVARCHAR) 에 대한 CHECKINDEX 문의 드립니다 [4] 구로동라이더 2016.01.28 3087
9143 무조건 프로시저로 만드는게 최선인가요? [4] 문상연 2016.01.27 2430
9142 SQL2012 SSMS에서 리프레쉬 단축키(F5) 질문입니다. [1] sincie 2016.01.27 2263
9141 아래 쿼리를 더 줄일수 있는 방법이 있을까요? [3] 뇽이 2016.01.27 2216
9140 아래 쿼리 질문 추가 보충입니다. [2] 양재동살아요 2016.01.27 1940





XE Login