본문 바로가기
컴퓨터관련/MS-SQL

[MS-SQL]DB 복원하기

by 빛과 어둠사이 2019. 6. 14.
728x90
반응형
SMALL

얼마 전에는 MS-SQL DB를 백업하는 방법에 대해서 정리를 해 보았습니다.

Backup이 있으면 복원도 있어야겠죠?

그래서 이번에는 복원하는 방법에 대해서 정리를 해보고자 합니다.



1. 서버 상태 확인하기

복원을 할 때도 백업할 때와 마찬가지로

서버의 여러 상태에 대해서 알아야 합니다.

확인하는 방법은 다음과 같습니다.


sp_helpdb DB명

위 쿼리에서 DB명이라고 적힌 곳에 DB이름을 적어주시면 되십니다.

그러면 아래처럼 결과가 나옵니다.



상세 설명은 DB 백업하기에 있는 것과 동일합니다.



2. 기존에 계정, 데이터베이스 삭제하기


기존에 DB가 있다면 삭제를 해 주어야 합니다.

쿼리는 다음과 같습니다.

DROP DATABASE DB

위처럼 하면 됩니다

다만, 기존에 연결이 되어 있는 것이 있다면,

해당 접속이 끊어질 때까지 삭제가 되지 않습니다.

이럴 때는 GUI 환겨엥서 해줄 수 있습니다.


삭제하려는 DB에서 마우스 우클릭 - 삭제를 선택합니다.



기존 연결 닫기 체크 - 확인



이렇게 하면,

기존에 연결이 되어 있는 것이 있다 하더라도

삭제가 됩니다.



3. 복원 전 정보 확인하기

아래 쿼리를 돌려 파일을 정보를 확인합니다.


RESTORE FILELISTONLY FROM DISK = 'D:\Backup\백업파일명.확장';


위처럼 돌리면 아래처럼 결과가 나옵니다.


LogicalName : 로지컬네임

PhysicalName : 데이터 파일 저장 경로(서버의 로컬 경로)

Type : 데이터 타입(D : 데이터, L : 로그)



4. 복원하기

다음과 같은 쿼리를 돌리시면 되십니다.

RESTORE DATABASE 데이터베이스명
FROM DISK = '백업파일경로 및 파일명'
WITH MOVE '로지컬네임' TO '데이터파일 경로'
, MOVE '로지컬네임' TO '데이터파일 경로';

WITH MOVE는 안해도 무방합니다.

데이터 파일의 경로를 바꾸기 위해 사용하는 것이며,

생략을 할 경우에는 3번에서 확인된 경로로 생성됩니다.

※ 이 때, 로지컬네임은 변경이 불가합니다.


5. 로지컬네임 변경

로지컬네임을 변경하고자 할 때는

새로 쿼리를 돌려야지만 합니다.

쿼리는 다음과 같습니다.

USE 데이터베이스명
GO
ALTER DATABASE 데이터베이스명(카탈로그명)S MODIFY FILE (NAME=N'로지컬네임', NEWNAME=N'새로운 로지컬네임')
GO



6. 호환성 수준 변경

백업을 할 때나 위 1번에서도 적은 것과 같이

호환성 수준이 낮으면 쓸 수 있는 기능이 제한적일 수 있습니다.

그렇기 때문에 현재 버젼이 더 높다면 호환성 수준을 높이는 것이 좋습니다.


쿼리는 다음과 같습니다.

Alter Database 데이터베이스명 SET COMPATIBILITY_LEVEL = 호환성수준번호



7. 통계 및 인덱스 재생성

인덱스 및 통계를 재생성해주어야 합니다.

간단한 명령어를 통해 재생성 할 수 있습니다.

SP_UPDATESTATS


8. 사용현황 갱신

사용현황을 갱신해주어야 합니다.

쿼리는 다음과 같습니다.


dbcc updateusage(0) with no_infomsgs


9. 페이지 갱신

어느 경로, 페이지, 섹터에 데이터가 들어가 있는지 정리가 되어 있습니다.

하지만 복원을 하게 되면 복원한 서버 기준으로는 정보가 없습니다.

그렇기 때문에 새로 갱신을 해주는 것이 좋습니다.

물론, 갱신을 안해도 찾아보고 없으면 자동갱신을 하기도 합니다.

다만, 이 때는 찾아보고 갱신을 하기 때문에 속도 저하가 발생할 수 있습니다.

그렇기 때문에 먼저 갱신해주는 것을 추천하고 있습니다.


쿼리는 다음과 같습니다.

Alter Database DB명 SET PAGE_VERIFY checksum



10 유저 정보 확인

서버 - 보안 로그인 : 로그인 계정

서버 - 데이터베이스 -DB명 - 보안 - 사용자 : 내부 사용자 정보


위처럼 서로 두개는 다른 정보를 가지고 있습니다.

겉보기에는 비슷해보이지만 내용은 다릅니다.



SQL을 날리거나 할 때는내부 사용자정보를 사용합니다.

이 때, 바이너리값을 가지고 사용하는데

다르다면 조치를 해 주어야 합니다.


10-1. 서로 다른 정보를 가진 유저 정보 확인하기

쿼리는 다음과 같습니다.

EXEC sp_change_users_login 'Report'; 

위처럼 돌리게 되면, 한쪽이 없거나 다를경우에 나오게 됩니다.

결과는 다음과 같이 나옵니다.




uSERnAME값은 내부 사용자로 있는데,

로그인 계정으로는 없거나 할 경우 나옵니다.

이 때 추가를 먼저 해주어야 합니다.



10-2. 데이터 맞추기

데이터 맞추는 쿼리는 다음과 같습니다.

EXEC sp_change_users_login 'Update_One', '내부사용자아이디', '로그인아이디';  


위처럼 하면, 자동으로 생성해서 맞춰줍니다.

그리고 10-1번의 쿼리를 다시 돌리면

안나오는 것을 확인할 수 있습니다.




이렇게 하면 DB 복원이 완료가 된 것입니다.

백업은 나름 간단했는데

복원은 뭔가 많이 복잡하네요.

그래도 이렇게 복원을 해주시면 되실 것 같습니다.




이상으로 SQL Server에서 DB 복원하는 방법이였습니다~


728x90
반응형
LIST

'컴퓨터관련 > MS-SQL' 카테고리의 다른 글

[MS-SQL]ROWCOUNT와 TOP  (0) 2019.06.21
[MS-SQL]커서 설명 및 사용방  (0) 2019.06.20
[MS-SQL]DB 백업하기  (0) 2019.06.12
[MS-SQL]테이블 리스트 안보일 때  (0) 2019.06.04
[MS-SQL]Active/Standby 설치 시 주의사항  (0) 2019.05.20