시스템 데이터베이스 다시 빌드

적용 대상:SQL Server

마스터, 모델, msdb 또는 리소스 시스템 데이터베이스의 손상 문제를 해결하거나 기본 서버 수준 데이터 정렬을 수정하려면 시스템 데이터베이스를 다시 작성해야 합니다. 이 문서에서는 SQL Server에서 시스템 데이터베이스를 다시 빌드하는 단계별 지침을 제공합니다.

제한 사항

master, modelmsdbtempdb 시스템 데이터베이스를 다시 빌드하면 데이터베이스가 삭제되고 원래 위치에서 다시 만들어집니다. 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. modelmsdb 데이터베이스의 현재 백업을 master찾습니다.

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

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

  7. , modelmsdb 데이터 및 로그 템플릿 파일의 master복사본이 로컬 서버에 있는지 확인합니다. 템플릿 파일의 기본 위치는 C:\Program Files\Microsoft SQL Server\MSSQL<xx>.MSSQLSERVER\MSSQL\Binn\Templates 설치한 버전입니다 <xx> . 이러한 파일은 다시 작성 프로세스 중에 사용되므로 성공적으로 설치를 수행하려면 반드시 있어야 합니다. 누락된 경우 설치 프로그램의 복구 기능을 실행하거나 설치 미디어에서 파일을 수동으로 복사합니다. 설치 미디어에서 파일을 찾으려면 적절한 플랫폼 디렉터리(x86 또는 x64)로 이동 setup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL.X\MSSQL\Binn\Templates한 다음.

시스템 데이터베이스 다시 빌드

다음 절차에서는 , modelmsdbtempdb 시스템 데이터베이스를 다시 master빌드합니다. 다시 작성할 시스템 데이터베이스는 지정할 수 없습니다. 클러스터형 인스턴스의 경우 이 프로시저는 활성 노드에서 수행해야 하며, 프로시저를 수행하기 전에 해당 클러스터 애플리케이션 그룹의 SQL Server 리소스를 오프라인으로 전환해야 합니다.

이 절차는 데이터베이스를 다시 빌드 resource 하지 않습니다. 이 문서의 뒷부분에 있는 리소스 시스템 데이터베이스 다시 빌드 섹션을 참조하세요.

SQL Server 인스턴스에 대한 시스템 데이터베이스 다시 작성

  1. 디스크 드라이브에 SQL Server 설치 미디어를 삽입하거나 명령 프롬프트에서 디렉터리를 로컬 서버의 setup.exe 파일 위치로 변경합니다. SQL Server 2022(16.x)의 경우 서버의 기본 위치는 C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\SQLServer2022.

  2. 명령 프롬프트 창에서 다음 명령을 입력합니다. 대괄호는 선택적 매개 변수를 나타내는 데 사용됩니다. 대괄호를 입력하지 마세요. UAC(사용자 계정 컨트롤)가 사용하도록 설정된 Windows 운영 체제를 사용하는 경우 설치 프로그램을 실행하려면 상승된 권한이 필요합니다. 명령 프롬프트를 관리자 권한으로 실행해야 합니다.

    setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName ]
    
    매개 변수 이름 설명
    /QUIET 또는 /Q 사용자 인터페이스 없이 설치 프로그램을 실행되도록 지정합니다.
    /ACTION=REBUILDDATABASE 설치 프로그램에서 시스템 데이터베이스를 다시 만들게 지정합니다.
    /INSTANCENAME=InstanceName SQL Server 인스턴스의 이름입니다. 기본 인스턴스의 경우 MSSQLSERVER를 입력합니다.
    /SQLSYSADMINACCOUNTS=accounts sysadmin 고정 서버 역할에 추가할 Windows 그룹이나 개별 계정을 지정합니다. 둘 이상의 계정을 지정할 때 빈 공간을 사용하여 계정을 구분합니다. 예를 들어 BUILTIN\Administrators MyDomain\MyUser를 입력 합니다. 계정 이름 내에 빈 공간이 포함된 계정을 지정하는 경우 계정을 큰따옴표로 묶습니다. 예를 들면 NT AUTHORITY\SYSTEM과 같이 입력합니다.
    [ /SAPWD=StrongPassword ] SQL Server sa 계정의 암호를 지정합니다. 인스턴스에서 혼합 인증(SQL Server 및 Windows 인증) 모드를 사용하는 경우 이 매개 변수가 필요합니다.

    보안 참고:sa 계정은 잘 알려진 SQL Server 계정이며 악의적인 사용자의 대상이 되는 경우가 많습니다. sa 로그인에 강력한 암호를 사용하는 것이 중요합니다.

    Windows 인증 모드에 대해 이 매개 변수를 지정하지 마세요.
    [ /SQLCOLLATION=CollationName ] 서버 수준 데이터 정렬을 새로 지정합니다. 이 매개 변수는 선택 사항입니다. 지정하지 않으면 서버의 현재 데이터 정렬이 사용됩니다.

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

    자세한 내용은 서버 데이터 정렬 설정 또는 변경을 참조하세요.
    [ /SQLTEMPDBFILECOUNT=NumberOfFiles ] 데이터 파일 수를 tempdb 지정합니다. 이 값은 최대 8개 또는 코어 수 중 더 높은 값으로 늘릴 수 있습니다.

    기본값: 8개 또는 코어 수 중 더 낮은 값입니다.
    [ /SQLTEMPDBFILESIZE=FileSizeInMB ] tempdb 데이터 파일의 초기 크기를 MB로 지정합니다. 설치를 사용하면 최대 1024MB의 크기를 허용합니다.

    기본값: 8
    [ /SQLTEMPDBFILEGROWTH=FileSizeInMB ] tempdb 데이터 파일의 파일 증가 증분을 MB 단위로 지정합니다. 값이 0이면 자동 증가가 해제되어 있고 추가 공간이 허용되지 않음을 나타냅니다. 설치를 사용하면 최대 1024MB의 크기를 허용합니다.

    기본값: 64
    [ /SQLTEMPDBLOGFILESIZE=FileSizeInMB ] tempdb 로그 파일의 초기 크기를 MB 단위로 지정합니다. 설치를 사용하면 최대 1024MB의 크기를 허용합니다.

    기본값: 8.

    허용되는 범위: 최소 = 8, 최대 = 1024
    [ /SQLTEMPDBLOGFILEGROWTH=FileSizeInMB ] tempdb 로그 파일의 파일 증가 증분을 MB 단위로 지정합니다. 값이 0이면 자동 증가가 해제되어 있고 추가 공간이 허용되지 않음을 나타냅니다. 설치를 사용하면 최대 1024MB의 크기를 허용합니다.

    기본값: 64

    허용되는 범위: 최소 = 8, 최대 = 1024
    [ /SQLTEMPDBDIR=Directories ] tempdb 데이터 파일의 디렉터리를 지정합니다. 둘 이상의 디렉터리를 지정할 경우 각 계정 이름을 공백으로 구분합니다. 여러 디렉터리가 지정된 경우 tempdb 데이터 파일은 라운드 로빈 방식으로 여러 디렉터리에 분배됩니다.

    기본값: 시스템 데이터 디렉터리
    [ /SQLTEMPDBLOGDIR=Directory ] 로그 파일의 디렉터리를 tempdb 지정합니다.

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

  4. RebuildDatabase 시나리오는 시스템 데이터베이스를 삭제하고 다시 클린 상태로 설치합니다. 파일 개수 설정 tempdb 은 유지되지 않으므로 설치하는 동안 파일 수 tempdb 값을 알 수 없습니다. 따라서 ebuildDatabase 시나리오는 읽을 파일 수를 tempdb 알지 못합니다. SQLTEMPDBFILECOUNT 매개 변수를 사용하여 파일 수 값을 tempdb 다시 제공할 수 있습니다. 매개 변수가 제공되지 않으면 RebuildDatabase는 CPU 개수 또는 8개 중 더 낮은 파일 수만큼 많은 tempdb 기본 파일 수를 tempdb 추가합니다.

다시 빌드 후 작업

데이터베이스를 다시 빌드한 후 다음 추가 작업을 수행해야 할 수 있습니다.

  • 및 데이터베이스의 최신 전체 백업을 mastermodelmsdb 복원합니다. 자세한 내용은 시스템 데이터베이스 백업 및 복원(SQL Server)을 참조하세요.

    Important

    서버 데이터 정렬을 변경했을 경우 시스템 데이터베이스를 복원하지 마세요. 이렇게 하면 새 데이터 정렬이 이전 데이터 정렬 설정으로 대체됩니다.

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

    Important

    개인에 의해 무단으로 변경되지 않도록 스크립트를 보호하는 것이 좋습니다.

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

  • 시스템 데이터베이스를 이전에 기록한 위치로 이동합니다. 자세한 내용은 시스템 데이터베이스 이동을 참조 하세요.

  • 서버 전체 구성 값이 이전에 기록한 값과 일치하는지 확인합니다.

데이터베이스 다시 작성 resource

다음 절차에서는 시스템 데이터베이스를 다시 빌드 resource 합니다. 데이터베이스를 resource 다시 빌드하면 모든 핫 픽스가 손실되므로 다시 적용해야 합니다.

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

  1. 배포 미디어에서 SQL Server 설치 프로그램(setup.exe)을 시작합니다.

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

  3. 설치 지원 규칙 및 파일 루틴이 실행되어 시스템에 필수 구성 요소가 설치되어 있고 컴퓨터가 설치 유효성 검사 규칙을 통과하는지 확인합니다. 확인을 선택하거나 설치를 선택하여 계속합니다.

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

  5. 복구 규칙이 실행되면 작업의 유효성을 검사합니다. 계속하려면 다음을 선택합니다.

  6. 복구 준비 페이지에서 복구를 선택합니다. 완료 페이지는 작업이 완료되었음을 나타냅니다.

msdb 데이터베이스 만들기

데이터베이스가 msdb 손상되었거나 의심되는 경우 데이터베이스의 백업이 msdb 없는 경우 스크립트를 사용하여 새 msdb 데이터베이스를 instmsdb 만들 수 있습니다.

경고

스크립트를 사용하여 instmsdb.sql 데이터베이스를 msdb 다시 빌드하면 작업, 경고, 운영자, 유지 관리 계획, 백업 기록, 정책 기반 관리 설정, 데이터베이스 메일, 성능 데이터 웨어하우스 등과 같은 저장된 msdb 모든 정보가 제거됩니다.

  1. SQL Server 에이전트, SSRS, SSIS 및 SQL Server를 데이터 저장소로 사용하는 모든 애플리케이션을 포함하여 데이터베이스 엔진에 연결하는 모든 서비스를 중지합니다.

  2. 명령을 사용하여 명령줄에서 SQL Server를 시작합니다.

    NET START MSSQLSERVER /T3608
    

    자세한 내용은 데이터베이스 엔진, SQL Server 에이전트 또는 SQL Server Browser 서비스의 시작, 중지, 일시 중지, 재개 및 다시 시작을 참조하세요. 추적 플래그 3608에 대한 자세한 내용은 TF3608을 참조하세요.

  3. 다른 명령줄 창에서 다음 명령을 실행하여 데이터베이스를 분리 msdb 하고 SQL Server 인스턴스로 바꿉 <servername> 다.

    SQLCMD -E -S<servername> -dmaster -Q"EXEC sp_detach_db msdb"
    
  4. Windows 탐색기를 사용하여 데이터베이스 파일의 msdb 이름을 바꿉니다. 기본적으로 SQL Server 인스턴스의 DATA 하위 폴더에 있습니다.

  5. SQL Server 구성 관리자를 사용하여 일반적으로 추가 추적 플래그 없이 데이터베이스 엔진 서비스를 중지하고 다시 시작합니다.

  6. 명령 프롬프트 창에서 SQL Server에 연결하고 다음 명령을 실행합니다.

    SQLCMD -E -S<servername> -i"C:\Program Files\Microsoft SQL Server\MSSQLXX.INSTANCE_NAME\MSSQL\Install\instmsdb.sql" -o"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Install\instmsdb.out"
    

    데이터베이스 엔진의 인스턴스로 바꿉다 <servername> . SQL Server 인스턴스의 파일 시스템 경로를 사용합니다. 또한 버전 및 인스턴스에 해당하는 디렉터리로 바꿉 MSSQLXX.INSTANCE_NAME 니다.

  7. Windows 메모장을 사용하여 파일을 열고 instmsdb.out 출력에서 오류가 있는지 확인합니다.

  8. 인스턴스에 설치된 CU를 다시 적용하여 데이터베이스를 현재 CU 수준으로 업그레이드합니다 msdb .

  9. 데이터베이스에 저장된 msdb 사용자 콘텐츠(예: 작업, 경고 및 기타 항목)를 다시 만듭니다.

  10. msdb 데이터베이스를 백업합니다.

데이터베이스 다시 작성 tempdb

데이터베이스가 tempdb 손상되거나 의심되고 데이터베이스 엔진이 시작되지 않는 경우 모든 시스템 데이터베이스를 다시 빌드할 필요 없이 다시 tempdb 빌드할 수 있습니다.

  1. 현재 및 templog.ldf 파일의 tempdb.mdf 이름을 바꿉니다(누락되지 않은 경우).

  2. 다음 명령을 사용하여 명령 프롬프트에서 SQL Server를 시작합니다.

    sqlservr -c -f -T3608 -T4022 -s <instance> -mSQLCMD
    

    기본 인스턴스 이름 사용 MSSQLSERVER의 경우 명명된 인스턴스에 사용합니다 MSSQL$<instance_name>. 추적 플래그 4022는 시작 저장 프로시저의 실행을 사용하지 않도록 설정합니다. sqlcmd.exe -mSQLCMD서버에 연결할 수 있습니다. 자세한 내용은 다른 시작 옵션을 참조 하세요.

    참고 항목

    SQL Server가 시작된 후에도 명령 프롬프트 창이 열려 있는지 확인합니다. 명령 프롬프트 창을 닫으면 프로세스가 종료됩니다.

  3. sqlcmd를 사용하여 서버에 연결한 다음, 다음 저장 프로시저를 사용하여 데이터베이스의 tempdb 상태를 다시 설정합니다.

    exec master..sp_resetstatus tempdb
    
  4. 명령 프롬프트 창을 눌러 Ctrl+C 서버를 종료합니다.

  5. SQL Server 서비스를 다시 시작합니다. 이렇게 하면 새 데이터베이스 파일 집합 tempdb 이 만들어지고 데이터베이스가 tempdb 복구됩니다.

다시 빌드 오류 문제 해결

구문 및 기타 런타임 오류는 명령 프롬프트 창에 표시됩니다. 설치 문에서 다음 구문 오류를 검사합니다.

  • 각 매개 변수 이름 앞에 슬래시 표시(/)가 없습니다.

  • 매개 변수 이름과 매개 변수 값 사이에 등호(=)가 없습니다.

  • 매개 변수 이름과 등호 사이에 빈 공백이 있습니다.

  • 구문에 지정되지 않은 쉼표(,) 또는 기타 문자의 존재

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

참고 항목