Программа 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. Укажите значение server_name, чтобы подключиться к экземпляру SQL Server Database Engine по умолчанию на этом сервере. Укажите значение server_name
    \**instance_name, чтобы подключиться к именованному экземпляру компонента Database Engine на этом сервере. Если сервер не указан, то программа sqlmaint выполняет подключение к экземпляру компонента Database Engine по умолчанию на локальном компьютере.

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

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

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

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

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

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

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

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

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

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

    При запуске программы в 10:23 1 декабря 1996 года значением аргумента 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
    

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

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

  • -HtmlRpthtml_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\AdventureWorks2008R2_maint.htm», то параметр -DelHtmlRpt приведет к удалению программой sqlmaint всех файлов, имена которых соответствуют шаблону «C:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2008R2_maint*.htm» и которые являются более старыми, чем указано аргументом <time_period>.

  • -RmUnusedSpacethreshold_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).

  • -UpdOptiStatssample_percent
    Задает применение следующей инструкции к каждой таблице базы данных:

    UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT
    

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

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

  • -RebldIdxfree_space
    Задает перестройку индексов в таблицах базы данных-получателя с использованием процентного значения free_space, которое составляет 100% в сумме с коэффициентом заполнения. Например, если процент free_space равен 30, то используемый коэффициент заполнения равен 70. Если заданное значение процентов free_space равно 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 в случае указания обоих параметров. Резервная копия может размещаться в каталоге или по адресу ленточного устройства (например, \\.\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\MSSQL10_50.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 AdventureWorks -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\MSSQL10_50.MSSQLSERVER\MSSQL\Backup directory». Кроме того, удаляет резервные копии, созданные ранее, чем две недели назад

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

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

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir

См. также

Справочник