시스템 데이터베이스 다시 작성

master, model, msdb 또는 resource 시스템 데이터베이스의 손상 문제를 수정하거나 기본 서버 수준 데이터 정렬을 변경하려면 시스템 데이터베이스를 다시 작성해야 합니다. 이 항목에서는 시스템 데이터베이스를 다시 작성하기 위한 단계별 지침을 제공합니다.

시스템 데이터베이스를 다시 작성하기 전에

master, model, msdb 및 tempdb 시스템 데이터베이스를 다시 작성하면 해당 데이터베이스가 삭제된 후 원래 위치에 다시 만들어집니다. REBUILD 문에 새로운 데이터 정렬이 지정되면 해당 데이터 정렬 설정을 사용하여 시스템 데이터베이스가 만들어집니다. 이러한 데이터베이스에 사용자들이 변경한 내용은 손실됩니다. 예를 들어 master 데이터베이스에 사용자 정의 개체가 있거나, msdb에 예약된 작업이 있거나 model 데이터베이스에서 기본 데이터베이스 설정을 변경했을 수 있습니다.

시스템 데이터베이스를 다시 작성하기 전에 다음 작업을 수행하면 시스템 데이터베이스를 현재 설정으로 복원할 수 있습니다.

  1. 서버 차원의 모든 구성 값을 기록합니다.

    SELECT * FROM sys.configurations;
    
  2. SQL Server 인스턴스와 현재 데이터 정렬에 적용된 모든 서비스 팩과 핫픽스를 기록합니다. 시스템 데이터베이스를 다시 작성한 후 이러한 업데이트를 다시 적용해야 합니다.

    SELECT
    SERVERPROPERTY('ProductVersion ') AS ProductVersion,
    SERVERPROPERTY('ProductLevel') AS ProductLevel,
    SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
    SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime,
    SERVERPROPERTY('Collation') AS Collation;
    
  3. 시스템 데이터베이스의 모든 데이터와 로그 파일의 현재 위치를 기록합니다. 시스템 데이터베이스를 다시 작성하면 모든 시스템 데이터베이스가 원래 위치에 설치됩니다. 시스템 데이터베이스 데이터나 로그 파일을 다른 위치로 이동한 경우 해당 파일을 다시 이동해야 합니다.

    SELECT name, physical_name AS current_file_location
    FROM sys.master_files
    WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
    
  4. master, model 및 msdb 데이터베이스의 현재 백업을 찾습니다.

  5. SQL Server 인스턴스가 복제 배포자로 구성된 경우 배포 데이터베이스의 현재 백업을 찾습니다.

  6. 시스템 데이터베이스를 다시 작성할 수 있는 권한이 있는지 확인합니다. 이 작업을 수행하려면 sysadmin 고정 서버 역할의 멤버여야 합니다. 자세한 내용은 서버 수준 역할을 참조하십시오.

  7. master, model, msdb 데이터와 로그 템플릿 파일의 복사본이 로컬 서버에 있는지 확인합니다. 템플릿 파일의 기본 위치는 C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn\Templates입니다. 이러한 파일은 다시 작성 프로세스 중에 사용되므로 성공적으로 설치를 수행하려면 반드시 있어야 합니다. 이러한 파일이 없으면 설치 시 복구 기능을 실행하거나 설치 미디어에서 해당 파일을 직접 복사하십시오. 설치 미디어에서 이러한 파일을 찾으려면 해당 플랫폼 디렉터리(x86, x64 또는 ia64)로 이동한 후 setup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL.X\MSSQL\Binn\Templates로 찾아 갑니다.

시스템 데이터베이스 다시 작성 절차

다음은 master, model, msdb 및 tempdb 시스템 데이터베이스를 다시 작성하는 절차입니다. 다시 작성할 시스템 데이터베이스를 지정할 수 없습니다. 클러스터형 인스턴스의 경우 액티브 노드에서 이 절차를 수행해야 하며, 절차를 수행하기 전에 해당 클러스터 응용 프로그램 그룹에 있는 SQL Server 리소스를 오프라인 상태로 설정해야 합니다.

