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

데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 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
9171 날짜를 기준으로 사전과 사후 나누기... [2] DOOLLY 2016.02.15 2141
9170 태스크의 스크립트 생성을 SQL문이나 에이전트로 실행할 수 없을까요? [1] sincie 2016.02.15 2169
9169 정수 올림에 관해 질문입니다. [3] leesoek 2016.02.11 2449
9168 쿼리에서 특정시간을 기점으로 결과값을 다르게 받는게 가능할까요? [4] 고구망 2016.02.11 2370
9167 조회조건이 포함된 선입선출 형태 질문~ [3] 정민채 2016.02.11 2538
9166 group by 를 할때.. case 로... [2] DOOLLY 2016.02.11 2206
9165 오라클 쿼리가 안되요 ㅠㅠ [1] 올해는2016 2016.02.09 2602
9164 SQL Server Agent가 구동이 안되서 크라우저2세 2016.02.08 2369
9163 MSSQL 2014 버전 DB를 2008 마이그레이션 방법 [2] 마찡가 2016.02.05 2577
9162 날짜가 같은 필드에 특정 카테고리 번호를 순서대로 붙이는 쿼리 질문좀 드립니다. [3] 다자녀아빠 2016.02.04 2327
9161 데이터 50건뽑기...조건이 좀 애매합니다..ㅠㅠ [9] SQL왕왕초보 2016.02.04 2599
9160 Oracle 쿼리 문의사항 [4] 손원일 2016.02.04 2820
9159 닷넷 윈도우 프로그램 개발 시 db 보안 [2] 청소하자 2016.02.04 2388
9158 SQL 서버 운용관련 질문 [2] HSQL 2016.02.04 2174
» 다른이름 DB 로 시점 복구(STOPAT) 문의 드립니다. [2] 구로동라이더 2016.02.04 3849
9156 서버이전후 백업시간 증가 [3] 류종근 2016.02.04 2616
9155 날짜검색 쿼리 문의드려요 [2] Sisylian 2016.02.03 2871
9154 join 문을 처음 해보는데 잘안됩니다.. [3] 슈토파이터 2016.02.03 2249
9153 데이타에서 IN 사용하기..? [6] 문상연 2016.02.02 2266
9152 JOIN할 테이블을 SELECT문으로 설정할 순 없을까요 [7] sincie 2016.02.02 2573





XE Login