다음을 통해 공유


sqlmaint 유틸리티

적용 대상: SQL Server

sqlmaint 유틸리티는 하나 이상의 데이터베이스에서 지정한 유지 관리 작업을 수행합니다. sqlmaint를 사용하여 DBCC 검사를 실행하고, 데이터베이스 및 해당 트랜잭션 로그를 백업하고, 통계를 업데이트하고, 인덱스를 다시 빌드합니다. 모든 데이터베이스 유지 관리 활동은 지정된 텍스트 파일, HTML 파일 또는 전자 메일 계정으로 보낼 수 있는 보고서를 생성합니다. sqlmaint는 이전 버전의 SQL Server로 만든 데이터베이스 유지 관리 계획을 실행합니다. 명령 프롬프트에서 SQL Server 유지 관리 계획을 실행하려면 dtexec 유틸리티를 사용합니다.

Important

SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요. 대신 SQL Server 유지 관리 계획 기능을 사용합니다. 유지 관리 계획에 대한 자세한 내용은 유지 관리 계획을 참조하세요.

구문

  
sqlmaint   
[-?] |  
[  
     [-S server_name[\instance_name]]  
     [-U login_ID [-P password]]  
     {  
          [-D database_name | -PlanName name | -PlanID guid ]  
          [-Rpt text_file]  
          [-To operator_name]  
          [-HtmlRpt html_file [-DelHtmlRpt <time_period>] ]  
          [-RmUnusedSpace threshold_percentfree_percent]  
          [-CkDB | -CkDBNoIdx]  
          [-CkAl | -CkAlNoIdx]  
          [-CkCat]  
          [-UpdOptiStats sample_percent]  
          [-RebldIdx free_space]  
          [-SupportComputedColumn]  
          [-WriteHistory]  
          [  
               {-BkUpDB [backup_path] | -BkUpLog [backup_path] }  
               {-BkUpMedia  
                    {DISK [  
                           [-DelBkUps <time_period>]   
                           [-CrBkSubDir ]   
                           [-UseDefDir ]   
                          ]  
                     | TAPE   
                    }  
               }  
               [-BkUpOnlyIfClean]  
               [-VrfyBackup]  
          ]  
     }  
]  
<time_period> ::=  
number[minutes | hours | days | weeks | months]  

인수

매개 변수와 해당 값은 공백으로 구분해야 합니다. 예를 들어 -Sserver_name 사이에 공백이 있어야 합니다.

-?
sqlmaint의 구문 다이어그램이 반환되도록 지정합니다. 이 매개 변수는 단독으로 사용해야 합니다.

-S server_name[ \instance_name]
Microsoft SQL Server의 대상 인스턴스를 지정합니다. 해당 서버에 있는 SQL Server 데이터베이스 엔진의 기본 인스턴스에 연결하려면 server_name을 지정합니다. 해당 서버에 있는 데이터베이스 엔진의 명명된 인스턴스에 연결하려면 server_name\instance_name을 지정합니다. 서버를 지정하지 않으면 sqlmaint가 로컬 컴퓨터에 있는 데이터베이스 엔진의 기본 인스턴스에 연결됩니다.

-U login_ID
서버 연결에 사용하는 로그인 ID를 지정합니다. 이 인수를 제공하지 않으면 sqlmaint에서 Microsoft Windows 인증을 사용하려고 시도합니다. login_ID 에 특수 문자가 포함된 경우 큰따옴표(")로 묶어야 합니다. 그렇지 않은 경우 큰따옴표 (“)는 선택 사항입니다.

Important

가능하면 Windows 인증을 사용하세요.

-P password
로그인 ID의 암호를 지정합니다. -U 매개 변수도 제공된 경우에만 유효합니다. 비밀번호에 특수 문자가 포함된 경우 큰따옴표(")로 묶어야 합니다. 그렇지 않은 경우 큰따옴표는 선택 사항입니다.

Important

비밀번호는 마스킹되지 않습니다. 가능하면 Windows 인증을 사용하세요.

-D database_name
유지 관리 작업을 수행할 데이터베이스의 이름을 지정합니다. database_name 에 특수 문자가 포함된 경우 큰따옴표(")로 묶어야 합니다. 그렇지 않은 경우 큰따옴표는 선택 사항입니다.

-PlanName 이름
데이터베이스 유지 관리 계획 마법사를 사용하여 정의된 데이터베이스 유지 관리 계획의 이름을 지정합니다. sqlmaint가 계획에서 사용하는 유일한 정보는 계획의 데이터베이스 목록입니다. 다른 sqlmaint 매개 변수에 지정한 유지 관리 작업은 이 데이터베이스 목록에 적용됩니다.

-PlanID guid
데이터베이스 유지 관리 계획 마법사를 사용하여 정의된 데이터베이스 유지 관리 계획의 GUID(Globally Unique Identifier)를 지정합니다. sqlmaint가 계획에서 사용하는 유일한 정보는 계획의 데이터베이스 목록입니다. 다른 sqlmaint 매개 변수에 지정한 유지 관리 작업은 이 데이터베이스 목록에 적용됩니다. 이 인수는 msdb.dbo.sysdbmaintplans의 plan_id 값과 일치해야 합니다.

-Rpt text_file
보고서를 생성할 파일의 전체 경로와 이름을 지정합니다. 이 보고서는 화면에도 생성됩니다. 보고서는 파일 이름에 날짜를 추가하여 버전 정보를 유지 관리합니다. 날짜는 _yyyyMMddhhmm형식으로 파일 이름 끝의 마침표 앞에 생성됩니다. yyyy = year, MM = month, dd = day, hh = hour, mm = minute.

1996년 12월 1일 오전 10시 23분에 유틸리티를 실행하는 경우 text_file 값은 다음과 같습니다.

c:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2022_maint.rpt  

생성되는 파일 이름은 다음과 같습니다.

c:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2022_maint_199612011023.rpt  

sqlmaint 에서 원격 서버에 액세스할 때 text_file 에는 전체 UNC(범용 명명 규칙) 파일 이름이 필요합니다.

-To operator_name
생성된 보고서가 SQL Mail을 통해 전송되는 운영자를 지정합니다.

-HtmlRpt html_file
HTML 보고서를 생성할 파일의 전체 경로와 이름을 지정합니다. sqlmaint-Rpt 매개 변수와 마찬가지로 _yyyyMMddhhmm 형식의 문자열을 파일 이름에 추가하여 파일 이름을 생성합니다.

sqlmaint 에서 원격 서버에 액세스할 때 html_file 에는 전체 UNC 파일 이름이 필요합니다.

-DelHtmlRpt<time_period>
보고서 파일을 만든 후 시간 간격이 <time_period>를 초과할 경우 보고서 디렉터리에 있는 HTML 보고서가 삭제되도록 지정합니다. -DelHtmlRpt는 이름이 html_file 매개 변수에서 생성된 패턴에 맞는 파일을 찾습니다. html_file이 c:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2022_maint.htm인 경우 -DelHtmlRptsqlmaint에서 파일 이름이 C:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2022_maint*.htm 패턴과 일치하고 지정된 <time_period>보다 오래된 모든 파일을 삭제하도록 합니다.

-RmUnusedSpace threshold_percent free_percent
사용되지 않는 공간을 -D에 지정된 데이터베이스에서 제거되도록 지정합니다. 이 옵션은 자동으로 증가하도록 정의된 데이터베이스에서만 유용합니다. Threshold_percentsqlmaint가 사용되지 않는 데이터 공간을 제거하려고 시도하기 전에 데이터베이스가 도달해야 하는 크기를 메가바이트 단위로 지정합니다. 데이터베이스가 threshold_percent보다 작으면 아무 작업도 수행되지 않습니다. Free_percent는 데이터베이스에 남아 있어야 하는 미사용 공간의 양을 지정하며, 데이터베이스의 최종 크기의 백분율로 지정됩니다. 예를 들어 200MB 데이터베이스에 100MB의 데이터가 포함된 경우 free_percent 대해 10을 지정하면 최종 데이터베이스 크기는 110MB가 됩니다. 데이터베이스가 “free_percent+데이터베이스의 데이터 양”보다 작으면 확장되지 않습니다. 예를 들어 108MB의 데이터베이스에 100MB 데이터가 포함된 경우 free_percent 에 10을 지정하면 데이터베이스가 110MB로 확장되지 않고 108MB로 유지됩니다.

-CkDB | -CkDBNoIdx
-D에 지정된 데이터베이스에서 NOINDEX 옵션으로 DBCC CHECKDB 문을 실행하도록 지정합니다. 자세한 내용은 DBCC CHECKDB를 참조하세요.

sqlmaint를 실행할 때 데이터베이스가 사용 중이면 text_file 경고가 기록됩니다.

-CkAl | -CkAlNoIdx
-D에 지정된 데이터베이스에서 NOINDEX 옵션으로 DBCC CHECKALLOC 문을 실행하도록 지정합니다. 자세한 내용은 DBCC CHECKALLOC(Transact-SQL)를 참조하세요.

-CkCat
-D에 지정된 데이터베이스에서 NOINDEX 옵션으로 DBCC CHECKCATALOG (Transact-SQL) 문을 실행하도록 지정합니다. 자세한 내용은 DBCC CHECKCATALOG(Transact-SQL)를 참조하세요.

-UpdOptiStats sample_percent
데이터베이스의 각 테이블에서 다음 문을 실행되도록 지정합니다.

UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT;  

테이블에 계산 열이 포함된 경우에는 -UpdOptiStats 를 사용할 때 -SupportedComputedColumn인수도 지정해야 합니다.

자세한 내용은 UPDATE STATISTICS(Transact-SQL)로 만든 데이터베이스 유지 관리 계획을 실행합니다.

-RebldIdx free_space
free_space 백분율 값을 채우기 비율의 반대 개념으로 사용하여 대상 데이터베이스의 테이블에 대한 인덱스를 다시 작성할 것을 지정합니다. 예를 들어 free_space 백분율이 30이면 사용된 채우기 비율은 70입니다. free_space 백분율 값으로 100을 지정하면 원래 채우기 비율 값으로 인덱스가 다시 작성됩니다.

인덱스가 계산 열에 있을 경우 -RebldIdx 를 사용할 때 -SupportComputedColumn인수도 지정해야 합니다.

-SupportComputedColumn
계산 열에서 sqlmaint를 사용하여 DBCC 유지 관리 명령을 실행하려면 지정해야 합니다.

-WriteHistory
sqlmaint에서 수행되는 각 유지 관리 동작에 대한 항목을 msdb.dbo.sysdbmaintplan_history에 만들도록 지정합니다. -PlanName 또는 -PlanID 를 지정할 경우 sysdbmaintplan_history의 항목은 지정된 계획의 ID를 사용합니다. -D 를 지정할 경우 sysdbmaintplan_history의 항목은 계획 ID에 0을 사용하여 생성됩니다.

-BkUpDB [ backup_path] | -BkUpLog [ backup_path ]
백업 동작을 지정합니다. -BkUpDb 는 전체 데이터베이스를 백업합니다. -BkUpLog 는 트랜잭션 로그만 백업합니다.

backup_path는 백업 디렉터리를 지정합니다. 만약 -UseDefDir 옵션이 지정된 경우에는 backup_path가 필요하지 않으며, 두 옵션이 모두 지정된 경우에는 -UseDefDir에 의해덮어씌워집니다. 디렉터리나 \\.\TAPE0과 같은 테이프 디바이스 주소에 백업을 보관할 수 있습니다. 데이터베이스 백업 파일 이름은 다음과 같이 자동으로 생성됩니다.

dbname_db_yyyyMMddhhmm.BAK  
  

라는 설치 관리자 실행 파일에 포함됩니다. 여기서

  • dbname 은 백업 중인 데이터베이스의 이름입니다.

  • yyyyMMddhhmmyyyy = year, MM = month, dd = day, hh = hour 및 mm = minute인 백업 작업의 시간입니다.

트랜잭션 백업의 파일 이름은 비슷한 형식으로 자동으로 생성됩니다.

dbname_log_yyyymmddhhmm.BAK  
  

-BkUpDB 매개 변수를 사용하는 경우 -BkUpMedia 매개 변수를 사용하여 미디어를 지정해야 합니다.

-BkUpMedia
백업의 미디어 유형(DISK 또는 TAPE)을 지정합니다.

디스크
백업 매체가 디스크임을 지정합니다.

-DelBkUps<time_period>
디스크 백업의 경우 백업을 만든 후 시간 간격이 <time_period>를 초과하면 백업 디렉터리에 있는 모든 백업 파일을 삭제하도록 지정합니다.

-CrBkSubDir
디스크 백업의 경우 -UseDefDir도 지정된 경우 [backup_path] 디렉터리 또는 기본 백업 디렉터리에 하위 디렉터리를 만들 것을 지정합니다. 하위 디렉터리의 이름은 -D에 지정된 데이터베이스 이름을 사용하여 생성됩니다. -CrBkSubDir 을 사용하면 backup_path 매개 변수를 변경할 필요 없이 다른 데이터베이스의 모든 백업을 별도의 하위 디렉터리에 쉽게 넣을 수 있습니다.

-UseDefDir
디스크 백업의 경우 기본 백업 디렉터리에 백업 파일을 만들 수 있도록 지정합니다. 둘 다 지정한 경우UseDefDirbackup_path 보다 우선 적용됩니다. 기본 Microsoft SQL Server 설정을 사용하는 경우 기본 백업 디렉터리는 C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup입니다.

TAPE
백업 매체가 테이프임을 지정합니다.

-BkUpOnlyIfClean
지정된 -Ck 검사에서 데이터 문제를 찾지 못한 경우에만 백업이 수행되도록 지정합니다. 유지 관리 작업은 명령 프롬프트에 표시되는 것과 동일한 순서로 실행됩니다. -BkUpOnlyIfClean을 지정하려는 경우 -BkUpDB/-BkUpLog 매개 변수 앞에 -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl 또는 -CkCat 매개 변수를 지정하거나 검사에서 문제를 보고하는지 여부에 관계없이 백업이 발생합니다.

-VrfyBackup
RESTORE VERIFYONLY가 완료되면 백업에서 실행되도록 지정합니다.

number[minutes| hours| day| weeks| months]
보고서 또는 백업 파일이 삭제될 만큼 오래되었는지 확인하는 데 사용되는 시간 간격을 지정합니다. number 는 정수와 시간 단위로 공백 없이 구성됩니다. 올바른 예는 다음과 같습니다.

  • 12주

  • 3개월

  • 15days

number 만 지정하면 기본적으로 날짜 부분에 weeks가 사용됩니다.

설명

sqlmaint 유틸리티는 하나 이상의 데이터베이스에서 유지 관리 작업을 수행합니다. -D 를 지정할 경우 지정한 데이터베이스에서만 나머지 스위치에 지정된 작업이 수행됩니다. -PlanName 또는 -PlanID를 지정하면 sqlmaint가 지정된 유지 관리 계획에서 검색하는 유일한 정보는 계획의 데이터베이스 목록입니다. 나머지 sqlmaint 매개 변수에 지정된 모든 작업은 계획에서 가져온 목록의 각 데이터베이스에 적용됩니다. sqlmaint 유틸리티는 계획 자체에 정의된 유지 관리 작업을 적용하지는 않습니다.

sqlmaint 유틸리티가 성공적으로 실행되면 0을 반환하고 실패하면 1을 반환합니다. 오류 보고:

  • 유지 관리 작업이 실패하는 경우

  • -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl 또는 -CkCat 검사에서 데이터 문제를 찾습니다.

  • 일반적인 오류가 발생하는 경우

사용 권한

sqlmaint 유틸리티는 기본적으로 sqlmaint.exe 폴더에 저장되는 x:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER1\MSSQL\Binn읽기 및 실행 권한이 있는 모든 Windows 사용자가 실행할 수 있습니다. 또한 -login_ID로 지정된 SQL Server 로그인에는 지정된 동작을 수행하는 데 필요한 SQL Server 사용 권한이 있어야 합니다. Windows 인증을 사용하여 SQL Server에 연결하는 경우 인증된 Windows 사용자에 매핑된 SQL Server 로그인에는 지정된 동작을 수행하는 데 필요한 SQL Server 사용 권한이 있어야 합니다.

예를 들어 -BkUpDB를 사용하려면 BACKUP 문을 실행할 수 있는 권한이 필요합니다. 또한 -UpdOptiStats 인수를 사용하려면 UPDATE STATISTICS 문을 실행할 수 있는 권한이 있어야 합니다. 자세한 내용은 온라인 설명서에서 해당 항목의 "사용 권한" 섹션을 참조하십시오.

예제

A. 데이터베이스에서 DBCC 검사를 수행합니다.

sqlmaint -S MyServer -D AdventureWorks2022 -CkDB -CkAl -CkCat -Rpt C:\MyReports\AdvWks_chk.rpt  

B. 계획의 모든 데이터베이스에서 15% 샘플을 사용하여 통계를 업데이트합니다. 또한 110MB에 도달한 데이터베이스를 10% 사용 가능한 공간으로 축소합니다.

sqlmaint -S MyServer -PlanName MyUserDBPlan -UpdOptiStats 15 -RmUnusedSpace 110 10  

C. 계획의 모든 데이터베이스를 기본 x:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup 디렉터리 내 개별 하위 디렉터리에 백업합니다. 또한 2주 이전의 모든 백업을 삭제합니다.

sqlmaint -S MyServer -PlanName MyUserDBPlan -BkUpDB -BkUpMedia DISK -UseDefDir -CrBkSubDir -DelBkUps 2weeks  

D. 데이터베이스를 기본 x:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup 디렉토리로 백업합니다.

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir  

추가 참고

BACKUP(Transact-SQL)
UPDATE STATISTICS(Transact-SQL)