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


служебная программа sqlmaint

Применимо к:SQL Server

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

Это важно

Эта функция будет удалена в будущей версии 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]

Указывает целевой экземпляр SQL Server. Укажите <server_name> , чтобы подключиться к экземпляру ядра СУБД SQL Server по умолчанию на этом сервере. Укажите <server_name>\<instance_name> для подключения к именованному экземпляру СУБД на этом сервере. Если сервер не указан, sqlmaint подключается к экземпляру ядра СУБД по умолчанию на локальном компьютере.

-U login_ID

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

Это важно

По возможности используйте аутентификацию Windows.

- P-пароль

Задает пароль для login_ID. Этот параметр действителен только в том случае, если вы также предоставите параметр -U. Если пароль содержит специальные символы, заключите его в двойные кавычки; в противном случае двойные кавычки являются необязательными.

Это важно

Пароль не маскируется. По возможности используйте аутентификацию 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\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 создает имя файла, добавляя строку формата _<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\AdventureWorks2022_maint.htm, то -DelHtmlRpt вызывает sqlmaint, чтобы удалить все файлы, имена которых соответствуют шаблону C:\Program Files\Microsoft SQL Server\MSSQL\Backup\AdventureWorks2022_maint*.htm, и которые старше указанного периода времени.

-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 МБ содержит 100 МБ данных, указание 10 для free_percent не увеличивает ее размер до 110 МБ; она остается 108 МБ.

-CkDB | -CkDBNoIdx

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

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

-CkAl | -CkAlNoIdx

Указывает, что инструкция DBCC CHECKALLOC с параметром NOINDEX выполняется в базе данных, указанной в -D.

-CkCat

Указывает, что инструкция DBCC CHECKCATALOG выполняется в базе данных, указанной в -D.

-UpdOptiStats sample_percent

Указывает, что следующая инструкция выполняется в каждой таблице в базе данных:

UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT;

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

Дополнительные сведения см. в разделе UPDATE STATISTICS.

-RebldIdx free_space

Задает перестройку индексов в таблицах базы данных-получателя с использованием процентного значения free_space , которое составляет 100 % в сумме с коэффициентом заполнения. Например, если процент free_space равен 30, то используемый коэффициент заполнения равен 70. Если указано процентное значение свободного пространства 100, индексы перестраиваются с исходным значением коэффициента заполнения.

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

-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 переопределяет backup_path, если оба указаны. Резервная копия может размещаться в каталоге или на ленточных устройствах (например, \\.\TAPE0). Имя файла резервной копии базы данных создается автоматически следующим образом:

dbname_db_yyyyMMddhhmm.BAK

Where:

  • <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, если оба указаны. При настройке SQL Server по умолчанию используется каталог резервного копирования по умолчанию C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup.

ЛЕНТА

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

-BkUpOnlyIfClean (только резервное копирование, если без изменений)

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

-VrfyBackup

Указывает, что RESTORE VERIFYONLY выполняется в резервной копии после завершения.

число [ минут| часы| день| недели| месяцы ]

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

  • 12weeks
  • 3months
  • 15days

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

Замечания

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

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

  • Любое из действий по обслуживанию завершается ошибкой.

  • -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl или -CkCat проверяют наличие проблем с данными.

  • Произошел общий сбой.

Разрешения

Любой пользователь Windows с разрешением sqlmaint.exe может выполнить служебную программу sqlmaint. По умолчанию sqlmaint.exe хранится в папке <X>:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER1\MSSQL\Binn . Кроме того, у указанного -login_ID имени входа SQL Server должны быть разрешения SQL Server, необходимые для выполнения указанного действия. При использовании проверки подлинности Windows для подключения к SQL Server имя входа SQL Server, сопоставленное с прошедшим проверку подлинности пользователем Windows, должно иметь разрешения SQL Server, необходимые для выполнения указанного действия.

Например, для выполнения инструкции -BkUpDBBACKUP требуется разрешение. Для использования аргумента -UpdOptiStats и выполнения инструкции UPDATE STATISTICS требуется разрешение. Дополнительные сведения см. в разделе "Разрешения" (ядро СУБД).

Примеры

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

В этом примере выполняются DBCC проверки с использованием базы данных.

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

В. Обновите статистику

В этом примере статистика обновляется с помощью выборки 15% во всех базах данных в рамках плана. Любая база данных, достигающая 110 МБ, сократилась до 10% свободного места.

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

С. Резервное копирование всех баз данных

В этом примере выполняется резервное копирование всех баз данных в плане в отдельные подкаталоги, используя каталог по умолчанию <X>:\Program Files\Microsoft SQL Server\MSSQLl13.MSSQLSERVER\MSSQL\Backup . Она также удаляет все резервные копии старше двух недель.

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

Д. Резервное копирование базы данных

В этом примере выполняется резервное копирование одной базы данных в каталог по умолчанию <X>:\Program Files\Microsoft SQL Server\MSSQLl13.MSSQLSERVER\MSSQL\Backup .

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir