How to: Create a SQL Server Agent Job to Archive Database Mail Messages and Event Logs
Kopie wiadomości pocztowych bazy danych i ich załączniki są zachowywane w msdb tabel z bazy danych korespondencji w dzienniku zdarzeń.Co pewien czas można zmniejszyć rozmiar tabel i usuwania wiadomości i zdarzeń, które nie są już potrzebne.Poniższe procedury tworzenia zadanie agenta programu SQL Server, aby zautomatyzować proces.
Pierwsza procedura tworzy zadanie o nazwie archiwum poczty bazy danych z czterech krokach.
Pierwszym krokiem kopiuje wszystkie wiadomości z tabel bazy danych korespondencji do nowej tabela o nazwie poprzedniego miesiąca w formacie DBMailArchive_<year_month >.
Drugim krokiem kopiuje załączniki związane z skopiowany w kroku pierwszym z tabel bazy danych korespondencji do nowej tabela o nazwie poprzedniego miesiąca w formacie wiadomości DBMailArchive_Attachments_<year_month >.
Trzeci krok kopiuje zdarzenie z bazy danych korespondencji w dzienniku zdarzeń związanych z skopiowany w kroku pierwszym z tabel bazy danych korespondencji do nowej tabela o nazwie poprzedniego miesiąca w formacie wiadomości DBMailArchive_Log_<year_month >.
Krok czwarty usuwa rekordy z elementów przeniesionych poczty z tabel bazy danych korespondencji.
Krok piąty usuwa zdarzenie związane z elementów poczty przeniesione z dziennika zdarzeń poczty bazy danych.
Końcowe procedury planuje zadanie ma być uruchamiane na początku każdego miesiąca.
W tym przykładzie w tabeli archiwum są tworzone w msdb bazy danych.Aby zmniejszyć rozmiar msdb w bazie danych nowych tabel mogą znajdować się w bazie danych archiwum specjalne lub wiersze mogą zostać wyeksportowane do pliku tekstowego lub po prostu usunięte.W tym przykładzie przenosi wierszy tylko do nowych tabel w msdb bazy danych.Do użycia w produkcji można dodać sprawdzania dodatkowych błędów i wysłać wiadomość e-mail do podmiotów gospodarczych, jeśli zadanie nie powiedzie się.
Aby utworzyć zadanie agenta programu SQL Server
W Eksploratorze obiektów rozwiń węzeł SQL Server Agent, kliknij prawym przyciskiem myszy Zadania, a następnie kliknij przycisk Nowe zadanie.
W Nowe zadanie w dialogowym Nazwa wpisz archiwum poczty bazy danych.
W Właściciel należy się upewnić, że właściciel jest członkiem sysadmin ustalić roli serwera.
W Kategoria kliknijKonserwacja bazy danych.
W Opis box, type Archiwizowanie wiadomości pocztowych bazy danych, a następnie kliknij przycisk Kroki.
Aby utworzyć krok do archiwizowania wiadomości pocztowych bazy danych
Na Kroki strona, kliknij przycisk Nowy.
W Nazwa kroku wpisz elementy poczty kopii bazy danych.
W Typ Wybierz opcję poluSkrypt języka Transact-SQL (T-SQL).
W Bazy danych Wybierz opcję polumsdb.
W Polecenie wpisz następujące instrukcja utworzyć tabela o nazwie w poprzednim miesiącu, zawierające wiersze starsze od początku 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ć w kroku.
Aby utworzyć krok, aby zarchiwizować załączniki poczty bazy danych
Na Kroki strona, kliknij przycisk Nowy.
W Nazwa kroku wpisz załączniki poczty kopii bazy danych.
W Typ Wybierz opcję poluSkrypt języka Transact-SQL (T-SQL).
W Bazy danych Wybierz opcję polumsdb.
W Polecenie wpisz następujące instrukcja utworzyć tabela załączników o nazwie w poprzednim miesiącu, zawierające załączniki, które odpowiadają wiadomości przesyłane 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ć w kroku.
Aby utworzyć krok, aby zarchiwizować dziennik bazy danych korespondencji
Na Kroki strona, kliknij przycisk Nowy.
W Nazwa kroku wpisz kopii bazy danych wiadomości dziennika.
W Typ Wybierz opcję poluSkrypt języka Transact-SQL (T-SQL).
W Bazy danych Wybierz opcję polumsdb.
W Polecenie wpisz następujące instrukcja Aby utworzyć tabela dziennika o nazwie w poprzednim miesiącu, zawierający wpisy dziennika które odpowiadają wiadomości przesyłane w kroku wcześniejszych:
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ć w kroku.
Aby utworzyć krok do usunięcia zarchiwizowanych wierszy z bazy danych korespondencji
Na Kroki strona, kliknij przycisk Nowy.
W Nazwa kroku wpisz Usuń wiersze z mail bazy danych.
W Typ Wybierz opcję poluSkrypt języka Transact-SQL (T-SQL).
W Bazy danych Wybierz opcję polumsdb.
W Polecenie wpisz następującą instrukcję, aby usunąć wiersze starsze niż bieżący miesiąc z tabel bazy danych programu Poczta:
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ć w kroku.
Do tworzenia kroku usunięcie zarchiwizowanych elementów z bazy danych korespondencji zdarzenie dziennika
Na Kroki strona, kliknij przycisk Nowy.
W Nazwa kroku polu wpisz Usuń wiersze z bazy danych korespondencji w dzienniku zdarzeń.
W Typ Wybierz opcję poluSkrypt języka Transact-SQL (T-SQL).
W Bazy danych Wybierz opcję polumsdb.
W Polecenie wpisz następującą instrukcję, aby usunąć wiersze starsze niż bieżący miesiąc z bazy danych pocztą zdarzenie dziennika:
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ć w kroku.
Aby zaplanować zadanie uruchamiane na początku każdego miesiąca
W Nowe zadanie okno dialogowe kliknijHarmonogramy.
Na Harmonogramy strona, kliknij przycisk Nowy.
W Nazwa wpisz archiwum poczty bazy danych.
W Typ harmonogramu Wybierz opcję poluCykliczne.
W Częstotliwość obszaru, zaznacz odpowiednie opcje w celu uruchomienia zadanie w pierwszym dniu każdego miesiąca.
W Częstotliwość dzienne Wybierz opcję obszarzeWystępuje po godzinie 3: 00: 00.
Sprawdź, czy inne opcje są skonfigurowane jako rozliczona, a następnie kliknij przycisk OK zapisać harmonogramu.
Kliknij przycisk OK , aby zapisać to zadanie.
Security
Musisz być członkiem sysadmin ustala rolę serwera do wykonywania procedur przechowywanych, opisane w tym temacie.
See Also