Поделиться через


Программа sqlmaint

Программа sqlmaint выполняет заданный набор операций обслуживания с одной или несколькими базами данных. Программа sqlmaint используется для выполнения проверок DBCC, создания резервной копии базы данных и ее журнала транзакций, обновления статистики и перестроения индексов. При всех действиях по обслуживанию базы данных формируется отчет, который можно записать в указанный текстовый файл, в HTML-файл или отправить по электронной почте. Программа sqlmaint выполняет планы обслуживания баз данных, созданные в предыдущих версиях SQL Server. Для запуска планов обслуживания SQL Server из командной строки используйте программу Программа dtexec.

Важное примечаниеВажно!

В следующей версии 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 . При использовании этого параметра использование других параметров не допускается.

  • -S server_name[ **\instance_name]
    Указывает целевой экземпляр Microsoft SQL Server. Укажите значение server_name, чтобы подключиться к экземпляру Компонент SQL Server Database Engine по умолчанию на этом сервере. Укажите значение server_name
    \**instance_name, чтобы подключиться к именованному экземпляру компонента Компонент Database Engine на этом сервере. Если сервер не указан, программа sqlmaint устанавливает соединение с экземпляром Компонент Database Engine по умолчанию на локальном компьютере.

  • -U login_ID
    Указывает используемый идентификатор входа при соединении с сервером. Если он не задан, программа sqlmaint пытается использовать проверку подлинности Microsoft Windows. Если аргумент login_ID содержит специальные символы, то он должен быть заключен в двойные кавычки ("); в противном случае использование двойных кавычек необязательно.

    Примечание по безопасностиПримечание по безопасности

    По возможности используйте проверку подлинности Windows.

  • -P password
    Указывает пароль для идентификатора имени входа. Допустимо только при наличии параметра -U. Если аргумент password содержит специальные символы, он должен быть заключен в двойные кавычки. В противном случае использование двойных кавычек необязательно.

    Примечание по безопасностиПримечание по безопасности

    Маскировка пароля не производится. По возможности используйте проверку подлинности Windows.

  • -D database_name
    Указывает имя базы данных, с которой будут производиться операции обслуживания. Если аргумент database_name содержит специальные символы, он должен быть заключен в двойные кавычки. В противном случае использование двойных кавычек необязательно.

  • -PlanName name
    Указывает имя плана обслуживания базы данных, определенного с помощью мастера планов обслуживания баз данных. Единственные сведения, которые программа sqlmaint использует из этого плана, — это список баз данных в плане. Любые действия по обслуживанию, которые указываются в других параметрах sqlmaint, применяются ко всем базам данных из этого списка.

  • -PlanID guid
    Указывает идентификатор GUID плана обслуживания базы данных, определенного с помощью мастера планов обслуживания баз данных. Единственные сведения, которые программа sqlmaint использует из этого плана, — это список баз данных в плане. Любые действия по обслуживанию, которые указываются в других параметрах sqlmaint, применяются ко всем базам данных из этого списка. Должно соответствовать значению plan_id в таблице msdb.dbo.sysdbmaintplans.

  • -Rpt text_file
    Указывает полный путь и имя файла, в котором будет сформирован отчет. Отчет также выводится на экран. В отчете сведения о версии отражаются при помощи добавления даты к имени файла. Дата формируется следующим образом: в конце имени файла, но перед точкой в формате _yyyyMMddhhmm. yyyy = год, MM = месяц, dd = день, hh = час, mm = минута.

    При запуске программы в 10:23 1 декабря 1996 года значением аргумента text_file будет:

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

    Имя создаваемого файла:

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

    Когда программа sqlmaint обращается к удаленному серверу, необходимо указывать в качестве аргумента text_file полное имя в формате UNC.

  • -To operator_name
    Указывает оператора, которому будет отправлен сформированный отчет через службу SQL Mail.

  • -HtmlRpt html_file
    Указывает полный путь и имя файла, в котором будет сформирован HTML-отчет. Программа sqlmaint формирует имя файла, добавляя к имени файла строку формата _yyyyMMddhhmm, также как и в случае с параметром -Rpt.

    Когда программа sqlmaint обращается к удаленному серверу, значение аргумента html_file необходимо указывать в виде полного имени файла в формате UNC.

  • -DelHtmlRpt <time_period>
    Задает удаление всех отчетов в формате HTML в каталоге отчетов, если интервал времени с момента создания отчета превысит значение аргумента <time_period>. -DelHtmlRpt производит поиск файлов с именами, соответствующими шаблону, сформированному на основе параметра html_file. Если значение html_file равно «c:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2012_maint.htm», то параметр -DelHtmlRpt приведет к удалению программой sqlmaint всех файлов, имена которых соответствуют шаблону «C:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2012_maint*.htm» и которые являются более старыми, чем указано аргументом <time_period>.

  • -RmUnusedSpace threshold_percent free_percent
    Задает удаление неиспользуемого пространства из базы данных, указанной в -D. Этот параметр полезен только для тех баз данных, в которых задан автоматический рост. Threshold_percent указывает в мегабайтах размер, которого должна достигнуть база данных, прежде чем программа sqlmaint попытается удалить неиспользованное пространство данных. Если база данных меньше значения threshold_percent, никакие действия не выполняются. Значение Free_percent задает размер сохраняемого неиспользуемого пространства в базе данных, указываемого в виде процента от конечного размера базы данных. Например, если база данных размером 200 MБ содержит 100 MБ данных, то указание значения 10 в качестве аргумента free_percent приводит к тому, что конечный размер базы данных будет составлять 110 MБ. Обратите внимание, что увеличения базы данных не происходит, если ее размер меньше суммы значения free_percent и объема данных в базе. Например, если база данных размером 108 MБ содержит данные размером 100 MБ, то указание 10 в качестве значения free_percent не приведет к увеличению базы данных до 110 MБ, ее размер останется равным 108 MБ.

  • -CkDB | -CkDBNoIdx
    Указывает, что инструкция DBCC CHECKDB или DBCC CHECKDB с параметром NOINDEX будет выполняться в базе данных, заданной в -D. Дополнительные сведения см. в разделе DBCC CHECKDB.

    Если при запуске программы sqlmaint база данных уже используется, в text_file записывается предупреждение.

  • -CkAl | -CkAlNoIdx
    Задает выполнение инструкции DBCC CHECKALLOC с параметром NOINDEX в базе данных, указанной в параметре -D. Дополнительные сведения см. в разделе DBCC CHECKALLOC (Transact-SQL).

  • -CkCat
    Задает выполнение инструкции Transact-SQL DBCC CHECKCATALOG в базе данных, указанной в параметре -D. Дополнительные сведения см. в разделе 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, которое составляет 100% в сумме с коэффициентом заполнения. Например, если процент free_space равен 30, то используемый коэффициент заполнения равен 70. Если заданное значение процентов free_space равно 100, то повторное создание индексов происходит с использованием начального коэффициента заполнения.

    Если индексы построены на вычисляемых столбцах, то при использовании -RebldIdx необходимо также задать аргумент -SupportComputedColumn.

  • -SupportComputedColumn
    Должен быть задан для запуска команд обслуживания DBCC на вычисляемых столбцах с помощью программы sqlmaint.

  • -WriteHistory
    Задает создание записи журнала в msdb.dbo.sysdbmaintplan_history для каждой операции обслуживания, выполненной программой sqlmaint. Если указано значение -PlanName или -PlanID, то записи журнала в sysdbmaintplan_history используют идентификатор указанного плана. Если указано значение -D, записи журнала в sysdbmaintplan_history в качестве значения идентификатора плана содержат нули.

  • -BkUpDB [ backup_path] | -BkUpLog [ backup_path ]
    Задает действие резервного копирования. -BkUpDb производит резервное копирование всей базы данных. -BkUpLog создает резервную копию только журнала транзакций.

    backup_path указывает каталог для резервной копии. backup_path не требуется, если параметр -UseDefDir также указан, и переопределяется параметром -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
    Для резервных копий дисков задает создание вложенного каталога в каталоге [backup_path] или в каталоге резервных копий по умолчанию в случае указания -UseDefDir . Имя вложенного каталога создается на основе имени базы данных, указанного в -D. -CrBkSubDir предлагает простой способ переноса всех резервных копий различных баз данных в отдельные вложенные каталоги без необходимости изменения параметра backup_path.

  • -UseDefDir
    Для резервного копирования на диск задает создание файла резервной копии в каталоге резервных копий по умолчанию. Значение UseDefDir переопределяет значение backup_path, если указаны оба параметра. При установке Microsoft SQL Server с параметрами по умолчанию каталогом резервных копий является «C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup».

  • TAPE
    Указывает, что носителем данных резервных копий является ленточный накопитель.

  • -BkUpOnlyIfClean
    Указывает, что операция резервного копирования производится только в том случае, если заданные проверки -Ck не обнаружили ошибок данных. Действия по обслуживанию запускаются в порядке, в котором они указаны в командной строке. Следует указывать параметры -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl или -CkCat перед параметрами -BkUpDB/-BkUpLog в том случае, если также предполагается указать параметр -BkUpOnlyIfClean или если операция резервного копирования данных происходит вне зависимости от обнаружения ошибок.

  • -VrfyBackup
    Задает выполнение RESTORE VERIFYONLY на резервной копии по завершении ее создания.

  • number[минут| часов| дней| недель| месяцев]
    Задает интервал времени, используемый для определения, является ли отчет или файл резервной копии достаточно старым для его удаления. number — целое число, за которым (без пробела) следует единица измерения времени. Допустимые варианты:

    • 12недель

    • 3месяца

    • 15дней

    Если указано только number, то используемой по умолчанию частью даты будут недели.

Замечания

Программа sqlmaint производит операции обслуживания с одной или несколькими базами данных. В случае указания параметра -D операции, заданные в остальных ключах, выполняются только с указанной базой данных. В случае указания параметра -PlanName или -PlanID программа sqlmaint получает из указанного плана обслуживания только сведения о списке баз данных. Все операции, указанные в остальных параметрах программы sqlmaint, применяются к каждой базе данных, приведенной в списке, который получен из плана. Программа sqlmaint не выполняет никаких действий обслуживания, определенных в самом плане.

Программа sqlmaint возвращает 0 в случае успешного выполнения или 1 в случае ошибки. Сообщение об ошибке выводится:

  • в случае неудачи любой из операций обслуживания;

  • Если проверки -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl или -CkCat обнаруживают ошибки данных.

  • в случае общего сбоя.

Разрешения

Программа sqlmaint может быть выполнена любым пользователем Windows с разрешениями Чтение и выполнение для файла sqlmaint.exe, который по умолчанию находится в папке «x:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER1\MSSQL\Binn». Кроме того, имя входа SQL Server, указанное в параметре -login_ID, должно иметь разрешения SQL Server, достаточные для выполнения указанного действия. Если соединение с SQL Server использует проверку подлинности Windows, имя входа SQL Server, сопоставленное с прошедшим проверку пользователем Windows, должно иметь разрешения SQL Server, достаточные для выполнения указанного действия.

Например, указание параметра -BkUpDB требует разрешения на выполнение инструкции BACKUP. Использование аргумента -UpdOptiStats требует разрешения на выполнение инструкции UPDATE STATISTICS. Дополнительные сведения см. в подразделах «Разрешения» соответствующих разделов электронной документации.

Примеры

А.Выполнение проверок DBCC в базе данных

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

Б.Обновление статистики, используя в качестве образца 15 % данных из всех баз данных, содержащихся в плане.Также сжимает все базы данных, размер которых достиг 110 MБ, чтобы свободное пространство в них составляло только 10%

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

В.Создает резервные копии всех баз данных, содержащихся в плане, в отдельных каталогах, вложенных в каталог по умолчанию «x:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup».Кроме того, удаляет резервные копии, созданные ранее чем две недели назад

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

Г.Создает резервную копию базы данных в каталоге по умолчанию «x:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup».\

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir

См. также

Справочник

BACKUP (Transact-SQL)

UPDATE STATISTICS (Transact-SQL)