마스터 데이터베이스가 손상되어 인스턴스가 시작되지 않습니다. 옵션은 무엇입니까?


11

도움! 마스터 데이터베이스가 손상되어 SQL 인스턴스를 온라인으로 가져올 수 없습니다! 서버를 백업 할 수있는 옵션은 무엇입니까?

마스터 백업이 있지만 MSDN 페이지 "마스터 데이터베이스 복원" 에서 인스턴스를 단일 사용자 모드로 시작하라는 메시지가 표시됩니다.

(참고 :이 질문은 더 널리 적용 가능한 참조가되도록 SQL 버전에 대해서는 지정하지 않고 있습니다. DBA.SE에 대해서는 비슷한 질문이 있지만 서버를 시작할 수없는 것은 없습니다.)


(의견이나 다른 답변은 확실히 환영하지만 웹에서 찾을 수없는 몇 가지 측면을 포함하여 포괄적 인 답변을 제공하기 위해이 질문을했습니다.)
BradC

답변:


12

여기 내가 조사 할 몇 가지 방법이 있습니다. 이러한 작업을 모두 수행하지는 마십시오 (일부는 동일한 목적을 달성하기위한 다른 기술 임).

1. SQL 오류 로그를 직접 검사하십시오.

SQL 오류 로그가 포함 된 폴더를 직접 찾아보고 최신 ERRORLOG인스턴스를 메모장에 로드 하여 SQL 인스턴스가 시작되지 않는 이유에 대해 자세히 알아보십시오. 아마도 마스터 데이터베이스에 전혀 문제가 없다는 것을 알게 될 것입니다.

2. 단일 사용자 모드에서 인스턴스를 시작해보십시오

다음은 (단일 사용자 모드) 및 (최소 구성 모드)를 포함하여 SQL Server에 대한 전체 시작 옵션 목록입니다 . 문제가있는 경우 다른 옵션을 사용하여 마스터 데이터베이스의 경로를 지정할 수 있습니다.-m-f

인스턴스를 시작할 수있는 경우 마스터 데이터베이스를 복원하기 위해 링크 한 MSDN 기사 의 단계 또는 Thomas LaRock의 자세한 설명을 따르십시오 .

다른 응용 프로그램이 항상 단일 사용자 연결을 확보 한 경우 먼저 SQL 에이전트를 비활성화하여 시작되지 않도록하십시오. 둘째, 매개 변수를 사용하여 응용 프로그램 이름을 지정하려면 이 질문에 대한 아이디어를 참조하십시오-m"Application Name" .

3. master다른 인스턴스로 복원 하고 파일 복사

나는 이 문서화되지 않은 기술에 대한 다른 언급 을 발견 했지만 지난 주말에 성공적으로 사용 했으므로 시도해 볼 가치가 있습니다.

단일 사용자 모드에서 인스턴스를 시작할 수 있다면 하지만 다른 SQL 인스턴스가 동일한 버전 및 빌드를 실행을 , 다른 인스턴스로 죽은 서버에서 마지막으로 성공한 마스터 데이터베이스 백업을 복원하려고 :

  • 물론 다른 이름으로 복원 ( master_please_god_let_this_work) WITH MOVE하므로 master양호한 서버에서 덮어 쓰지 않습니다.
  • 복원 WITH NORECOVERY. 이것이 필요하다는 것을 확신하지 못했지만 다른 서버가 복원 된 마스터에서 아무것도 변경하지 않을 것이라는 것을 알게되었습니다.
  • 오프라인으로 설정하십시오. ALTER DATABASE [master_please_god_let_this_work] SET OFFLINE
  • 양호한 서버에서 죽은 서버로 복원 된 MDF 및 LDF 파일을 복사하십시오.
  • 잘못된 마스터 파일을 복원 된 버전으로 바꾸려면 필요에 따라 master.mdfmastlog.ldf파일 이름 을 바꾸십시오.
  • 손가락을 교차시키고 인스턴스를 시작하십시오
  • 선택 사항 : 복구 된 서버에서 마스터를 새로 복원하십시오. 우리가 변경하지 않도록 매우 조심했기 때문에 이것이 필요한지 확실하지 않습니다 master.

4. 시스템 데이터베이스를 재 구축

다른 인스턴스가 동일한 버전을 실행하거나이없는 경우는 # 3에 나와있는 문서화되지 않은 절차를 사용하여 편안하지 않은 경우, 또는 당신의 백업이없는 경우 master( 왜? 백업이없는 ) 원래 설치 디스크에서 SQL 시스템 데이터베이스를 다시 빌드 할 수 있습니다 .

Setup.exe /ACTION=REBUILDDATABASE /...

이 작업이 완료되면 이전에 연결된 단계에 master따라 마지막 백업에서 복원 할 수 있습니다 . 또한 msdb모든 작업, 작업 일정 및 작업 기록을 유지하려면 최신 백업을 복원해야합니다 .

5. 모든 USER 데이터베이스를 새로운 (또는 기존) SQL 인스턴스로 복원

다른 기존 인스턴스 (적절한 SQL 버전, 충분한 디스크 공간)가 이미 실행중인 경우 필요할 경우를 대비하여 위의 다른 문제 해결 단계를 수행하는 동안 최신 백업에서 데이터베이스 복원을 시작합니다.

새 (또는 재설치 된) 인스턴스가 동일한 디스크에 액세스 할 수있는 경우 새 데이터베이스로 간단히 연결하는 것이 훨씬 빠릅니다.

CREATE DATABASE foo 
ON (FILENAME = 'D:\data\foo.mdf'),
   (FILENAME = 'D:\data\foo_log.ldf')
FOR ATTACH;

6. 변경 사항을 다시 실행하십시오. master

master위의 기술 중 하나를 통해 성공적으로 복원 한 후에는 방금 복원 한 백업 후에 변경된 내용이 있으면 손실 된 내용을 조사해야합니다.

  • 보안 변경
  • 새로운 데이터베이스
  • 서버 전체 설정

이를 찾는 마법의 방법은 없습니다. 이러한 변경 사항이있을 경우 회사의 문서 추적으로 돌아 가야합니다.


1
좋은 포스트. +1. 마스터를 손상시키고 다른 서버에서 백업을 복원 한 다음 파일을 이전 서버로 복사하는 테스트를 수행했습니다. 아무런 문제없이 작동했습니다. 그런데 마스터가 손상된 동안 오류 3411이 발생했습니다.
Racer SQL

그 기술을 검증 해 주셔서 감사합니다. 필자의 경우 실제 오류는 없었지만 마스터 DB는 가능한 클러스터 서비스 시간 초과 설정을 훨씬 초과하여 복구하는 데 몇 시간이 걸렸습니다.
BradC

1
@RafaelPiccinelli 마스터는 서버의 모든 정보 (보안, 기타 데이터베이스 등)에 대한 "메타 데이터"를 유지하므로 의미가 있습니다. 내 포인트 # 5와 # 6을보십시오. 해당 DB를 다시 연결하고 모든 보안을 다시 설정해야합니다. BTW, 실험실 환경에서이 모든 작업을 수행하시기 바랍니다.
BradC

네, 그게 시험입니다. 오류가 발생했지만 스토리지에 권한이있는 것 같습니다. 다시, 좋은 소식. 이 마지막 코멘트를 삭제하겠습니다.
Racer SQL

2

방금 마친 가능한 문제 및 솔루션을 추가하고 싶었습니다. 누적 업데이트 (SQL2016 CU12)에 실패한 상황과 이벤트 뷰어 및 errlog에 "마스터 데이터베이스를 복구 할 수 없습니다. SQL Server는 전체 백업에서 마스터를 복원, 복구 또는 재 구축합니다. "그러나 CU 실행 파일을 다시 실행하면 업그레이드 상태가"불완전 설치됨 "으로 감지되어 간단하게 실행할 수있었습니다. 다시 업데이트하면 성공적으로 완료되고 마스터 데이터베이스와 다른 모든 데이터베이스가 아무런 문제없이 열립니다.


목록에 좋은 추가; 포함 해 주셔서 감사합니다.
BradC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.