Utilità sqlmaint

L'utilità sqlmaint consente di eseguire un set specifico di operazioni di manutenzione su uno o più database. Utilizzare l'utilità sqlmaint per eseguire controlli DBCC, il backup di un database e del relativo log delle transazioni, aggiornare statistiche e ricompilare indici. Tutte le attività di manutenzione dei database generano un report che può essere inviato a un file di testo, un file HTML o un account di posta elettronica specificato. sqlmaint esegue i piani di manutenzione dei database creati con le versioni precedenti di SQL Server. Per eseguire i piani di manutenzione di SQL Server dal prompt dei comandi, utilizzare l'utilità dtexec utility.

Nota importanteImportante

Questa caratteristica verrà rimossa a partire dalla prossima versione di Microsoft SQL Server. Evitare di utilizzare questa caratteristica in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Utilizzare invece la caratteristica di pianificazione della manutenzione di SQL Server. Per ulteriori informazioni sui piani di manutenzione, vedere Piani di manutenzione.

Sintassi

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]

Argomenti

Separare i parametri e i relativi valori con uno spazio. Inserire ad esempio uno spazio tra -S e server_name.

  • -?
    Visualizza il diagramma della sintassi di sqlmaint. Questo parametro deve essere utilizzato da solo.

  • -Sserver_name[ **\instance_name]
    Specifica l'istanza di destinazione di Microsoft SQL Server. Per connettersi all'istanza predefinita di Motore di database di SQL Server, specificare server_name. Per connettersi all'istanza denominata di Motore di database di un determinato server, specificare server_name
    \**instance_name. Se non si specifica alcun server, sqlmaint si connette all'istanza predefinita di Motore di database del computer locale.

  • -Ulogin_ID
    Specifica l'ID di accesso utilizzato per la connessione al server. Se omesso, sqlmaint tenta di utilizzare l'autenticazione di Microsoft Windows. Se login_ID contiene caratteri speciali, il valore deve essere racchiuso tra virgolette doppie ("). In caso contrario, le virgolette doppie sono facoltative.

    Nota sulla sicurezzaNota sulla sicurezza

    Se possibile, utilizzare l'autenticazione di Windows.

  • -Ppassword
    Specifica la password per l'ID di accesso. È valido solo se viene indicato anche il parametro -U. Se password contiene caratteri speciali, il valore deve essere racchiuso tra virgolette doppie. In caso contrario, le virgolette doppie sono facoltative.

    Nota sulla sicurezzaNota sulla sicurezza

    La password non è nascosta. Se possibile, utilizzare l'autenticazione di Windows.

  • -Ddatabase_name
    Specifica il nome del database nel quale eseguire l'operazione di manutenzione. Se database_name contiene caratteri speciali, il valore deve essere racchiuso tra virgolette doppie. In caso contrario, le virgolette doppie sono facoltative.

  • -PlanNamename
    Specifica il nome di un piano di manutenzione del database definito utilizzando Creazione guidata piano di manutenzione database. L'unica informazione del piano utilizzata da sqlmaint è rappresentata dall'elenco dei database. Le attività di manutenzione specificate negli altri parametri di sqlmaint vengono applicate a questo elenco di database.

  • -PlanIDguid
    Specifica l'identificatore univoco globale (GUID, Globally Unique Identifier) del piano di manutenzione del database definito utilizzando Creazione guidata piano di manutenzione database. L'unica informazione del piano utilizzata da sqlmaint è rappresentata dall'elenco dei database. Le attività di manutenzione specificate negli altri parametri di sqlmaint vengono applicate a questo elenco di database. Questo valore deve corrispondere al valore plan_id di msdb.dbo.sysdbmaintplans.

  • -Rpttext_file
    Specifica il percorso completo e il nome del file del report da generare. Il report viene visualizzato anche sullo schermo. Il report gestisce informazioni sulla versione tramite l'aggiunta di una data al nome del file. La data viene inserita alla fine del nome del file e prima del punto nel formato _yyyyMMddhhmm. yyyy = anno, MM = mese, dd = giorno, hh = ore, mm = minuti.

    Se si esegue l'utilità alle 10.23 del 1° dicembre 1996 e il valore di text_file è:

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

    il nome del file generato è:

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

    Per l'accesso a un server remoto tramite sqlmaint, è necessario specificare il nome UNC (Universal Naming Convention) completo del file per text_file.

  • -To operator_name
    Specifica l'operatore al quale il report generato viene inviato tramite SQL Mail.

  • -HtmlRpthtml_file
    Specifica il percorso completo e il nome del file in cui generare il report HTML. sqlmaint aggiunge al nome del file una stringa nel formato _aaaaMMgghhmm, in modo analogo a quanto avviene per il parametro -Rpt.

    Per l'accesso a un server remoto tramite sqlmaint, è necessario specificare il nome UNC completo del file per html_file .

  • -DelHtmlRpt <time_period>
    Specifica che è necessario eliminare dalla directory dei report ogni report HTML con data di creazione anteriore all'intervallo di tempo definito da <time_period>. -DelHtmlRpt esegue la ricerca dei file con nome corrispondente al modello generato dal parametro html_file. Se html_file è c:\Programmi\Microsoft SQL Server\Mssql\Backup\AdventureWorks2008R2_maint.htm, -DelHtmlRpt fa sì che sqlmaint elimini i file con nome corrispondente al modello C:\Programmi\Microsoft SQL Server\Mssql\Backup\AdventureWorks2008R2_maint*.htm e precedenti al valore di <time_period> specificato.

  • -RmUnusedSpacethreshold_percent free_percent
    Specifica la rimozione dello spazio inutilizzato dal database indicato con il parametro -D. Questa opzione è utile solo nel caso di database per i quali è stato impostato l'aumento automatico delle dimensioni. Threshold_percent specifica le dimensioni, in megabyte, che il database deve raggiungere prima che sqlmaint rimuova lo spazio inutilizzato. Se le dimensioni del database sono inferiori a threshold_percent, non viene eseguita alcuna azione. Free_percent specifica la quantità di spazio inutilizzato che deve rimanere nel database, in termini di percentuale delle dimensioni finali. Se ad esempio un database di 200 MB contiene 100 MB di dati e per free_percent si specifica 10, le dimensioni finali del database saranno di 110 MB. Si noti che le dimensioni del database non verranno aumentate se sono inferiori a free_percent più la quantità di dati del database. Se ad esempio un database di 108 MB contiene 100 MB di dati e per free_percent si specifica 10, il database non verrà esteso a 110 MB, ma rimarrà di 108 MB.

  • -CkDB | -CkDBNoIdx
    Specifica l'esecuzione di un'istruzione DBCC CHECKDB o DBCC CHECKDB con l'opzione NOINDEX nel database indicato con il parametro -D. Per ulteriori informazioni, vedere DBCC CHECKDB.

    Se durante l'esecuzione di sqlmaint il database è in uso, viene scritto un avviso in text_file.

  • -CkAl | -CkAlNoIdx
    Specifica l'esecuzione di un'istruzione DBCC CHECKALLOC con l'opzione NOINDEX nel database indicato con il parametro -D. Per ulteriori informazioni, vedere DBCC CHECKALLOC (Transact-SQL).

  • -CkCat
    Specifica che un'istruzione DBCC CHECKCATALOG (Transact-SQL) deve essere eseguita nel database indicato in -D. Per ulteriori informazioni, vedere DBCC CHECKCATALOG (Transact-SQL).

  • -UpdOptiStatssample_percent
    Specifica l'esecuzione dell'istruzione seguente in tutte le tabelle del database:

    UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT
    

    Se le tabelle contengono colonne calcolate e si utilizza -UpdOptiStats, è inoltre necessario specificare l'argomento -SupportedComputedColumn.

    Per ulteriori informazioni, vedere UPDATE STATISTICS (Transact-SQL).

  • -RebldIdxfree_space
    Specifica la ricostruzione degli indici delle tabelle del database di destinazione utilizzando il valore percentuale di free_space come valore inverso del fattore di riempimento. Ad esempio, se la percentuale di free_space è 30, verrà utilizzato un fattore di riempimento pari a 70. Se si specifica un valore percentuale di free_space pari a 100, gli indici vengono ricompilati con il valore del fattore di riempimento originale.

    Se gli indici contengono colonne calcolate e si utilizza -RebldIdx, è inoltre necessario specificare l'argomento -SupportComputedColumn.

  • -SupportComputedColumn
    Specificare questo argomento per eseguire i comandi di manutenzione DBCC sulle colonne calcolate utilizzando sqlmaint.

  • -WriteHistory
    Specifica l'aggiunta di una voce in msdb.dbo.sysdbmaintplan_history per ogni azione di manutenzione eseguita da sqlmaint. Se si specifica -PlanName o -PlanID, le voci di sysdbmaintplan_history utilizzano l'ID del piano specificato. Se si specifica -D, l'ID del piano delle voci di sysdbmaintplan_history viene rappresentato da zeri.

  • -BkUpDB [ backup_path] | -BkUpLog [ backup_path ]
    Specifica un'azione di backup. -BkUpDb esegue il backup di tutto il database. -BkUpLog esegue solo il backup del log delle transazioni.

    backup_path specifica la directory di backup. backup_path non è necessario se si specifica -UseDefDir e, se vengono specificati entrambi, -UseDefDir è prioritario. È possibile memorizzare il backup in una directory o utilizzare l'indirizzo di un dispositivo nastro, ad esempio, \\.\TAPE0. Il nome del file per il backup di un database viene generato automaticamente nel formato seguente:

    dbname_db_yyyyMMddhhmm.BAK
    

    dove

    • dbname è il nome del database del quale eseguire il backup.

    • yyyyMMddhhmm rappresenta la data e l'ora dell'operazione di backup, dove yyyy = anno, MM = mese, dd = giorno, hh = ore e mm = minuti.

    Il nome del file per il backup del log delle transazioni viene generato automaticamente nel formato seguente:

    dbname_log_yyyymmddhhmm.BAK
    

    Se si utilizza il parametro -BkUpDB è inoltre necessario specificare il supporto con il parametro -BkUpMedia.

  • -BkUpMedia
    Specifica il tipo di supporto per il backup, ovvero DISK o TAPE.

  • DISK
    Indica che il supporto di backup è un disco.

  • -DelBkUps< time_period >
    Per i backup su disco, specifica che è necessario eliminare dalla directory di backup ogni file di backup con data di creazione anteriore all'intervallo di tempo definito da <time_period>.

  • -CrBkSubDir
    Per i backup su disco, specifica la creazione di una sottodirectory nella directory [backup_path] o nella directory di backup predefinita, se si utilizza anche -UseDefDir. Il nome della sottodirectory viene generato in base al nome del database specificato in -D. -CrBkSubDir consente di memorizzare in modo semplice tutti i backup di database diversi in sottodirectory separate senza dover modificare il parametro backup_path.

  • -UseDefDir
    Per i backup su disco, specifica la creazione del file di backup nella directory di backup predefinita. UseDefDir ha la precedenza su backup_path, se sono specificati entrambi. Nel caso di un'installazione predefinita di Microsoft SQL Server, la directory di backup predefinita è C:\Programmi\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup.

  • TAPE
    Indica che il supporto di backup è un nastro.

  • -BkUpOnlyIfClean
    Specifica che il backup viene eseguito solo se i controlli -Ck specificati non riscontrano problemi nei dati. Le azioni di manutenzione vengono eseguite nella stessa sequenza in cui sono indicate nel prompt dei comandi. Se si prevede di utilizzare il parametro -BkUpOnlyIfClean, specificare i parametri -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl o -CkCat prima dei parametri -BkUpDB/-BkUpLog. In caso contrario, il backup viene eseguito indipendentemente da eventuali problemi riscontrati durante i controlli.

  • -VrfyBackup
    Specifica l'esecuzione dell'istruzione RESTORE VERIFYONLY al termine del backup.

  • number[minutes| hours| day| weeks| months]
    Specifica l'intervallo di tempo trascorso il quale un report o un file di backup può essere eliminato. number è un numero intero seguito (senza spazi) da un'unità di tempo, ad esempio:

    • 12weeks

    • 3months

    • 15days

    Se si specifica solo number, l'unità di tempo predefinita è weeks.

Osservazioni

L'utilità sqlmaint consente di eseguire operazioni di manutenzione su uno o più database. Se si specifica un valore per il parametro -D, le operazioni indicate nelle altre opzioni vengono eseguite solo nel database specificato. Se si specifica -PlanName o -PlanID, sqlmaint recupera dal piano di manutenzione solo l'elenco dei database. Tutte le operazioni specificate negli altri parametri di sqlmaint vengono eseguite in tutti i database dell'elenco ottenuto dal piano. L'utilità sqlmaint di per sé non esegue nessuna delle attività di manutenzione definite nel piano.

Se l'esecuzione ha esito positivo, l'utilità sqlmaint restituisce 0, in caso contrario 1. L'esito negativo viene segnalato se:

  • Una delle azioni di manutenzione ha esito negativo.

  • Un controllo -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl o -CkCat riscontra problemi nei dati.

  • Si verifica un errore generale.

Autorizzazioni

L'utilità sqlmaint può essere eseguita da qualsiasi utente di Windows che disponga dell'autorizzazione Lettura/esecuzione su sqlmaint.exe, archiviato nella cartella x:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER1\MSSQL\Binn per impostazione predefinita. L'account di accesso di SQL Server specificato tramite -login_ID deve inoltre disporre delle autorizzazioni SQL Server necessarie per eseguire l'operazione specificata. Se la connessione a SQL Server utilizza l'autenticazione di Windows, l'account di accesso di SQL Server associato all'utente di Windows autenticato deve disporre delle autorizzazioni SQL Server necessarie per eseguire l'operazione specificata.

Ad esempio, per utilizzare -BkUpDB è necessaria l'autorizzazione a eseguire l'istruzione BACKUP, mentre l'utilizzo dell'argomento -UpdOptiStats richiede l'autorizzazione a eseguire l'istruzione UPDATE STATISTICS. Per ulteriori informazioni, vedere le sezioni dedicate alle autorizzazioni nei relativi argomenti della documentazione online.

Esempi

A. Esecuzione di controlli DBCC in un database

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

B. Aggiornamento delle statistiche utilizzando un campione del 15% per tutti i database di un piano e compattazione dei database che hanno raggiunto dimensioni di 110 MB in modo che lo spazio libero sia pari al 10%

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

C. Backup di tutti i database di un piano nelle singole sottodirectory della directory predefinita x:\Programmi\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup ed eliminazione delle copie di backup risalenti a più di due settimane prima.

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

D. Backup di un database nella directory predefinita x:\Programmi\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup.

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir