Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
azure SQL Managed Instance
Kopie zpráv databázové pošty a jejich příloh se uchovávají v msdb tabulkách spolu s protokolem událostí Databázová pošta. Pravidelně můžete chtít zmenšit velikost tabulek a archivních zpráv a událostí, které už nepotřebujete.
Následující postupy vytvoří úlohu agenta SQL Serveru pro automatizaci procesu.
Požadavky
Pokud chcete spouštět příkazy T-SQL v instanci SQL Serveru, použijte SQL Server Management Studio (SSMS),rozšíření MSSQL pro Visual Studio Code, sqlcmd nebo váš oblíbený nástroj pro dotazování T-SQL.
Doporučení
Zvažte kontrolu chyb a monitorujte tuto úlohu a odešlete operátorům e-mailovou zprávu, pokud tato úloha archivace selže.
Volitelně můžete archivovaná data databázové pošty přesunout do vlastní archivní databáze mimo msdbdatabázi nebo je exportovat z SQL Serveru.
Povolení
Abyste mohli spouštět uložené procedury popsané v tomto tématu, musíte být členem pevné role serveru sysadmin .
Vytvoření úlohy Archivní databázová pošta
První postup vytvoří úlohu s názvem Archivovat databázovou poštu pomocí následujícího postupu.
Zkopírujte všechny zprávy z tabulek Databázová pošta do nové tabulky pojmenované po předchozím měsíci ve formátu
DBMailArchive__<year_month>.Zkopírujte přílohy související se zprávami zkopírovanými v prvním kroku z tabulek Databázová pošta do nové tabulky pojmenované po předchozím měsíci ve formátu
DBMailArchive_Attachments_<year_month>.Zkopírujte události z protokolu událostí Databázové pošty, které souvisejí se zprávami zkopírovanými v prvním kroku, z tabulek Databázová pošta do nové tabulky pojmenované po předchozím měsíci ve formátu
DBMailArchive_Log_<year_month>.Odstraňte záznamy přenesených položek pošty z tabulek Databázová pošta.
Odstraňte události související s přenesenými položkami pošty z protokolu událostí Databázové pošty.
Naplánujte úlohu tak, aby se spouštěla pravidelně.
Vytvoření úlohy agenta SQL Serveru
Následující kroky používají APLIKACI SQL Server Management Studio (SSMS). Stáhněte si nejnovější verzi SSMS na aka.ms/ssms.
Připojte se k instanci SQL Serveru.
V Průzkumníku objektů rozbalte SQL Server Agent, pravým tlačítkem myši klepněte na Úlohy a pak vyberte Nová úloha.
V dialogovém okně Nová úloha zadejte do pole Názevarchivovat databázovou poštu.
V poli Vlastník ověřte, že je vlastník členem pevné role serveru správce systému .
V poli Kategorie vyberte položku Údržba databáze.
Do pole Popis zadejte archivní zprávy databázové pošty a pak vyberte Kroky.
Vytvoření kroku úlohy pro archivaci zpráv databázové pošty
Na stránce Kroky vyberte Nový.
Do pole Název kroku zadejte Kopírovat položky databázové pošty.
V poli Typ vyberte Transact-SQL skript (T-SQL).
V poli Databáze vyberte
msdb.Do pole Příkaz zadejte následující příkaz T-SQL, který vytvoří tabulku pojmenovanou po předchozím měsíci obsahující řádky starší než začátek aktuálního měsíce.
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 ;Vyberte OK a uložte krok.
Vytvoření kroku úlohy pro archivaci příloh databázové pošty
Na stránce Kroky vyberte Nový.
Do pole Název kroku zadejte Kopírovat přílohy databázové pošty.
V poli Typ vyberte Transact-SQL skript (T-SQL).
V poli Databáze vyberte
msdb.Do pole Příkaz zadejte následující příkaz, který vytvoří tabulku příloh pojmenovanou po předchozím měsíci obsahující přílohy, které odpovídají zprávám přeneseným v předchozím kroku:
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 ;Vyberte OK a uložte krok.
Vytvoření kroku úlohy pro archivaci protokolu databázové pošty
Na stránce Kroky vyberte Nový.
Do pole Název kroku zadejte Kopírovat protokol databázové pošty.
V poli Typ vyberte Transact-SQL skript (T-SQL).
V poli Databáze vyberte
msdb.Do pole Příkaz zadejte následující příkaz, který vytvoří tabulku protokolu pojmenovanou po předchozím měsíci obsahující položky protokolu, které odpovídají zprávám přeneseným v předchozím kroku:
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 ;Vyberte OK a uložte krok.
Vytvořte krok úlohy k odstranění archivovaných řádků z Database Mail.
Na stránce Kroky vyberte Nový.
Do pole Název kroku zadejte Odebrat řádky z databázové pošty.
V poli Typ vyberte Transact-SQL skript (T-SQL).
V poli Databáze vyberte
msdb.Do pole Příkaz zadejte následující příkaz, který odebere řádky starší než aktuální měsíc z tabulek Databázové pošty:
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 ;Vyberte OK a uložte krok.
Vytvoření kroku úlohy pro odebrání archivovaných položek z protokolu událostí Databázové pošty
Na stránce Kroky vyberte Nový.
Do pole Název kroku zadejte Odebrat řádky z protokolu událostí Databázové pošty.
V poli Typ vyberte Transact-SQL skript (T-SQL).
Do pole Příkaz zadejte následující příkaz, který odebere řádky starší než aktuální měsíc z protokolu událostí Databázové pošty:
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 ;Vyberte OK a uložte krok.
Naplánujte pravidelné spuštění úlohy
V dialogovém okně Nová úloha vyberte Plány.
Na stránce Plány vyberte Nový.
Do pole Název zadejte Archivovat databázovou poštu.
V poli Typ plánu vyberte Možnost Opakovat.
V oblasti Frekvence vyberte možnosti pro pravidelné spuštění úlohy, například jednou měsíčně.
V oblasti Denní frekvence vyberte Nastane jednou v <čase>.
Ověřte, že jsou ostatní možnosti nakonfigurované podle potřeby, a pak vyberte OK , aby se plán uložil.
Kliknutím na TLAČÍTKO OK uložte úlohu.