다음을 통해 공유


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

적용 대상: SQL Server

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

이 문서는 인덱스 다시 작성과 관련이 없습니다.

제한 사항

master, model, msdbtempdb 시스템 데이터베이스를 다시 빌드하면 데이터베이스가 삭제되고 원래 위치에서 다시 만들어집니다. 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 인스턴스가 복제 배포자로 구성된 경우 distribution 데이터베이스의 현재 백업을 찾습니다.

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

  7. master, model, msdb 데이터와 로그 템플릿 파일의 복사본이 로컬 서버에 있는지 확인합니다. 템플릿 파일의 기본 위치는 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(으)로 이동한 다음.

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

다음 절차에서는 master, model, msdbtempdb 시스템 데이터베이스를 다시 빌드합니다. 다시 작성할 시스템 데이터베이스는 지정할 수 없습니다. 클러스터형 인스턴스의 경우 이 프로시저는 활성 노드에서 수행해야 하며, 프로시저를 수행하기 전에 해당 클러스터 애플리케이션 그룹의 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 그룹이나 개별 계정을 지정합니다. 둘 이상의 계정을 지정할 때는 공백으로 계정을 구분합니다. 예를 들어, BILTEDIN\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로 지정합니다. 설치에서는 최대 1024 MB의 크기를 지원합니다.

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

    기본값: 64
    [ /SQLTEMPDBLOGFILESIZE=FileSizeInMB ] tempdb 로그 파일의 초기 크기를 MB 단위로 지정합니다. 설치에서는 최대 1024 MB의 크기를 지원합니다.

    기본값: 8

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

    기본값: 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 파일 수를 추가합니다.

다시 빌드 후 작업

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

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

    Important

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

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

    Important

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

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

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

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

리소스 데이터베이스 다시 빌드

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

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

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

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

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

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

  5. 복구 규칙이 실행되어 작업을 확인합니다. 계속하려면 다음을 선택합니다.

  6. 복구 준비 페이지에서 복구를 선택합니다. 완료 페이지에 작업이 완료되었음이 표시됩니다.

새 msdb 데이터베이스 만들기

msdb 데이터베이스가 손상되고 msdb 데이터베이스 백업이 없는 경우 msdb 스크립트를 사용하여 새 instmsdb을(를) 만들 수 있습니다.

Warning

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

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

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

    NET START MSSQLSERVER /T3608
    

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

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

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

  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를 다시 적용하여 msdb 데이터베이스를 현재 CU 수준으로 업그레이드합니다 .

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

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

tempdb 데이터베이스 다시 빌드

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

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

  2. sqlservr 애플리케이션을 사용하여 명령 프롬프트에서 SQL Server를 시작합니다.

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

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

    참고 항목

    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*.*를 입력합니다. 이렇게 검색하면 시스템 데이터베이스 다시 작성의 결과가 들어 있는 모든 로그 파일이 나타납니다. 로그 파일을 열고 검토하여 관련된 오류 메시지가 없는지 확인합니다.