Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server
Azure SQL Managed Instance
Kopie wiadomości poczty bazy danych i ich załączniki są przechowywane w msdb tabelach wraz z dziennikiem zdarzeń poczty bazy danych. Okresowo możesz zmniejszyć rozmiar tabel i archiwalnych komunikatów i zdarzeń, które nie są już potrzebne.
Poniższe procedury umożliwiają utworzenie zadania agenta programu SQL Server w celu zautomatyzowania procesu.
Warunki wstępne
Aby uruchomić polecenia języka T-SQL w wystąpieniu programu SQL Server, użyj programu SQL Server Management Studio (SSMS),rozszerzenia MSSQL dla programu Visual Studio Code, narzędzia sqlcmd lub ulubionego narzędzia do wykonywania zapytań T-SQL.
Zalecenia
Rozważ sprawdzenie błędów i monitorowanie tego zadania, aby wysłać e-mail do operatorów, jeśli zadanie archiwizacji zakończy się niepowodzeniem.
Opcjonalnie można przenieść zarchiwizowane dane poczty bazy danych do niestandardowej bazy archiwalnej poza msdb lub wyeksportować je z SQL Server.
Uprawnienia
Aby wykonać opisane w tym temacie procedury składowane, musisz być członkiem stałej roli serwera sysadmin.
Tworzenie zadania poczty bazy danych archiwum
Pierwsza procedura tworzy zadanie o nazwie Archive Database Mail z poniższymi krokami.
Skopiuj wszystkie komunikaty z tabel Database Mail do nowej tabeli o nazwie po poprzednim miesiącu w formacie
DBMailArchive__<year_month>.Skopiuj załączniki powiązane z wiadomościami skopiowanymi w pierwszym kroku z tabel Poczty bazy danych do nowej tabeli nazwanej poprzednim miesiącem w formacie
DBMailArchive_Attachments_<year_month>.Skopiuj zdarzenia z dziennika zdarzeń poczty bazy danych, które są powiązane z komunikatami skopiowanymi w pierwszym kroku, z tabel Poczta bazy danych do nowej tabeli o nazwie nawiązującej do poprzedniego miesiąca w formacie
DBMailArchive_Log_<year_month>.Usuń rekordy przeniesionych elementów poczty z tabel Poczty bazy danych.
Usuń zdarzenia związane z przekazanymi elementami poczty z dziennika zdarzeń poczty bazy danych.
Zaplanuj, aby zadanie uruchamiało się okresowo.
Tworzenie zadania agenta programu SQL Server
W poniższych krokach jest używany program SQL Server Management Studio (SSMS). Pobierz najnowszą wersję programu SSMS pod adresem aka.ms/ssms.
Połącz się z wystąpieniem programu SQL Server.
W Eksploratorze obiektów rozwiń węzeł SQL Server Agent, kliknij prawym przyciskiem myszy pozycję Zadania, a następnie wybierz pozycję Nowe zadanie.
W oknie dialogowym Nowe zadanie w polu Nazwa wpisz Archive Database Mail.
W polu właściciel upewnij się, że właściciel jest członkiem stałej roli serwera sysadmin.
W polu Kategoria wybierz pozycję Konserwacja bazy danych.
W polu Opis wpisz Archiwizuj wiadomości Database Mail, a następnie wybierz Kroki.
Utwórz krok zadania w celu zarchiwizowania wiadomości poczty Database Mail
Na stronie Kroki wybierz pozycję Nowy.
W polu Nazwa kroku wpisz Kopiuj elementy poczty w bazie danych.
W polu typu wybierz skrypt Transact-SQL (T-SQL).
W polu Baza danych wybierz pozycję
msdb.W polu Polecenie wpisz następującą instrukcję języka T-SQL, aby utworzyć tabelę o nazwie po poprzednim miesiącu zawierającą wiersze starsze niż początek bieżącego miesiąca.
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 ;Wybierz przycisk OK , aby zapisać krok.
Tworzenie etapu zadania w celu zarchiwizowania załączników poczty e-mail bazy danych
Na stronie Kroki wybierz pozycję Nowy.
W polu Nazwa kroku wpisz Kopiowanie załączników poczty bazy danych.
W polu typu wybierz skrypt Transact-SQL (T-SQL).
W polu Baza danych wybierz pozycję
msdb.W polecenia wpisz następującą instrukcję, aby utworzyć tabelę załączników o nazwie po poprzednim miesiącu, zawierającą załączniki odpowiadające komunikatom przesłanym w poprzednim 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 ;Wybierz przycisk OK , aby zapisać krok.
Utwórz krok zadania, aby zarchiwizować dziennik poczty e-mail w bazie danych.
Na stronie Kroki wybierz pozycję Nowy.
W polu Nazwa kroku wpisz Copy Database Mail Log.
W polu typu wybierz skrypt Transact-SQL (T-SQL).
W polu Baza danych wybierz pozycję
msdb.W polu polecenia wpisz następującą instrukcję, aby utworzyć tabelę dziennika nazwaną na podstawie poprzedniego miesiąca, zawierającą wpisy dziennika, które odpowiadają komunikatom przesłanym we wcześniejszym 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 ;Wybierz przycisk OK , aby zapisać krok.
Utwórz krok zadania, aby usunąć zarchiwizowane wiersze z Database Mail
Na stronie Kroki wybierz pozycję Nowy.
W polu Nazwa kroku wpisz Usuń wiersze z Database Mail.
W polu typu wybierz skrypt Transact-SQL (T-SQL).
W polu Baza danych wybierz pozycję
msdb.W polu polecenia wpisz następującą instrukcję, aby usunąć wiersze starsze niż bieżący miesiąc z tabel bazy danych poczty.
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 ;Wybierz przycisk OK , aby zapisać krok.
Utwórz krok zadania w celu usunięcia zarchiwizowanych elementów z dziennika zdarzeń poczty e-mail bazy danych
Na stronie Kroki wybierz pozycję Nowy.
W polu Nazwa kroku wpisz Usuń wiersze z dziennika zdarzeń poczty bazy danych.
W polu typu wybierz skrypt Transact-SQL (T-SQL).
W polu polecenia wpisz następującą instrukcję, aby usunąć wiersze starsze niż bieżący miesiąc z dziennika zdarzeń poczta bazy danych:
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 ;Wybierz przycisk OK , aby zapisać krok.
Zaplanuj okresowe uruchamianie zadania
W oknie dialogowym Nowe zadanie wybierz pozycję Harmonogramy.
Na stronie Harmonogramy wybierz pozycję Nowy.
W polu Nazwa wpisz Archive Database Mail.
W polu Typ harmonogramu wybierz Cykliczne.
W obszarze Częstotliwość, wybierz opcje okresowego uruchamiania zadania, na przykład raz w miesiącu.
W obszarze częstotliwości dziennej .
Sprawdź, czy inne opcje są skonfigurowane zgodnie z życzeniem, a następnie wybierz przycisk OK , aby zapisać harmonogram.
Wybierz przycisk OK , aby zapisać zadanie.