sqlmaint (utilidad)
La utilidad sqlmaint realiza un conjunto especificado de operaciones de mantenimiento en una o varias bases de datos. Use sqlmaint para ejecutar comprobaciones de DBCC, realizar una copia de seguridad de una base de datos y su registro de transacciones, actualizar estadísticas y volver a generar índices. Todas las actividades de mantenimiento de bases de datos generan un informe que se puede enviar a un archivo de texto designado, un archivo HTML o una cuenta de correo electrónico. sqlmaint ejecuta los planes de mantenimiento de bases de datos creados con las versiones anteriores de SQL Server. Para ejecutar los planes de mantenimiento de SQL Server desde el símbolo del sistema, emplee la utilidad dtexec.
![]() |
---|
Esta característica se quitará en la versión siguiente de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Utilice en su lugar la característica de plan de mantenimiento de SQL Server. Para obtener más información sobre planes de mantenimiento, vea Planes de mantenimiento. |
Sintaxis
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
Los parámetros y sus valores deben estar separados por un espacio. Por ejemplo, debe haber un espacio en blanco entre -S y server_name.
-?
Especifica que debe devolverse el diagrama de sintaxis para sqlmaint. Este parámetro debe utilizarse solo.-Sserver_name[ **\instance_name]
Especifica la instancia de destino de MicrosoftSQL Server. Especifique server_name para conectarse a la instancia predeterminada del SQL Server Database Engine (Motor de base de datos de SQL Server) en ese servidor. Especifique server_name\**instance_name para conectar con una instancia con nombre del Database Engine (Motor de base de datos) en ese servidor. Si no se especifica ningún servidor, sqlmaint se conecta a la instancia predeterminada del Database Engine (Motor de base de datos) en el equipo local.-Ulogin_ID
Especifica el Id. de inicio de sesión que va a utilizarse para conectar al servidor. Si no se especifica, sqlmaint intenta utilizar la autenticación de Microsoft Windows. Si login_ID contiene caracteres especiales, debe incluirse entre comillas dobles ("); de lo contrario, las comillas dobles son opcionales.Nota de seguridad
Siempre que sea posible, utilice la autenticación de Windows.
-Ppassword
Especifica la contraseña para el Id. de inicio de sesión. Sólo tiene validez si también se especifica el parámetro -U. Si password contiene caracteres especiales, debe incluirse entre comillas dobles; de lo contrario, las comillas dobles son opcionales.Nota de seguridad
La contraseña no se enmascara. Siempre que sea posible, utilice la autenticación de Windows.
-Ddatabase_name
Especifica el nombre de la base de datos en que se va a realizar la operación de mantenimiento. Si database_name contiene caracteres especiales, debe incluirse entre comillas dobles; de lo contrario, las comillas dobles son opcionales.-PlanNamename
Especifica el nombre de un plan de mantenimiento de base de datos definido mediante el Asistente para planes de mantenimiento de bases de datos. La única información del plan que sqlmaint usa es la lista de las bases de datos. Todas las actividades de mantenimiento que se especifiquen en los demás parámetros de sqlmaint se aplicarán a esta lista de bases de datos.-PlanIDguid
Especifica el identificador exclusivo global (GUID) de un plan de mantenimiento de base de datos definido mediante el Asistente para planes de mantenimiento de bases de datos. La única información del plan que sqlmaint usa es la lista de las bases de datos. Todas las actividades de mantenimiento que se especifiquen en los demás parámetros de sqlmaint se aplicarán a esta lista de bases de datos. Debe coincidir con un valor de plan_id en msdb.dbo.sysdbmaintplans.-Rpttext_file
Especifica la ruta de acceso completa y el nombre del archivo en que se va a generar el informe. También se genera el informe en la pantalla. El informe mantiene información de las versiones al agregar una fecha al nombre de archivo. La fecha se genera de la siguiente manera: al final del nombre de archivo pero antes del punto, con el formato _yyyyMMddhhmm. yyyy = año, MM = mes, dd = día, hh = hora, mm = minuto.Si ejecuta el programa a las 10:23 a.m. del 1 de diciembre de 1996 y éste es el valor de text_file:
c:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks_maint.rpt
El nombre del archivo generado será:
c:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks_maint_199612011023.rpt
Se requiere el nombre de archivo UNC (Convención de nomenclatura universal) para text_file cuando sqlmaint tiene acceso a un servidor remoto.
-To operator_name
Especifica el operador al que se envía el informe generado a través de SQL Mail.-HtmlRpthtml_file
Especifica la ruta de acceso completa y el nombre del archivo en el que se va a generar el informe HTML. sqlmaint genera el nombre del archivo agregando una cadena con el formato _aaaaMMddhhmm en el nombre de archivo, al igual que con el parámetro -Rpt.Se requiere el nombre UNC completo del archivo para html_file cuando sqlmaint tiene acceso a un servidor remoto.
-DelHtmlRpt <time_period>
Especifica que debe eliminarse cualquier informe HTML del directorio de informes si el intervalo posterior a la creación del archivo de informe supera el valor de <time_period>. -DelHtmlRpt busca archivos cuyo nombre se ajuste al patrón generado a partir del parámetro html_file. Si html_file es C:\Archivos de programa\Microsoft SQL Server\Mssql\Backup\AdventureWorks_maint.htm, -DelHtmlRpt causará que sqlmaint elimine todos los archivos cuyos nombres coincidan con el patrón C:\Archivos de programa\Microsoft SQL Server\Mssql\Backup\AdventureWorks_maint*.htm y que sean más antiguos que el valor de <time_period> especificado.-RmUnusedSpacethreshold_percent free_percent
Especifica que se elimine el espacio no utilizado de la base de datos especificada en -D. Esta opción sólo resulta útil para aquellas bases de datos definidas para crecer automáticamente. Threshold_percent especifica en megabytes el tamaño que debe alcanzar la base de datos antes de que sqlmaint intente eliminar el espacio de datos no utilizado. Si la base de datos es inferior al valor de threshold_percent, no se realiza ninguna acción. Free_percent especifica la cantidad de espacio no utilizado que debe conservarse en la base de datos, especificado como porcentaje del tamaño final de la base de datos. Por ejemplo, si una base de datos de 200 MB contiene 100 MB de datos y se especifica el valor 10 para free_percent, el tamaño final de la base de datos será de 110 MB. Tenga en cuenta que una base de datos no se ampliará si ocupa menos espacio que la suma de free_percent más el espacio ocupado por los datos de la base de datos. Por ejemplo, si una base de datos de 108 MB tiene 100 MB de datos y se especifica 10 para free_percent, la base de datos no se ampliará a 110 MB; se mantendrá con un espacio de 108 MB.-CkDB | -CkDBNoIdx
Especifica que se ejecute una instrucción DBCC CHECKDB o una instrucción DBCC CHECKDB con la opción NOINDEX en la base de datos especificada en -D. Para obtener más información, vea DBCC CHECKDB.Se escribe una advertencia en text_file si la base de datos se está utilizando cuando se ejecuta sqlmaint .
-CkAl | -CkAlNoIdx
Especifica que se ejecute una instrucción DBCC CHECKALLOC con la opción NOINDEX en la base de datos especificada en -D. Para obtener más información, vea DBCC CHECKALLOC (Transact-SQL).-CkCat
Especifica que se ejecute una instrucción DBCC CHECKCATALOG (Transact-SQL) en la base de datos especificada en -D. Para obtener más información, vea DBCC CHECKCATALOG (Transact-SQL).-UpdOptiStatssample_percent
Especifica que se ejecute la instrucción siguiente en cada una de las tablas de la base de datos:UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT
Si las tablas contienen columnas calculadas, también debe especificar el argumento -SupportedComputedColumn cuando utilice -UpdOptiStats.
Para obtener más información, vea UPDATE STATISTICS (Transact-SQL).
-RebldIdxfree_space
Especifica que se deben volver a generar los índices de las tablas de la base de datos de destino mediante el valor porcentual de free_space en proporción inversa al factor de relleno. Por ejemplo, si el porcentaje de free_space es 30, el factor de relleno utilizado será 70. Si se especifica un valor de 100 como porcentaje de free_space, se volverán a generar los índices con el valor de factor de relleno original.Si los índices están en columnas calculadas, también debe especificar el argumento -SupportComputedColumn cuando utilice -RebldIdx.
-SupportComputedColumn
Debe especificarse para ejecutar los comandos de mantenimiento de DBCC con sqlmaint en columnas calculadas.-WriteHistory
Especifica que se escriba una entrada en msdb.dbo.sysdbmaintplan_history para cada acción de mantenimiento que realice sqlmaint. Si se especifica -PlanName o -PlanID, las entradas de sysdbmaintplan_history utilizan el identificador del plan especificado. Si se especifica -D, las entradas de sysdbmaintplan_history para el identificador de plan estarán compuestas de ceros.-BkUpDB [ backup_path] | -BkUpLog [ backup_path ]
Especifica una operación de copia de seguridad. -BkUpDb realiza una copia de seguridad de toda la base de datos. -BkUpLog realiza una copia de seguridad del registro de transacciones únicamente.backup_path especifica el directorio de la copia de seguridad. backup_path no es necesario si también se especifica -UseDefDir. Si se especifican ambos, se reemplaza por -UseDefDir. La copia de seguridad se puede colocar en un directorio o en una dirección de dispositivo de cinta (por ejemplo, \\.\TAPE0). El nombre de archivo de una copia de seguridad de base de datos se genera automáticamente del modo siguiente:
dbname_db_yyyyMMddhhmm.BAK
donde
dbname es el nombre de la base de datos de la que se realiza una copia de seguridad.
yyyyMMddhhmm es el momento de la operación de copia de seguridad, donde yyyy = año, MM = mes, dd = día, hh = hora y mm = minuto.
El nombre del archivo para una copia de seguridad de transacciones se genera automáticamente con un formato similar:
dbname_log_yyyymmddhhmm.BAK
Si utiliza el parámetro -BkUpDB, también deberá especificar el medio con el parámetro -BkUpMedia.
-BkUpMedia
Especifica el tipo de medio para la copia de seguridad (DISK o TAPE).DISK
Especifica que el medio de la copia de seguridad es un disco.-DelBkUps< time_period >
Para copias de seguridad en disco, especifica que deben eliminarse todos los archivos de copia de seguridad del directorio de copia de seguridad si el intervalo posterior a la creación de la copia de seguridad supera el valor de <time_period>.-CrBkSubDir
Para copias de seguridad en disco, especifica que se cree un subdirectorio en el directorio [backup_path] o en el directorio de copia de seguridad predeterminado si también se especifica -UseDefDir . El nombre del subdirectorio se genera a partir del nombre de la base de datos especificado en -D. -CrBkSubDir ofrece una sencilla forma de poner todas las copias de seguridad de diferentes bases de datos en subdirectorios separados sin tener que cambiar el parámetro [backup_path].-UseDefDir
Para copias de seguridad en disco, especifica que se cree el archivo de copia de seguridad en el directorio de copia de seguridad predeterminado. UseDefDir anula backup_path si se especifican ambos parámetros. El directorio predeterminado de copia de seguridad en una instalación predeterminada de MicrosoftSQL Server es C:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup.TAPE
Especifica que el medio de copia de seguridad es una cinta.-BkUpOnlyIfClean
Indica que sólo se realice la copia de seguridad si las comprobaciones -Ck especificadas no han detectado problemas en los datos. Las acciones de mantenimiento se ejecutan en la misma secuencia en que aparecen en el símbolo del sistema. Especifique los parámetros -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl o -CkCat antes de los parámetros -BkUpDB/-BkUpLog si también va a especificar -BkUpOnlyIfClean o la copia de seguridad se producirá independientemente de si la comprobación notifica problemas.-VrfyBackup
Especifica que sólo se ejecute RESTORE VERIFYONLY en la copia de seguridad cuando finalice.number[minutes| hours| day| weeks| months]
Especifica el intervalo de tiempo que se utiliza para determinar si un informe o un archivo de copia de seguridad son suficientemente antiguos para poder eliminarlos. number es un número entero seguido (sin espacio) de una unidad de tiempo. Ejemplos válidos:12weeks
3months
15days
Si sólo se especifica number, la parte de fecha predeterminada es weeks.
Notas
La utilidad sqlmaint realiza operaciones de mantenimiento en una o varias bases de datos. Si se especifica -D, las operaciones especificadas en los modificadores restantes sólo se realizan en la base de datos indicada. Si se especifica -PlanName o -PlanID, la única información que sqlmaint recupera del plan de mantenimiento indicado es la lista de bases de datos. Todas las operaciones especificadas en los parámetros sqlmaint restantes se aplican en cada base de datos de la lista obtenida del plan. La utilidad sqlmaint no aplica ninguna de las actividades de mantenimiento definidas en el propio plan.
La utilidad sqlmaint devuelve 0 si se ejecuta correctamente o devuelve 1 si se produce algún error. Se informa del error:
Si falla alguna de las operaciones de mantenimiento.
Si las comprobaciones -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl o -CkCat encuentran problemas con los datos.
Si se detecta un error general.
Permisos
La utilidad sqlmaint puede ejecutarla cualquier usuario de Windows con permiso de lectura y ejecución para sqlmaint.exe, que está almacenado de forma predeterminada en la carpeta x:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER1\MSSQL\Binn. Además, el inicio de sesión de SQL Server especificado con -login_ID debe tener los permisos de SQL Server necesarios para realizar la acción especificada. Si la conexión con SQL Server utiliza la autenticación de Windows, el inicio de sesión de SQL Server asignado al usuario de Windows autenticado debe tener los permisos de SQL Server necesarios para realizar la acción especificada.
Por ejemplo, para utilizar -BkUpDB, es necesario tener permiso para ejecutar la instrucción BACKUP. Para utilizar el argumento -UpdOptiStats, es necesario tener permiso para ejecutar la instrucción UPDATE STATISTICS. Para obtener más información, vea las secciones sobre permisos en los temas correspondientes de los Libros en pantalla.
Ejemplos
A. Realizar comprobaciones DBCC en la base de datos AdventureWorks
sqlmaint -S MyServer -D AdventureWorks -CkDB -CkAl -CkCat -Rpt C:\MyReports\AdvWks_chk.rpt
B. Actualizar estadísticas mediante una muestra del 15% en todas las bases de datos de un plan. Además, reducir todas las bases de datos que hayan alcanzado los 110 MB para que tengan sólo el 10% de espacio disponible
sqlmaint -S MyServer -PlanName MyUserDBPlan -UpdOptiStats 15 -RmUnusedSpace 110 10
C. Realizar una copia de seguridad de todas las bases de datos de un plan en los subdirectorios individuales del directorio predeterminado x:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup. Además, eliminar las copias de seguridad con una antigüedad superior a 2 semanas
sqlmaint -S MyServer -PlanName MyUserDBPlan -BkUpDB -BkUpMedia DISK -UseDefDir -CrBkSubDir -DelBkUps 2weeks
D. Realizar una copia de seguridad de la base de datos AdventureWorks en el directorio predeterminado x:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup.
sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir