Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Managed Instance
Las copias de los mensajes de Correo electrónico de base de datos y sus datos adjuntos se conservan en msdb
tablas junto con el registro de eventos de Correo electrónico de base de datos. Puede reducir el tamaño de las tablas y eliminar los mensajes y eventos que ya no sean necesarios periódicamente.
Los procedimientos siguientes permiten crear un trabajo del Agente SQL Server para automatizar el proceso.
Requisitos previos
Para ejecutar comandos T-SQL en la instancia de SQL Server, use SQL Server Management Studio (SSMS), la extensión MSSQL para Visual Studio Code, sqlcmd o la herramienta de consulta T-SQL favorita.
Recomendaciones
Considere la posibilidad de comprobar errores y supervisar este trabajo para enviar un mensaje de correo electrónico a los operadores si se produce un error en este trabajo de archivo.
Opcionalmente, puede mover datos de Correo electrónico de base de datos archivados a una base de datos de archivo personalizada fuera de msdb
o exportarlos desde SQL Server.
Permisos
Debe ser miembro del rol fijo de servidor sysadmin para ejecutar los procedimientos almacenados que se describen en este tema.
Creación de un trabajo de Correo electrónico de base de datos de archivo
En el primer procedimiento se crea con cuatro pasos un trabajo denominado Archivar mensajes del Correo electrónico de base de datos.
Copie todos los mensajes de las tablas de Correo de base de datos a una nueva tabla nombrada con el mes anterior, con el formato
DBMailArchive__<year_month>
.Copie los datos adjuntos relacionados con los mensajes copiados en el primer paso, de las tablas correo electrónico de base de datos a una nueva tabla denominada después del mes anterior en el formato
DBMailArchive_Attachments_<year_month>
.Copie los eventos del registro de eventos de Correo de base de datos que están relacionados con los mensajes copiados en el primer paso, de las tablas de Correo de base de datos a una nueva tabla nombrada con el mes anterior en el formato
DBMailArchive_Log_<year_month>
.Eliminar los registros de los elementos de correo transferidos de las tablas del Correo electrónico de base de datos.
Eliminar los eventos relacionados con los elementos de correo transferidos del registro de eventos del Correo electrónico de base de datos.
Programar el trabajo para ejecutar periódicamente.
Crear un trabajo del Agente SQL Server
Para los pasos siguientes, se usa SQL Server Management Studio (SSMS). Descargue la versión más reciente de SSMS en aka.ms/ssms.
Conéctese a la instancia de SQL Server.
En el Explorador de objetos, expanda Agente SQL Server, haga clic con el botón derecho en Trabajos y, a continuación, seleccione Nuevo trabajo.
En el cuadro Nombre del cuadro de diálogo Nuevo trabajo , escriba Archivar mensajes del Correo electrónico de base de datos.
En el cuadro Propietario , confirme que el propietario es miembro del rol fijo de servidor sysadmin .
En el cuadro Categoría , seleccione El mantenimiento de la base de datos.
En el cuadro Descripción , escriba Archivar mensajes de Correo electrónico de base de datos y, a continuación, seleccione Pasos.
Creación de un paso de trabajo para archivar los mensajes de Correo electrónico de base de datos
En la página Pasos , seleccione Nuevo.
En el cuadro Nombre del paso , escriba Copiar elementos del Correo electrónico de base de datos.
En el cuadro Tipo , seleccione Script Transact-SQL (T-SQL).
En el cuadro Base de datos , seleccione
msdb
.En el cuadro Comando , escriba la siguiente instrucción T-SQL para crear una tabla denominada después del mes anterior, que contiene filas anteriores al inicio del mes actual.
DECLARE @LastMonth nvarchar(12); DECLARE @CopyDate nvarchar(20) ; DECLARE @CreateTable nvarchar(250) ; SET @LastMonth = (SELECT CAST(DATEPART(yyyy,GETDATE()) AS CHAR(4)) + '_' + CAST(DATEPART(mm,GETDATE())-1 AS varchar(2))) ; SET @CopyDate = (SELECT CAST(CONVERT(char(8), CURRENT_TIMESTAMP- DATEPART(dd,GETDATE()-1), 112) AS datetime)) SET @CreateTable = 'SELECT * INTO msdb.dbo.[DBMailArchive_' + @LastMonth + '] FROM sysmail_allitems WHERE send_request_date < ''' + @CopyDate +''''; EXEC sp_executesql @CreateTable ;
Seleccione Aceptar para guardar el paso.
Crear un paso de trabajo para archivar los archivos adjuntos de Database Mail
En la página Pasos , seleccione Nuevo.
En el cuadro Nombre del paso , escriba Copiar datos adjuntos del Correo electrónico de base de datos.
En el cuadro Tipo , seleccione Script Transact-SQL (T-SQL).
En el cuadro Base de datos , seleccione
msdb
.En el cuadro Comando , escriba la instrucción siguiente para crear una tabla de datos adjuntos con el nombre del mes anterior y los archivos adjuntos correspondientes a los mensajes transferidos en el paso anterior:
DECLARE @LastMonth nvarchar(12); DECLARE @CopyDate nvarchar(20) ; DECLARE @CreateTable nvarchar(250) ; SET @LastMonth = (SELECT CAST(DATEPART(yyyy,GETDATE()) AS CHAR(4)) + '_' + CAST(DATEPART(mm,GETDATE())-1 AS varchar(2))) ; SET @CopyDate = (SELECT CAST(CONVERT(char(8), CURRENT_TIMESTAMP- DATEPART(dd,GETDATE()-1), 112) AS datetime)) SET @CreateTable = 'SELECT * INTO msdb.dbo.[DBMailArchive_Attachments_' + @LastMonth + '] FROM sysmail_attachments WHERE mailitem_id in (SELECT DISTINCT mailitem_id FROM [DBMailArchive_' + @LastMonth + '] )'; EXEC sp_executesql @CreateTable ;
Seleccione Aceptar para guardar el paso.
Crear un paso de trabajo para archivar el registro de Correo de la base de datos
En la página Pasos , seleccione Nuevo.
En el cuadro Nombre del paso , escriba Copiar el registro del Correo electrónico de base de datos.
En el cuadro Tipo , seleccione Script Transact-SQL (T-SQL).
En el cuadro Base de datos , seleccione
msdb
.En el cuadro Comando , escriba la instrucción siguiente para crear una tabla de registros con el nombre del mes anterior y las entradas de registro correspondientes a los mensajes transferidos en el paso anterior:
DECLARE @LastMonth nvarchar(12); DECLARE @CopyDate nvarchar(20) ; DECLARE @CreateTable nvarchar(250) ; SET @LastMonth = (SELECT CAST(DATEPART(yyyy,GETDATE()) AS CHAR(4)) + '_' + CAST(DATEPART(mm,GETDATE())-1 AS varchar(2))) ; SET @CopyDate = (SELECT CAST(CONVERT(char(8), CURRENT_TIMESTAMP- DATEPART(dd,GETDATE()-1), 112) AS datetime)) SET @CreateTable = 'SELECT * INTO msdb.dbo.[DBMailArchive_Log_' + @LastMonth + '] FROM sysmail_Event_Log WHERE mailitem_id in (SELECT DISTINCT mailitem_id FROM [DBMailArchive_' + @LastMonth + '] )'; EXEC sp_executesql @CreateTable ;
Seleccione Aceptar para guardar el paso.
Crear un paso de trabajo para eliminar las filas archivadas de Database Mail
En la página Pasos , seleccione Nuevo.
En el cuadro Nombre del paso , escriba Eliminar filas del Correo electrónico de base de datos.
En el cuadro Tipo , seleccione Script Transact-SQL (T-SQL).
En el cuadro Base de datos , seleccione
msdb
.En el cuadro Comando , escriba la instrucción siguiente para quitar las filas anteriores al mes actual de las tablas del Correo electrónico de base de datos:
DECLARE @CopyDate nvarchar(20) ; SET @CopyDate = (SELECT CAST(CONVERT(char(8), CURRENT_TIMESTAMP- DATEPART(dd,GETDATE()-1), 112) AS datetime)) ; EXECUTE msdb.dbo.sysmail_delete_mailitems_sp @sent_before = @CopyDate ;
Seleccione Aceptar para guardar el paso.
Crear una tarea para eliminar los elementos archivados del registro de eventos de Database Mail
En la página Pasos , seleccione Nuevo.
En el cuadro Nombre del paso, escriba Quitar filas del registro de eventos de Correo de Base de Datos.
En el cuadro Tipo , seleccione Script Transact-SQL (T-SQL).
En el cuadro Comando , escriba la instrucción siguiente para quitar las filas anteriores al mes actual del registro de eventos del Correo electrónico de base de datos:
DECLARE @CopyDate nvarchar(20) ; SET @CopyDate = (SELECT CAST(CONVERT(char(8), CURRENT_TIMESTAMP- DATEPART(dd,GETDATE()-1), 112) AS datetime)) ; EXECUTE msdb.dbo.sysmail_delete_log_sp @logged_before = @CopyDate ;
Seleccione Aceptar para guardar el paso.
Programar el trabajo para que se ejecute periódicamente
En el cuadro de diálogo Nuevo trabajo , seleccione Programaciones.
En la página Programaciones , seleccione Nuevo.
En el cuadro Nombre , escriba Archivar mensajes del Correo electrónico de base de datos.
En el cuadro Tipo de programación , seleccione Periódica.
En el área Frecuencia , seleccione las opciones para ejecutar el trabajo periódicamente, por ejemplo una vez al mes.
En el área Frecuencia diaria, seleccione Sucede una vez a las <hora>.
Compruebe que las otras opciones están configuradas como desee y, a continuación, seleccione Aceptar para guardar la programación.
Seleccione Aceptar para guardar el trabajo.