sqlmaint 유틸리티

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

중요 정보중요

이 기능은 다음 버전의 Microsoft 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]

인수

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

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

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

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

    보안 정보보안 정보

    가능하면 Windows 인증을 사용하십시오.

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

    보안 정보보안 정보

    암호는 마스킹되지 않습니다. 가능하면 Windows 인증을 사용하십시오.

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

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

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

  • -Rpttext_file
    보고서를 생성할 파일의 전체 경로와 이름을 지정합니다. 이 보고서는 화면에도 생성됩니다. 보고서에서는 파일 이름에 날짜를 추가하여 버전 정보를 유지 관리합니다. 날짜는 yyyyMMddhhmm의 형식으로 파일 이름 끝의 마침표 앞에 생성됩니다. yyyy = 연도, MM = 월, dd = 일, hh = 시, mm = 분

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

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

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

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

    sqlmaint에서 원격 서버에 액세스할 때 text_file에는 전체 UNC(Universal Naming Convention) 파일 이름이 필요합니다.

  • -To operator_name
    SQL 메일을 통해 생성된 보고서를 받는 운영자를 지정합니다.

  • -HtmlRpthtml_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\AdventureWorks2008R2_maint.htm인 경우 -DelHtmlRptsqlmaint에서 파일 이름이 C:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2008R2_maint*.htm 패턴과 일치하고 지정된 <time_period>보다 오래된 모든 파일을 삭제하도록 합니다.

  • -RmUnusedSpacethreshold_percent free_percent
    -D에 지정된 데이터베이스에서 사용하지 않는 공간을 제거하도록 지정합니다. 이 옵션은 자동으로 증가하도록 정의된 데이터베이스에서만 유용합니다. Threshold_percent는 데이터베이스 크기가 몇 MB에 도달하면 sqlmaint가 사용하지 않는 데이터 공간을 제거할지를 지정합니다. 데이터베이스가 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 문을 실행하도록 지정합니다. 자세한 내용은 DBCC CHECKDB를 참조하십시오.

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

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

  • -CkCat
    -D에 지정된 데이터베이스에서 DBCC CHECKCATALOG(Transact-SQL) 문을 실행하도록 지정합니다. 자세한 내용은 DBCC CHECKCATALOG(Transact-SQL)를 참조하십시오.

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

    UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT
    

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

    자세한 내용은 UPDATE STATISTICS(Transact-SQL)를 참조하십시오.

  • -RebldIdxfree_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은 백업하는 데이터베이스의 이름입니다.

    • yyyyMMddhhmm은 백업 작업의 시간이며 여기서 yyyy는 연도, MM은 월, dd는 일, hh는 시, 그리고 mm은 분을 나타냅니다.

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

    dbname_log_yyyymmddhhmm.BAK
    

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

  • -BkUpMedia
    백업 미디어 유형을 DISK 또는 TAPE 중 하나로 지정합니다.

  • DISK
    백업 미디어로 디스크를 사용하도록 지정합니다.

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

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

  • -UseDefDir
    디스크 백업의 경우 기본 백업 디렉터리에 백업 파일을 만들도록 지정합니다. UseDefDir과 backup_path를 둘 다 지정하면 UseDefDir 값이 우선 적용됩니다. 기본 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는 정수와 시간 단위로 공백 없이 구성됩니다. 올바른 예는 다음과 같습니다.

    • 12weeks

    • 3months

    • 15days

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

주의

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

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

  • 유지 관리 동작이 실패할 경우

  • -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl 또는 -CkCat 검사에서 데이터에 문제가 발견된 경우

  • 일반 오류가 발생한 경우

사용 권한

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

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

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

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

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

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

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

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

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

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir