Delen via


Een SQL Server Agent-taak maken om database-e-mailberichten en gebeurtenislogboeken te archiveren

van toepassing op:SQL ServerAzure SQL Managed Instance

Kopieën van Database Mail-berichten en de bijbehorende bijlagen worden bewaard in msdb tabellen, samen met het gebeurtenislogboek van Database Mail. Mogelijk wilt u de grootte van de tabellen verkleinen en berichten en gebeurtenissen archiveren die niet meer nodig zijn.

Met de volgende procedures maakt u een SQL Server Agent-taak om het proces te automatiseren.

Voorwaarden

Als u T-SQL-opdrachten wilt uitvoeren op uw SQL Server-exemplaar, gebruikt u SQL Server Management Studio (SSMS), de MSSQL-extensie voor Visual Studio Code, sqlcmd of uw favoriete hulpprogramma voor T-SQL-query's.

Aanbevelingen

Overweeg foutcontrole en controleer deze taak om een e-mailbericht te verzenden naar operators als deze archieftaak mislukt.

Desgewenst kunt u gearchiveerde Database Mail-gegevens verplaatsen naar een aangepaste archiefdatabase buiten msdbof exporteren vanuit SQL Server.

Machtigingen

U moet lid zijn van de sysadmin vaste serverfunctie om de opgeslagen procedures uit te voeren die in dit onderwerp worden beschreven.

Een archiefdatabase-e-mailtaak maken

Met de eerste procedure maakt u een taak met de naam Archive Database Mail met de volgende stappen.

  1. Kopieer alle berichten uit de Database Mail-tabellen naar een nieuwe tabel met de naam van de vorige maand, in de indeling DBMailArchive__<year_month>.

  2. Kopieer de bijlagen met betrekking tot de berichten die in de eerste stap zijn gekopieerd, van de Database Mail-tabellen naar een nieuwe tabel met de naam van de vorige maand in de indeling DBMailArchive_Attachments_<year_month>.

  3. Kopieer de gebeurtenissen uit het gebeurtenislogboek van Database Mail die zijn gerelateerd aan de berichten die in de eerste stap zijn gekopieerd, van de Database Mail-tabellen naar een nieuwe tabel met de naam van de vorige maand in de indeling DBMailArchive_Log_<year_month>.

  4. Verwijder de records van de overgedragen e-mailitems uit de database-mailtabellen.

  5. Verwijder de gebeurtenissen met betrekking tot de overgedragen e-mailitems uit het gebeurtenislogboek Database Mail.

  6. Plan de taak periodiek uit te voeren.

Een SQL Server Agent-taak maken

In de volgende stappen wordt SQL Server Management Studio (SSMS) gebruikt. Download de nieuwste versie van SSMS op aka.ms/ssms.

  1. Maak verbinding met het SQL Server-exemplaar.

  2. Vouw in Objectverkenner SQL Server Agent uit, klik met de rechtermuisknop op Taken en selecteer Nieuwe taak.

  3. Typ in het dialoogvenster Nieuwe baan in het vak NaamArchiveer Database Mail.

  4. Controleer in het vak Eigenaar of de eigenaar lid is van de sysadmin vaste serverfunctie.

  5. Selecteer in het vak Categorie het databaseonderhoud.

  6. Typ in het vak Beschrijvinge-mailberichten van archiefdatabase en selecteer vervolgens Stappen.

Een taakstap maken om de database-e-mailberichten te archiveren

  1. Selecteer Nieuw op de pagina Stappen.

  2. Typ in het vak Stapnaam de tekst Database-e-mailitems kopiëren.

  3. Selecteer in het veld TypeTransact-SQL script (T-SQL).

  4. Selecteer in het vak Database de optie msdb.

  5. Typ in het opdrachtvak de volgende T-SQL-instructie om een tabel te maken met de naam van de vorige maand, met rijen die ouder zijn dan het begin van de huidige maand.

    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 ;  
    
  6. Selecteer OK om de stap op te slaan.

Een taakstap maken om de Database Mail-bijlagen te archiveren

  1. Selecteer Nieuw op de pagina Stappen.

  2. Typ in het vak StapnaamDatabase-e-mailbijlagen kopiëren.

  3. Selecteer in het veld TypeTransact-SQL script (T-SQL).

  4. Selecteer in het vak Database de optie msdb.

  5. Typ in het vak Opdracht de volgende instructie om een tabel met bijlagen te maken met de naam van de vorige maand, met daarin de bijlagen die overeenkomen met de berichten die in de vorige stap zijn overgebracht:

    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 ;  
    
  6. Selecteer OK om de stap op te slaan.

Een taakstap maken om het Database Mail-logboek te archiveren

  1. Selecteer Nieuw op de pagina Stappen.

  2. Typ in het vak StapnaamDatabase-e-maillogboek kopiëren.

  3. Selecteer in het veld TypeTransact-SQL script (T-SQL).

  4. Selecteer in het vak Database de optie msdb.

  5. Typ in het vak Opdracht de volgende instructie om een logboektabel te maken met de naam van de vorige maand, met daarin de logboekvermeldingen die overeenkomen met de berichten die in de vorige stap zijn overgebracht:

    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 ;  
    
  6. Selecteer OK om de stap op te slaan.

Een taakstap maken om de gearchiveerde rijen uit Database Mail te verwijderen

  1. Selecteer Nieuw op de pagina Stappen.

  2. Typ in het vak StapnaamRijen verwijderen uit Database Mail.

  3. Selecteer in het veld TypeTransact-SQL script (T-SQL).

  4. Selecteer in het vak Database de optie msdb.

  5. Typ in het vak Opdracht de volgende instructie om rijen te verwijderen die ouder zijn dan de huidige maand uit de database-mailtabellen:

    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 ;  
    
  6. Selecteer OK om de stap op te slaan.

Een taakstap maken om de gearchiveerde items te verwijderen uit het gebeurtenislogboek van Database Mail

  1. Selecteer Nieuw op de pagina Stappen.

  2. Typ in het vak StapnaamVerwijder rijen uit het gebeurtenislogboek van Database Mail.

  3. Selecteer in het veld TypeTransact-SQL script (T-SQL).

  4. Typ in het vak Opdracht de volgende instructie om rijen te verwijderen die ouder zijn dan de huidige maand uit het gebeurtenislogboek van Database Mail:

    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 ;  
    
  5. Selecteer OK om de stap op te slaan.

Plan de taak om periodiek uit te voeren

  1. Selecteer Planningen in het dialoogvenster Nieuwe taak.

  2. Selecteer Nieuw op de pagina Planningen.

  3. Typ in het Naam veld Archive Database Mail.

  4. Selecteer in het vak Planningstype de optie Terugkerende.

  5. Selecteer in het gebied Frequentie de opties om de taak periodiek uit te voeren, bijvoorbeeld één keer per maand.

  6. Kies in het veld Dagelijkse frequentieEenmalig op <tijd>.

  7. Controleer of de andere opties zijn geconfigureerd zoals u wilt en selecteer VERVOLGENS OK om de planning op te slaan.

  8. Kies OK om de taak op te slaan.