Aracılığıyla paylaş


Nasıl yapılır: Arşiv veritabanı posta iletileri ve olay günlükleri için bir SQL Server Agent işi oluşturmak

Veritabanı posta iletilerini ve eklerini kopyalarını içinde korunur msdb ile birlikte veritabanı posta olay günlüğü'nü tablolar.Düzenli aralıklarla tablo boyutunu azaltmanıza ve iletileri ve artık gerekli olmayan olaylar kaldırmak isteyebilirsiniz.Aşağıdaki yordamlar, sql Server Agent oluşturmak iş işlemini otomatikleştirmek için.

  1. İlk yordamı arşiv veritabanı posta ile dört adım adlı iş oluşturur.

  2. Sonra önceki ayın biçiminde adlı yeni bir tablo için ilk adımı tüm iletileri posta veritabanı tablolarından kopyalar DBMailArchive_<year_month>.

  3. İkinci adım sonra önceki ayın biçiminde adlı yeni bir tablo için Database Mail'i tablodan ilk adımda kopyaladığınız ileti ile ilgili ek kopyalar DBMailArchive_Attachments_<year_month>.

  4. Sonra önceki ayın biçiminde adlı yeni bir tablo için Database Mail'i tablodan ilk adımda kopyaladığınız ileti ilgili veritabanı posta olay günlüğü olayları üçüncü adımı kopyalar DBMailArchive_Log_<year_month>.

  5. Dördüncü adım aktarılan posta öğeleri kayıtları veritabanı posta tablodan siler.

  6. Beşinci adım veritabanı posta olay günlüğünden aktarılan posta öğeleri için ilgili olayları siler.

  7. Son yordam planları iş her ay başlangıcında çalıştırılacak.

Bu örnekte, arşiv tablolar oluşturulabilir msdb veritabanı.Boyutunu küçültmek için msdb veritabanı, özel arşiv veritabanında yeni tablolar yerleştirilmiş olabilir veya satırları bir metin dosyasına dışa, ya hemen silinir.Bu örnek yalnızca yeni tablolara satırlar taşır msdb veritabanı.Üretim kullanımı için ek hata denetimi ekleyin ve, operatörler için bir e-posta iletisi göndermek istediğiniz iş başarısız olur.

sql Server Aracısı oluşturmak içiniş

  1. Object Explorer'da genişletin SQL Server , Aracısı'nı sağ İşve i Yeni iş.

  2. De Yeni iş iletişim kutusunda ad arşiv veritabanı posta yazın.

  3. De sahip kutusunda, sahibi üye olduğundan emin olun sysadmin sabit sunucu rolü.

  4. De Kategori kutusuna Veritabanı Bakım.

  5. De Açıklama kutusuna yazın Arşiv veritabanı posta iletilerinive i adımları.

Veritabanı posta iletilerini arşivlemek için bir adım oluşturmak için

  1. On the Steps sayfa, click New.

  2. De Adım adı kutusuna Kopyala veritabanı posta öğelerini yazın.

  3. De türü kutusunda seçin Transact-sql komut dosyasını (t-sql).

  4. De veritabanı kutusunda seçin msdb.

  5. De komut sonra önceki ay, Cari ay başlangıçtan daha eski satırları içeren adlı bir tablo oluşturmak için aşağıdaki deyim 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 ;
    
  6. ' I Tamam adım kaydetmek için.

Veritabanı posta ekleri arşivlemek için bir adım oluşturmak için

  1. On the Steps sayfa, click New.

  2. De Adım adı kutusuna Kopyala veritabanı posta ekleri yazın.

  3. De türü kutusunda seçin Transact-sql komut dosyasını (t-sql).

  4. De veritabanı kutusunda seçin msdb.

  5. De 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 deyim 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 ;
    
  6. ' I Tamam adım kaydetmek için.

Veritabanı posta günlüğü arşivlemek için bir adım oluşturmak için

  1. On the Steps sayfa, click New.

  2. De Adım adı kutusuna Kopyala veritabanı posta günlüğü yazın.

  3. De türü kutusunda seçin Transact-sql komut dosyasını (t-sql).

  4. De veritabanı kutusunda seçin msdb.

  5. De 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 deyim 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 ;
    
  6. ' I Tamam adım kaydetmek için.

Veritabanı Mail'den arşivlenmiş satırları kaldırmak için bir adım oluşturmak için

  1. On the Steps sayfa, click New.

  2. De Adım adı kutusuna veritabanı posta kaldırma satırları yazın.

  3. De türü kutusunda seçin Transact-sql komut dosyasını (t-sql).

  4. De veritabanı kutusunda seçin msdb.

  5. De komut kutusuna veritabanı posta tablolardan satırları geçerli ay eski kaldırmak için aşağıdaki deyim 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 ;
    
  6. ' I Tamam adım kaydetmek için.

Veritabanı posta olay günlüğü ' arşivlenen öğeleri kaldırmak için bir adım oluşturmak için

  1. On the Steps sayfa, click New.

  2. De Adım adı kutu tipi Kaldır veritabanı posta olay günlüğü ' satırlar.

  3. De türü kutusunda seçin Transact-sql komut dosyasını (t-sql).

  4. De veritabanı kutusunda seçin msdb.

  5. De komut veritabanı posta olay günlüğü satırları geçerli ay eski kaldırmak için aşağıdaki deyim 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 ;
    
  6. ' I Tamam adım kaydetmek için.

Zamanlamak için iş her ay başlangıcında çalıştırılacak

  1. De Yeni iş iletişim kutusunda'ı zamanlamaları.

  2. Üzerinde zamanlamaları sayfa,'ı Yeni.

  3. De ad arşiv veritabanı posta yazın.

  4. De zamanlama türü kutusunda seçin yinelenen.

  5. İçinde frekans alanında çalışacak şekilde seçenekleri seçin iş her ayın ilk günü.

  6. De günlük sıklığı alan, seçim oluşur kez at 3: 00: 00'de.

  7. İstiyor ve i gibi diğer seçeneklerin yapılandırıldığını doğrulamak Tamam Zamanlamayı kaydedemiyor.

  8. ' I Tamam kaydetmek için iş.

Güvenlik

Üye olmanız gerekir sysadmin bu konuda açıklanan saklı yordamları yürütmek için sabit sunucu rolü.