SQL Server Agent iş arşiv veritabanı posta iletileri ve olay günlükleri oluşturma
Veritabanı posta iletilerini ve eklerini kopya içinde korunur msdb tablolar veritabanı posta olay günlüğü ile birlikte. Düzenli olarak tablolar ve arşiv mesajları ve artık gerekli olmayan olaylar boyutunu küçültmek isteyebilirsiniz. Aşağıdaki yordamlar işlemini otomatikleştirmek için bir SQL Server Agent işi oluşturmak.
Başlamadan önce: , Önkoşullar, tavsiye, izinleri
Arşiv veritabanı posta iletileri ve günlüklerini kullanma: SQL Server Agent
Başlamadan Önce
Ön Koşullar
Özel arşiv veritabanı arşiv verileri depolamak için yeni tablolar bulunabilir. Alternatif satır bir metin dosyasına dışa.
Üst
Öneriler
Üretim ortamınızda ek hata denetimi ekleyin ve işi başarısız olursa, operatörler için e-posta iletisi göndermek isteyebilirsiniz.
Üst
İzinler
You must be a member of sysadmin bu konuda açıklanan saklı yordamları yürütmek için sunucu rolü.
Üst
İşlemine genel bakış
İlk yordamı aşağıdaki adımları izleyerek arşiv veritabanı posta adında bir işi oluşturur.
Tüm iletileri sonra önceki ayın biçiminde adlı yeni bir tablo veritabanı posta tablolardan kopyalamak DBMailArchive_<year_month>.
Ekleri ilgili iletilerin kopyasını kopyalanan veritabanı posta tablolardan sonra önceki ayın biçiminde adlı yeni bir tabloya ilk adımda DBMailArchive_Attachments_<year_month>.
İlk adımda, veritabanı posta tablolardan sonra önceki ayın biçiminde adlı yeni bir tabloya kopyalanan veritabanı posta olay günlüğü iletileri ile ilişkili olayları Kopyala DBMailArchive_Log_<year_month>.
Aktarılan posta öğeleri kayıtları veritabanı posta tablodan silin.
Veritabanı posta olay günlüğünden aktarılan posta öğeleri ilgili olayları siler.
İşin düzenli çalışmasını zamanlayabilirsiniz.
Üst
Bir SQL Server Agent işi oluşturmak için
Nesne Explorer'da genişletin SQL Serverajan, sağ İşve ardından Yeni iş.
İçinde Yeni iş iletişim kutusunda, ad arşiv veritabanı posta yazın.
İçinde sahibi kutusunda, sahibi bir üyesi olduğunu doğrulayın sysadmin sunucu rolü.
İçinde Kategori kutusunda, tıklayın Veritabanı bakım.
İçinde Açıklama yazın Arşiv veritabanı posta iletilerive ardından adım.
Genel Bakış
Veritabanı posta iletilerini arşivlemek için bir adım oluşturmak için
Tarih adım sayfa'yı Yeni.
İçinde Adım adı veritabanı posta öğeleri kopyala yazın.
İçinde türü kutu, seçme Transact-sql komut dosyası (t-sql).
İçinde veritabanı kutu, seçme msdb.
İçinde komut önceki ay sonra geçerli ayın başlangıcını eski satırlar içeren adlı bir tablo oluşturmak için aşağıdaki deyimi yazın:
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 ;
Tıklayın Tamam adım kaydetmek için.
Genel Bakış
Veritabanı posta ekleri arşivlemek için bir adım oluşturmak için
Tarih adım sayfa'yı Yeni.
İçinde Adım adı Kopyala veritabanı posta ekleri yazın.
İçinde türü kutu, seçme Transact-sql komut dosyası (t-sql).
İçinde veritabanı kutu, seçme msdb.
İçinde komut önceki ay sonra önceki adımda aktarılan iletileri karşılık gelen ekleri içeren adlı bir ek tablo oluşturmak için aşağıdaki deyimi yazın:
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 ;
Tıklayın Tamam adım kaydetmek için.
Genel Bakış
Veritabanı posta günlüğü arşivlemek için bir adım oluşturmak için
Tarih adım sayfa'yı Yeni.
İçinde Adım adı Kopyala veritabanı posta günlüğü yazın.
İçinde türü kutu, seçme Transact-sql komut dosyası (t-sql).
İçinde veritabanı kutu, seçme msdb.
İçinde komut önceki ay sonra önceki adımda aktarılan iletileri karşılık gelen günlük girdilerini içeren adlı bir günlük tablo oluşturmak için aşağıdaki deyimi yazın:
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 ;
Tıklayın Tamam adım kaydetmek için.
Genel Bakış
Veritabanı Mail'den arşivlenmiş satırları kaldırmak için adımı oluşturmak için
Tarih adım sayfa'yı Yeni.
İçinde Adım adı veritabanı posta kaldırma satırları yazın.
İçinde türü kutu, seçme Transact-sql komut dosyası (t-sql).
İçinde veritabanı kutu, seçme msdb.
İçinde komut veritabanı posta tablolardan satırları geçerli ay eski kaldırmak için aşağıdaki deyimi yazın:
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 ;
Tıklayın Tamam adım kaydetmek için.
Genel Bakış
Arşivlenen öğeleri veritabanı posta olay günlüğü'kaldırmak için adımı oluşturmak için
Tarih adım sayfa'yı Yeni.
İçinde Adım adı kutu tipi kaldırma satırları veritabanı posta olay günlüğü '.
İçinde türü kutu, seçme Transact-sql komut dosyası (t-sql).
İçinde komut satırları geçerli ay eski veritabanı posta olay günlüğü'kaldırmak için aşağıdaki deyimi yazın:
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 ;
Tıklayın Tamam adım kaydetmek için.
Genel Bakış
Düzenli aralıklarla çalıştırmak için işi zamanlamak için
İçinde Yeni iş iletişim kutusunda, tıklatın programları.
Tarih programları sayfa'yı Yeni.
İçinde ad arşiv veritabanı posta yazın.
İçinde zamanlama türü kutu, seçme yinelenen.
İçinde frekans alan, işi düzenli aralıklarla, örneğin her ay bir kez çalıştırmak için seçenekleri belirleyin.
İçinde günlük frekans alan, seçim Occurs once, <zaman>.
Dilek ve ardından diğer seçeneklerin yapılandırıldığını doğrulamak Tamam zamanlamayı kaydetmek için.
Tıklayın Tamam işi kaydetmek için.
Genel Bakış