Программа sqlmaint

Изменения: 14 апреля 2006 г.

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

В следующей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. Вместо этого используйте функцию плана обслуживания SQL Server 2005. Дополнительные сведения о планах обслуживания см. в разделе Планы обслуживания.

Синтаксис

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 2005. Укажите значение server_name, чтобы подключиться к экземпляру SQL Server Database Engine по умолчанию на этом сервере. Укажите server_name
    \**instance_name, чтобы подключиться к именованному экземпляру Database Engine на этом сервере. Если сервер не указан, то программа sqlmaint выполняет подключение к экземпляру компонента Database Engine по умолчанию на локальном компьютере.
  • -Ulogin_ID
    Указывает используемый идентификатор входа при подключении к серверу. Если он не указан, то программа sqlmaint производит попытку использования проверки подлинности Microsoft Windows. Если аргумент login_ID содержит специальные символы, то он должен быть заключен в двойные кавычки ("); в противном случае использование двойных кавычек необязательно.

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

    ms162827.security(ru-ru,SQL.90).gifПримечание безопасности.
    Маскировка пароля не производится. При возможности используйте проверку подлинности 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\AdventureWorks_maint.rpt
    

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

    c:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks_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\AdventureWorks_maint.htm», то параметр -DelHtmlRpt вызывает удаление программой sqlmaint всех файлов, имена которых соответствуют шаблону «c:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks_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 2005 по умолчанию каталогом резервных копий является «C:\Program Files\Microsoft SQL Server\MSSQL.1\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\MSSQL.1\MSSQL\Binn. Кроме того, имя входа SQL Server, указанное в параметре -login_ID, должно иметь разрешения SQL Server, достаточные для выполнения указанного действия. Если соединение с SQL Server использует проверку подлинности Windows, имя входа SQL Server, сопоставленное с прошедшим проверку пользователем Windows, должно иметь разрешения SQL Server, достаточные для выполнения указанного действия.

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

Примеры

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

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\MSSQL.1\MSSQL\Backup». Кроме того, удалите резервные копии, созданные раньше, чем 2 недели назад

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

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

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir

См. также

Другие ресурсы

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

Справка и поддержка

Получение помощи по SQL Server 2005