resource 데이터베이스는 이 절차를 통해 다시 작성할 수 없습니다. 이 항목 뒷부분에 나오는 "리소스 데이터베이스 다시 작성 절차" 섹션을 참조하십시오.

SQL Server 인스턴스의 시스템 데이터베이스를 다시 작성하려면

  1. SQL Server 2008 설치 미디어를 디스크 드라이브에 넣거나, 명령 프롬프트에서 로컬 서버의 setup.exe 파일이 있는 디렉터리로 변경합니다. 서버의 기본 위치는 C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Release입니다.

  2. 명령 프롬프트 창에서 다음 명령을 입력합니다. 대괄호([])는 옵션 매개 변수를 나타내는 데 사용되며, 입력하지는 않습니다. Windows Vista 운영 체제에서 사용자 계정 컨트롤(UAC)을 사용할 경우 설치를 실행하려면 승격된 권한이 필요합니다. 명령 프롬프트에서 관리자 권한으로 실행합니다.

    Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [/ SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName]

    매개 변수 이름

    설명

    /QUIET 또는 /Q

    설치 프로그램이 사용자 인터페이스 없이 실행되도록 지정합니다.

    /ACTION=REBUILDDATABASE

    설치 시 시스템 데이터베이스를 다시 작성하도록 지정합니다.

    /INSTANCENAME=InstanceName

    SQL Server 인스턴스의 이름입니다. 기본 인스턴스의 경우 MSSQLSERVER를 입력합니다. 명명된 인스턴스의 경우 이름을 server_name\instance_name 형식으로 입력합니다. 

    /SQLSYSADMINACCOUNTS=accounts

    sysadmin 고정 서버 역할에 추가할 Windows 그룹이나 개별 계정을 지정합니다. 둘 이상의 계정을 지정할 경우 각 계정 이름을 공백으로 구분합니다. 예를 들면 BUILTIN\Administrators MyDomain\MyUser와 같이 입력합니다. 계정 이름 안에 공백이 포함된 계정을 지정하는 경우에는 계정을 따옴표로 묶어야 합니다. 예를 들면 "NT AUTHORITY\SYSTEM"을 입력합니다.

    [ /SAPWD=StrongPassword ]

    SQL Serversa 계정의 암호를 지정합니다. 해당 인스턴스에서 혼합 인증(SQL Server 및 Windows 인증) 모드를 사용할 경우 이 매개 변수가 필요합니다.. 

    보안 정보보안 정보
    sa 계정은 잘 알려진 SQL Server 계정이므로 악의적인 사용자의 공격 대상이 되는 경우가 많습니다. sa 로그인에 대해 강력한 암호를 사용하도록 합니다.

    Windows 인증 모드에 이 매개 변수를 지정하지 마십시오.

    [ /SQLCOLLATION=CollationName ]

    서버 수준 데이터 정렬을 새로 지정합니다. 이 매개 변수는 선택 사항입니다. 지정하지 않으면 서버의 현재 데이터 정렬이 사용됩니다.

    중요 정보중요
    서버 수준 데이터 정렬을 변경해도 기존 사용자 데이터베이스의 데이터 정렬은 변경되지 않습니다. 새로 만드는 모든 사용자 데이터베이스는 기본적으로 새로운 데이터 정렬을 사용하게 됩니다.

    자세한 내용은 서버 데이터 정렬 설정 및 변경을 참조하십시오.

  3. 시스템 데이터베이스를 다시 작성하는 작업이 완료되면 아무런 메시지 없이 명령 프롬프트로 돌아갑니다. Summary.txt 로그 파일을 검토하여 프로세스가 성공적으로 완료되었는지 확인합니다. 이 파일은 C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Logs에 있습니다.

다시 작성 후 수행할 작업

데이터베이스를 다시 작성한 후에는 다음과 같은 추가 작업을 수행해야 할 수 있습니다.

  • 최신 서비스 팩과 해당되는 모든 핫픽스를 적용합니다.

  • master, model 및 msdb 데이터베이스의 최근 전체 백업을 복원합니다. 자세한 내용은 시스템 데이터베이스 백업 및 복원에 대한 고려 사항을 참조하십시오.

    중요 정보중요

    서버 데이터 정렬을 변경했을 경우 시스템 데이터베이스를 복원하지 마십시오. 시스템 데이터베이스를 복원하면 새로운 데이터 정렬이 이전 데이터 정렬 설정으로 바뀝니다.

    백업을 사용할 수 없거나 복원된 백업이 최신 백업이 아닌 경우 누락된 항목을 다시 만듭니다. 예를 들어, 사용자 데이터베이스, 백업 장치, SQL Server 로그인, 끝점 등에 대한 모든 누락 항목을 다시 만듭니다. 항목을 다시 만드는 가장 좋은 방법은 해당 항목을 만들었던 원래 스크립트를 실행하는 것입니다. 

보안 정보보안 정보

스크립트에 보안을 설정해 무단으로 내용을 변경할 수 없도록 하는 것이 좋습니다.

  • SQL Server 인스턴스가 복제 배포자로 구성된 경우 배포 데이터베이스를 복원해야 합니다. 자세한 내용은 복제된 데이터베이스 백업 및 복원을 참조하십시오.

  • 시스템 데이터베이스를 앞에서 기록해 둔 위치로 이동합니다. 자세한 내용은 시스템 데이터베이스 이동을 참조하십시오.

  • 서버 차원의 구성 값이 앞에서 기록해 둔 값과 일치하는지 확인합니다.

리소스 데이터베이스 다시 작성 절차

다음은 resource 시스템 데이터베이스를 다시 작성하는 절차입니다. resource 데이터베이스를 다시 작성하면 모든 서비스 팩과 핫픽스가 손실되므로 다시 적용해야 합니다.

리소스 시스템 데이터베이스를 다시 작성하려면

  1. SQL Server 2008 배포 미디어에서 SQL Server 설치 프로그램을 실행합니다.

  2. 왼쪽의 탐색 영역에서 유지 관리를 클릭한 다음 복구를 클릭합니다.

  3. 시스템에 필수 구성 요소가 설치되어 있고 컴퓨터가 설치 유효성 검사 규칙을 통과하는지 확인하기 위해 설치 지원 규칙 및 파일 루틴이 실행됩니다. 계속하려면 확인 또는 설치를 클릭합니다.

  4. 인스턴스 선택 페이지에서 복구할 인스턴스를 선택한 후 다음을 클릭합니다.

  5. 작업이 유효한지 검사하는 복구 규칙이 실행됩니다. 계속하려면 다음을 클릭합니다.

  6. 복구 준비 페이지에서 복구를 클릭합니다. 완료 페이지에서 작업이 완료되었음을 알려 줍니다.

다시 작성 오류 문제 해결

구문 및 기타 런타임 오류는 명령 프롬프트 창에 표시됩니다. 설치 문에 다음과 같은 구문 오류가 없는지 확인합니다.

  • 각 매개 변수 이름 앞에 슬래시(/)가 있어야 합니다.

  • 매개 변수 이름과 매개 변수 값 사이에 등호(=)가 있어야 합니다.

  • 매개 변수 이름과 등호 사이에 공백이 없어야 합니다.

  • 구문에 지정되지 않은 쉼표(,)나 기타 문자가 없어야 합니다.

다시 작성 작업이 완료되면 SQL Server 로그를 검토하여 오류가 없는지 확인합니다. 로그의 기본 위치는 C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Logs입니다. 다시 작성 프로세스의 결과가 들어 있는 로그 파일을 찾으려면 명령 프롬프트에서 Logs 폴더로 이동한 후 findstr /s RebuildDatabase summary*.*를 입력합니다. 이렇게 검색하면 시스템 데이터베이스 다시 작성의 결과가 들어 있는 모든 로그 파일이 나타납니다. 로그 파일을 열고 검토하여 관련된 오류 메시지가 없는지 확인합니다.

참고 항목

개념

변경 내역

업데이트된 내용

절차를 수행하기 전에 해당 클러스터 응용 프로그램 그룹에 있는 SQL Server 리소스를 오프라인 상태로 설정해야 한다는 내용으로 클러스터 정보를 수정했습니다.

/SQLSYSADMINACCOUNTS 정의에서 이름에 공백이 포함될 때 계정 이름을 따옴표로 묶어야 한다는 요구 사항을 추가했습니다.