♣ Tech & Biz Salon/Tech

SqlServer 백업 / 복제 (DB Copy 방식) 정리

TasteGod 2012. 12. 11. 15:26


현재 데이터가 입력되고 있는 테스트 db가 있다. 이 db의 데이터가 운영 db에 (운영db는 아직 생성안됨) 카피되어야 한다.

1) 데이터 입력기간중 운영db 세팅을 할 것이므로
    이때는 테스트 db 백업한거를 바탕으로 운영 db를 생성한다.

2) 테스트 db에 데이터 다 쌓은후 운영 db에 다시 넣어줘야 하는데
   이때는 테스트 db 내용 그대로 운영 db에 ( 운영 db에 입력된 데이터 무시 ) 복사해줄 예정이다.


상기 1) 2) 작업 시뮬레이션을 위해 일단 내 로컬을 운영db라 생각하고 테스트를 진행해보았다.

< 환경은 SqlServer 2008 R2 >


백업



  * 복사전용 백업 : "2005 버젼부터 지원, 다른 백업과 달리 복원 체인에 영향을 주지 않는다. 즉 기존 차등 백업이나 트랜잭션 로그 백업순서에 영향을 미치지 않는다. 이 방법은 현재 db를 테스트 목적으로 다른곳으로 옮기고자 할때 유용하게 사용할수 있다" (책 - SQLServer 운영과 튜닝)  --> 즉 정말 문제시 복구를 위한 백업이 아니라, 카피한다던가 하는 목적일때 요 옵션을 쓰면 되겠군

  * 백업세트 만료 기한 : 

     요게 뭔지는 이 글 최하단의 참고정보쪽을 보세요~


복원

* 복원할때 아예 없던 db를 백업본을 통해 생성을 할수도 있다. 
  이때는 이름짓고 싶은 db명을 써주면 된다. ( 정말 그럴까?;; 난 기존 db명 그대로 만들었는데 별 문제는 없었음 )

* 이미 db는 있는 상태에서 다시 카피할때에는 이미 있는 db에 세션이 붙어있을땐 위의 메시지를 볼 수 있다.

  이 경우에는 이렇게 대처한다.

  - exec sp_who

  -  kill 58   (58은 죽이고 싶은 spid 의 예시값)


* 복원된 db를 보라. 어라? 사용권한에 pssuser 사용자가 그대로 생겨버렸네?? 
   그렇다. db 카피때 그대로 따라온다. 

  현 db에는 pssuser 이미 있건 없건 이건 아래 두 캡쳐화면 같은 걸 초래한다.


  암튼... 일단 pssuser라는 login 이 없다면 일단 만들도록 한다.

  ( 참고로 이 과정에서 백업과 복제쪽의 pssuser 패스워드가 달라도 문제가 생길수는 있는거 같다. 난 동일하므로 문제는 없었다. 그런 문제가 있거나 내용이 궁금하면 참고 : http://www.cjstory.net/?p=64 )

  이후 pssuser로 로긴해봤자  pssdb 의 내용을 보지 못할것이다.

  해당 login 우클릭해서 pssdb 에 매핑하려하면 바로 아래와 같은 창이 나온다. 

  메시지 : 현재 데이터베이스에 사용자, 그룹 또는 역할 'pssuser'이(가) 이미 있습니다. (.Net SqlClient Data Provider)

  하나 더 밑의 창은 언제 나온것인지 기억이 안남.

이 깔끔하지 않은 sqlserver의 애매한 구조가 맘에 안드는데 어쨌든 문제는 해결해야 한다. 방법은?



login 'pssuser' 와  db 사용자 'pssuser' 의 끊어진 상태를 연결해주어야 한다고 한다.

그런 끊어진 관계가 뭐가 있는지는 아래 명령어로 확인하라는데... 난 보이지 않았다. (나의 실수일수도 있다)

exec sp_change_users_login 'Report'



그리고 끊어진 것을 있는 것은 아래와 같이 하였다.

USE pssdb

GO

exec sp_change_users_login 'Update_One' , 'pssuser', 'pssuser'

go

use pssdb

go

alter user pssuser with login = pssuser

go


* 'Update_One' 이라는건 한건을 업데이트 한다는... 해당 sp의 파라미터 값이므로 그대로 쓰면 된다.


* 복제후 IDENTITY 컬럼의 최종값이 유지되는지 테스트 결과 성공함.


경력의 많은 기간동안 작업하는 내 PC / 놋북에서 운영db에 클라이언트 툴등을 통해 편하게 접속/이용할수 있었다 ( 같은 망 또는 VPN 등으로 ) 

허나 지금은 그렇지 않고 아예 방문을 해서 해야하기 때문에... 실제 수행시 시행착오를 최소화하기 위해 시뮬레이션을 자세히 밟고, 기록도 남겨본다.

회사에서 내가 쓸 노트북이 있으면 좋을텐데 그렇지도 못하여... 서버 세팅 방문때 다른 사람 쓰는걸 빌려가야 하는데... 훔... 거참 곤란, 귀찮을듯... 일정 잡는거 자체부터 그렇겠네....




※ 관련하여 참고할만한 정보

기존 내 게시물 : SQLServer2008 - 설치, Create User, DB 등 초기세팅

현재 데이터베이스에 사용자 그룹 또는 역할 'test' 이미 있습니다 

http://blog.naver.com/saint7710/10149071782 )

http://support.microsoft.com/kb/314546/ko

백업 세트에 기존 'xxxxx' 데이터베이스가 아닌 데이터베이스의 백업이 있습니다
( http://blog.naver.com/mindkhj/100110099519 )

http://www.cjstory.net/?p=64

http://support.microsoft.com/kb/274188  : 비밀번호 변경에 대한 얘기도 있음


백업세트 만료기한 관련

  - http://bloglee.egloos.com/4750912

  - http://msdn.microsoft.com/ko-kr/library/ms188697.aspx


책 : SQLServer 운영과 튜닝