Uwaga
Dostęp do tej strony wymaga autoryzacji. Może 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 baz danych i ich załączników 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.
Przed rozpoczęciem: , Wymagania wstępne, zalecenia , uprawnienia
Do archiwizacji wiadomości i dzienników poczty bazy danych przy użyciu:SQL Server Agent
Przed rozpoczęciem
Warunki wstępne
Nowe tabele do przechowywania danych archiwum mogą znajdować się w specjalnej bazie danych archiwum. Alternatywnie można wyeksportować wiersze do pliku tekstowego.
Zalecenia
W środowisku produkcyjnym możesz dodać dodatkowe sprawdzanie błędów i wysłać wiadomość e-mail do operatorów, jeśli zadanie zakończy się niepowodzeniem.
Uprawnienia
Aby wykonać opisane w tym temacie procedury składowane, musisz być członkiem stałej roli serwera sysadmin.
Omówienie procesu
Pierwsza procedura tworzy zadanie o nazwie Archive Database Mail z poniższymi krokami.
Skopiuj wszystkie wiadomości 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 w bazie danych do nowej tabeli nazwanej na podstawie poprzedniego miesiąca w formacie DBMailArchive_Attachments_<year_month>.
Skopiuj zdarzenia z dziennika zdarzeń Database Mail, które są powiązane z komunikatami skopiowanymi w pierwszym kroku, z tabel Database Mail do nowej tabeli nazwanej na podstawie 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.
Aby utworzyć zadanie agenta programu SQL Server
W Eksploratorze obiektów rozwiń SQL Server Agent, kliknij prawym przyciskiem myszy pozycję Zadań, a następnie kliknij 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 Category kliknij Database Maintenance.
W polu Opis wpisz Archiwalne wiadomości e-mail bazy danych, a następnie kliknij przycisk Kroki.
Aby utworzyć krok w celu zarchiwizowania wiadomości poczty bazy danych
Na stronie Kroki kliknij pozycję Nowy.
W polu Nazwa kroku wpisz Kopiuj elementy poczty w bazie danych.
W polu typu wybierz skrypt Transact-SQL (T-SQL).
W polu Database wybierz msdb.
W polu polecenia wpisz następującą instrukcję, 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 ;
Kliknij przycisk OK, aby zapisać krok.
Aby utworzyć krok w celu zarchiwizowania załączników poczty bazy danych
Na stronie Kroki kliknij 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 Database 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 ;
Kliknij przycisk OK, aby zapisać krok.
Aby utworzyć krok w celu zarchiwizowania dziennika wysyłania wiadomości w bazie danych
Na stronie Kroki kliknij pozycję Nowy.
W polu Nazwa kroku wpisz Copy Database Mail Log.
W polu Wpisz wybierz pozycję skrypt Transact-SQL (T-SQL).
W polu Database 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 ;
Kliknij przycisk OK, aby zapisać krok.
Aby utworzyć krok usuwania zarchiwizowanych wierszy z poczty bazy danych
Na stronie Kroki kliknij przycisk Nowy.
W polu Nazwa kroku wpisz Usuń wiersze z Database Mail.
W polu typu wybierz skrypt Transact-SQL (T-SQL).
W polu Database 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 ;
Kliknij przycisk OK, aby zapisać krok.
Aby utworzyć krok usuwania zarchiwizowanych elementów z dziennika zdarzeń poczty bazy danych
Na stronie Kroki kliknij pozycję Nowy.
W polu Nazwa kroku wpisz Usuń wiersze z dziennika zdarzeń poczty bazy danych.
W polu Wpisz wybierz pozycję 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 ;
Kliknij przycisk OK, aby zapisać krok.
Aby zaplanować okresowe uruchamianie zadania
W oknie dialogowym Nowe zadanie kliknij Harmonogramy .
Na stronie Harmonogramy kliknij 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 wybierz opcję Występuje raz o <godzinie>.
Sprawdź, czy inne opcje są skonfigurowane zgodnie z życzeniem, a następnie kliknij przycisk OK, aby zapisać harmonogram.
Kliknij przycisk OK, aby zapisać zadanie.