ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SqlServer 백업 / 복제 (DB Copy 방식) 정리
    ♣ Tech & Biz Salon/Tech 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 운영과 튜닝

Designed by Tistory.