Compartilhar via


Utilitário sqlmaint

O utilitáriosqlmaint executa um conjunto especificado de operações de manutenção em um ou mais bancos de dados. Use o sqlmaint para executar verificações DBCC, fazer backup de um banco de dados e de seu log de transações, atualizar estatísticas e reconstruir índices. Todas as atividades de manutenção de banco de dados geram um relatório que pode ser enviado a um arquivo de texto, arquivo HTML ou conta de email. O sqlmaint executa planos de manutenção de bancos de dados criados com versões anteriores do SQL Server. Para executar planos de manutenção do SQL Server do prompt de comando, use o utilitário dtexec utility.

Observação importanteImportante

Esse recurso será removido na próxima versão do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Em vez disso, use o recurso de plano de manutenção do SQL Server. Para obter mais informações sobre planos de manutenção, consulte Planos de manutenção.

Sintaxe

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]

Argumentos

Os parâmetros e seus valores devem ser separados por um espaço. Por exemplo, deve haver um espaço entre -S e server_name.

  • -?
    Especifica que o diagrama de sintaxe para o sqlmaint seja retornado. Este parâmetro deve ser usado sozinho.

  • -Sserver_name[ **\instance_name]
    Especifica a instância de destino do Microsoft SQL Server. Especifique o server_name para se conectar à instância padrão do Mecanismo de banco de dados do SQL Server nesse servidor. Especifique o server_name
    \**instance_name para se conectar a uma instância nomeada do Mecanismo de Banco de Dados nesse servidor. Se nenhum servidor for especificado, o sqlmaint se conectará à instância padrão do Mecanismo de Banco de Dados no computador local.

  • -Ulogin_ID
    Especifica a ID de logon a ser usada para se conectar ao servidor. Se ela não for fornecida, o sqlmaint tentará usar a Autenticação do Microsoft Windows. Se o login_ID contiver caracteres especiais, ele deverá ficar entre aspas duplas ("); caso contrário, as aspas duplas são opcionais.

    Observação sobre segurançaObservação sobre segurança

    Quando possível, use a autenticação do Windows.

  • -Ppassword
    Especifica a senha para a ID de logon. Só será válido se o parâmetro -U também for fornecido. Se o password contiver caracteres especiais, ele deverá ficar entre aspas duplas; caso contrário, as aspas duplas são opcionais.

    Observação sobre segurançaObservação sobre segurança

    A senha não é mascarada. Quando possível, use a autenticação do Windows.

  • -Ddatabase_name
    Especifica o nome do banco de dados no qual a operação de manutenção deve ser executada. Se o database_name contiver caracteres especiais, ele deverá ficar entre aspas duplas; caso contrário, as aspas duplas são opcionais.

  • -PlanNamename
    Especifica o nome de um plano de manutenção de banco de dados definido com o uso do Assistente para Planos de Manutenção de Banco de Dados. A única informação que o sqlmaint usa do plano é a lista de bancos de dados no plano. Todas as atividades de manutenção especificadas nos outros parâmetros do sqlmaint são aplicadas a essa lista de bancos de dados.

  • -PlanIDguid
    Especifica o identificador global exclusivo (GUID) de um plano de manutenção de banco de dados definido com o uso do Assistente para Planos de Manutenção de Banco de Dados. A única informação que o sqlmaint usa do plano é a lista de bancos de dados no plano. Todas as atividades de manutenção especificadas nos outros parâmetros do sqlmaint são aplicadas a essa lista de bancos de dados. Isso deve corresponder a um valor do plan_id em msdb.dbo.sysdbmaintplans.

  • -Rpttext_file
    Especifica o caminho completo e o nome do arquivo no qual será gerado o relatório. O relatório também é gerado na tela. O relatório mantém informações de versão adicionando uma data ao nome do arquivo. A data é gerada do seguinte modo: no final do nome do arquivo, mas antes do ponto final, sob a forma _yyyyMMddhhmm. yyyy = ano, MM = mês, dd = dia, hh = hora, mm = minuto.

    Se você executar o utilitário às 10h23 do dia 1 de dezembro de 1996, e este for o valor do text_file:

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

    O nome de arquivo gerado é:

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

    O nome do arquivo completo segundo a UNC (Convenção Universal de Nomenclatura) é exigido para o text_file quando o sqlmaint acessa um servidor remoto.

  • -To operator_name
    Especifica o operador para quem o relatório gerado será enviado por meio do SQL Mail.

  • -HtmlRpthtml_file
    Especifica o caminho completo e o nome do arquivo no qual um relatório HTML será gerado. O sqlmaint gera o nome de arquivo anexando uma cadeia de caracteres no formato _yyyyMMddhhmm ao nome do arquivo, como faz para o parâmetro -Rpt.

    O nome de arquivo UNC completo é exigido para o html_file quando o sqlmaint acessa um servidor remoto.

  • -DelHtmlRpt <time_period>
    Especifica que qualquer relatório HTML no diretório de relatórios deverá ser excluído se o intervalo de tempo depois da criação do arquivo de relatório exceder o <time_period>. -DelHtmlRpt procura arquivos cujos nomes correspondam ao padrão gerado pelo parâmetro html_file. Se o html_file for c:\Arquivos de Programas\Microsoft SQL Server\Mssql\Backup\AdventureWorks2008R2_maint.htm, então -DelHtmlRpt levará o sqlmaint a excluir todos os arquivos cujos nomes correspondam ao padrão C:\Arquivos de Programas\Microsoft SQL Server\Mssql\Backup\AdventureWorks2008R2_maint*.htm e que sejam mais antigos do que especificado no <time_period>.

  • -RmUnusedSpacethreshold_percent free_percent
    Especifica que o espaço não usado seja removido do banco de dados especificado no -D. Essa opção só é útil para bancos de dados definidos para crescer automaticamente. O Threshold_percent especifica em megabytes o tamanho que o banco de dados deve atingir antes de o sqlmaint tentar remover o espaço de dados não usado. Se o banco de dados for menor do que o threshold_percent, nenhuma ação será tomada. O Free_percent especifica quanto espaço não usado deve permanecer no banco de dados. Esse valor é especificado como uma porcentagem do tamanho final do banco de dados. Por exemplo, se um banco de dados com 200 MB contiver 100 MB de dados, se você especificar 10 para o free_percent, o resultado final do banco de dados será 110 MB. Observe que um banco de dados não será expandido se for menor do que o free_percent somado à quantidade de dados no banco de dados. Por exemplo, se um banco de dados de 108 MB tiver 100 MB de dados, a especificação de 10 para free_percent não expandirá o banco de dados para 110 MB; ele permanece com 108 MB.

  • -CkDB | -CkDBNoIdx
    Especifica que uma instrução DBCC CHECKDB ou DBCC CHECKDB com a opção de NOINDEX seja executada no banco de dados especificado em -D. Para obter mais informações, consulte DBCC CHECKDB.

    Um aviso será gravado no text_file se o banco de dados estiver em uso quando o sqlmaint for executado.

  • -CkAl | -CkAlNoIdx
    Especifica que uma instrução DBCC CHECKALLOC com a opção NOINDEX seja executada no banco de dados especificado em -D. Para obter mais informações, consulte DBCC CHECKALLOC (Transact-SQL).

  • -CkCat
    Especifica que uma instrução DBCC CHECKCATALOG (Transact-SQL) seja executada no banco de dados especificado em -D. Para obter mais informações, consulte DBCC CHECKCATALOG (Transact-SQL).

  • -UpdOptiStatssample_percent
    Especifica que a instrução seguinte seja executada em cada tabela no banco de dados:

    UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT
    

    Se as tabelas contiverem colunas computadas, especifique também o argumento - SupportedComputedColumn quando usar - UpdOptiStats.

    Para obter mais informações, consulte UPDATE STATISTICS (Transact-SQL).

  • -RebldIdxfree_space
    Especifica que os índices nas tabelas do banco de dados de destino devem ser reconstruídos usando o valor percentual free_space como o inverso do fator de preenchimento. Por exemplo, se a porcentagem de free_space for 30, então o fator de preenchimento usado será 70. Se for especificado um valor percentual de 100 para free_space, os índices serão reconstruídos com o fator de preenchimento original.

    Se os índices estiverem em colunas computadas, especifique também o argumento -SupportComputedColumn quando usar -RebldIdx.

  • -SupportComputedColumn
    Deve ser especificado para executar comandos de manutenção DBCC com sqlmaint em colunas computadas.

  • -WriteHistory
    Especifica que deve haver uma entrada no msdb.dbo.sysdbmaintplan_history para cada ação de manutenção executada pelo sqlmaint. Se -PlanName ou -PlanID estiver especificado, as entradas no sysdbmaintplan_history usarão a ID do plano especificado. Se -D estiver especificado, as entradas no sysdbmaintplan_history serão feitas com zeros para a ID do plano.

  • -BkUpDB [ backup_path] | -BkUpLog [ backup_path ]
    Especifica uma ação de backup. -BkUpDb faz o backup de todo o banco de dados. -BkUpLog faz o backup apenas do log de transações.

    O backup_path especifica o diretório para o backup. O backup_path não será necessário se -UseDefDir também estiver especificado, e será substituído por -UseDefDir se ambos estiverem especificados. O backup pode ser colocado em um diretório ou em um endereço de dispositivo de fita (por exemplo, \\. \TAPE0). O nome do arquivo para um backup de banco de dados é gerado automaticamente desta forma:

    dbname_db_yyyyMMddhhmm.BAK
    

    onde

    • dbname é o nome do banco de dados do qual é feito o backup.

    • yyyyMMddhhmm é a hora da operação de backup com yyyy = ano, MM = mês, dd = dia, hh = hora e mm = minuto.

    O nome do arquivo para um backup de transações é gerado automaticamente com um formato semelhante:

    dbname_log_yyyymmddhhmm.BAK
    

    Se você usar o parâmetro -BkUpDB, especifique também as mídias usando o parâmetro -BkUpMedia.

  • -BkUpMedia
    Especifica o tipo de mídia do backup: DISK ou TAPE.

  • DISK
    Especifica que a mídia de backup é disco.

  • -DelBkUps< time_period >
    Para backups em disco, especifica que qualquer arquivo de backup no diretório de backups deverá ser excluído se o intervalo de tempo depois da criação do backup exceder o <time_period>.

  • -CrBkSubDir
    Para backups em disco, especifica que um subdiretório seja criado no diretório [backup_path] ou no diretório padrão de backup se -UseDefDir também estiver especificado. O nome do subdiretório é gerado do nome de banco de dados especificado em -D. -CrBkSubDir oferece um modo fácil de colocar todos os backups de bancos de dados diferentes em subdiretórios separados sem precisar alterar o parâmetro backup_path.

  • -UseDefDir
    Para backups de disco, especifica que o arquivo de backup seja criado no diretório padrão de backup. UseDefDir substituirá backup_path se ambos forem especificados. Com uma instalação padrão do Microsoft SQL Server, o diretório padrão de backup é C:\Arquivos de Programas\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup.

  • TAPE
    Especifica que a mídia de backup é fita.

  • -BkUpOnlyIfClean
    Especifica que o backup ocorrerá apenas se nenhuma verificação -Ck especificada tiver localizado problemas com os dados. As ações de manutenção são executadas na mesma sequência em que aparecem no prompt de comando. Especifique os parâmetros -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl ou -CkCat antes dos parâmetros -BkUpDB/-BkUpLog se você também for especificar -BkUpOnlyIfClean, ou o backup ocorrerá independentemente de haver ou não problemas nos relatórios de verificações.

  • -VrfyBackup
    Especifica que o RESTORE VERIFYONLY será executado no backup quando for concluído.

  • number[minutos| horas| dia| semanas| meses]
    Especifica o intervalo de tempo usado para determinar se um relatório ou arquivo de backup é antigo o bastante para ser excluído. O number é um inteiro seguido (sem espaço) de uma unidade de tempo. Exemplos válidos:

    • 12weeks

    • 3months

    • 15days

    Se apenas o number for especificado, a parte de data padrão será weeks.

Comentários

O utilitário sqlmaint executa operações de manutenção em um ou mais bancos de dados. Se - D estiver especificado, as operações especificadas nas demais opções serão executadas apenas no banco de dados especificado. Se -PlanName ou -PlanID estiver especificado, a única informação que o sqlmaint recuperará do plano de manutenção especificado será a lista de bancos de dados no plano. Todas as operações especificadas nos demais parâmetros do sqlmaint são aplicadas a cada banco de dados na lista obtida do plano. O utilitário sqlmaint não aplica nenhuma atividade de manutenção definida no próprio plano.

O utilitário sqlmaint retornará 0 se for executado com êxito ou 1 se apresentar falha. A falha é relatada:

  • Se alguma ação de manutenção apresenta falha.

  • Se as verificações -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl ou -CkCat encontram problemas nos dados.

  • Se uma falha geral é encontrada.

Permissões

O utilitário sqlmaint pode ser executado por qualquer usuário do Windows com a permissão Ler e Executar no sqlmaint.exe que, por padrão, é armazenado na pasta x:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER1\MSSQL\Binn. Adicionalmente, o logon SQL Server especificado com permissões -login_ID deve ter as permissões do SQL Server exigidas para executar a ação especificada. Se a conexão do SQL Server usar a autenticação do Windows, o logon do SQL Server mapeado para autenticar o usuário do Windows deverá ter as permissões do SQL Server exigidas para realizar a ação especificada.

Por exemplo, para usar o -BkUpDB é preciso ter permissão para executar a instrução BACKUP. E para usar o argumento -UpdOptiStats é preciso ter permissão para executar a instrução UPDATE STATISTICS. Para obter mais informações, consulte as seções "Permissões" dos tópicos correspondentes nos Manuais Online.

Exemplos

A. Realização de verificações DBCC em um banco de dados

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

B. Atualização de estatísticas usando uma amostra de 15% em todos os bancos de dados em um plano. Além disso, redução de qualquer banco de dados que tenha alcançado 110 MB para um espaço livre de apenas 10%.

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

C. Backup de todos os bancos de dados em um plano em seus subdiretórios individuais no diretório padrão x:\Arquivos de Programas\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup. Exclui também qualquer backup com mais de 2 semanas.

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

D. Backup de um banco de dados no diretório padrão x:\Arquivos de Programas\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup.\

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir