Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Yönetilen Örneği
Veritabanı Postası iletilerinin ve eklerinin kopyaları, Veritabanı Postası olay günlüğüyle birlikte tablolarda msdb tutulur. Düzenli aralıklarla tabloların boyutunu küçültmek ve artık gerekli olmayan iletileri ve olayları arşivleyebilirsiniz.
Aşağıdaki yordamlar, işlemi otomatikleştirmek için bir SQL Server Agent işi oluşturur.
Önkoşullar
SQL Server örneğinizde T-SQL komutlarını çalıştırmak için SQL Server Management Studio 'yu (SSMS),Visual Studio Code için MSSQL uzantısını, sqlcmd'yi veya sık kullandığınız T-SQL sorgulama aracını kullanın.
Öneri
Bu arşiv işi başarısız olursa operatörlere e-posta iletisi göndermek amacıyla hata kontrolünü düşünün ve bu işi izleyin.
İsteğe bağlı olarak, arşivlenmiş Veritabanı Posta verilerini dışında msdbözel bir arşiv veritabanına taşıyabilir veya SQL Server'dan dışarı aktarabilirsiniz.
İzinler
Bu konuda açıklanan depolanmış yordamları yürütmek için sysadmin sabit sunucu rolüne üye olmanız gerekir.
Arşiv Veritabanı Postası görevi oluşturma
İlk işlem, aşağıdaki adımlarla Arşiv Veritabanı Postası adlı bir iş oluşturur.
Veritabanı Postası tablolarındaki tüm iletileri, önceki ayın adıyla adlandırılmış yeni bir tabloya formatı
DBMailArchive__<year_month>olacak şekilde kopyalayın.İlk adımda kopyalanan iletilerle ilgili ekleri Veritabanı Postası tablolarından biçiminde
DBMailArchive_Attachments_<year_month>önceki aydan sonra adlı yeni bir tabloya kopyalayın.Veritabanı Postası olay günlüğünden, ilk adımda kopyalanan mesajlarla ilgili olayları Veritabanı Postası tablolarından alarak, önceki ayın adıyla
DBMailArchive_Log_<year_month>formatında yeni bir tabloya kopyalayın.Veritabanı Postası tablolarından aktarılan posta öğelerinin kayıtlarını silin.
Aktarılan posta öğeleriyle ilgili olayları Veritabanı Postası olay günlüğünden silin.
İşi düzenli aralıklarla çalışacak şekilde zamanlayın.
Bir SQL Server Agent işi oluşturun
Aşağıdaki adımlarda SQL Server Management Studio (SSMS) kullanılır. SSMS'nin en son sürümünü aka.ms/ssms indirin.
SQL Server örneğine bağlanın.
Nesne Gezgini'nde SQL Server Agent'ı genişletin, İşler'e sağ tıklayın ve Yeni İş'i seçin.
Yeni İş iletişim kutusunda, Adı kutusuna Arşiv Veritabanı Postayazın.
Sahibi kutusunda, sahibin sysadmin sabit sunucu rolünün üyesi olduğunu onaylayın.
Kategori kutusunda Veritabanı Bakımı'nı seçin.
Açıklama kutusuna Veritabanı Posta iletilerini arşivle yazın ve Adımlar'ı seçin.
Veritabanı Posta iletilerini arşivleye bir iş adımı oluşturma
Adımlar sayfasında Yeni'yi seçin.
Adım adı (Step name) kutusuna Veritabanı Posta Öğelerini Kopyalayazın.
Tür kutusunda Transact-SQL betiği (T-SQL)seçin.
Veritabanı kutusunda
msdböğesini seçin.Komut kutusuna aşağıdaki T-SQL deyimini yazarak önceki ayın adını taşıyan ve geçerli ayın başından eski satırları içeren bir tablo oluşturun.
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 ;Adımı kaydetmek için Tamam'ı seçin.
Veritabanı Posta eklerini arşivleye bir iş adımı oluşturma
Adımlar sayfasında Yeni'yi seçin.
Adım adı kutusuna Veritabanı Posta Eklerini Kopyalayazın.
Tür kutusunda Transact-SQL betiği (T-SQL)seçin.
Veritabanı kutusunda
msdböğesini seçin.Komut kutusuna, önceki adımda aktarılan iletilere karşılık gelen ekleri içeren, önceki ayın adını taşıyan bir ekler tablosu 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 ;Adımı kaydetmek için Tamam'ı seçin.
Veritabanı Posta günlüğünü arşivleye bir iş adımı oluşturma
Adımlar sayfasında Yeni'yi seçin.
Adım adı kutusuna Veritabanı Posta Günlüğünü Kopyalayazın.
Tür kutusunda Transact-SQL betiği (T-SQL)seçin.
Veritabanı kutusunda
msdböğesini seçin.Komut kutusuna, önceki adımda aktarılan iletilere karşılık gelen günlük girişlerini içeren, önceki ayın adını taşıyan bir günlük tablosu 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 ;Adımı kaydetmek için Tamam'ı seçin.
Arşivlenen satırları Veritabanı Postası'ndan kaldırmak için bir iş adımı oluşturma
Adımlar sayfasında Yeni'yi seçin.
Adım adı kutusuna Veritabanı Postasından satırları kaldıryazın.
Tür kutusunda Transact-SQL betiği (T-SQL)seçin.
Veritabanı kutusunda
msdböğesini seçin.Komut kutusuna, Veritabanı Posta tablolarından geçerli aydan eski satırları 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 ;Adımı kaydetmek için Tamam'ı seçin.
Arşivlenen öğeleri Veritabanı Postası olay günlüğünden kaldırmak için bir iş adımı oluşturma
Adımlar sayfasında Yeni'yi seçin.
Adım Adı kutusuna Veritabanı Postası olay günlüğünden satırları kaldır yazın.
Tür kutusunda Transact-SQL betiği (T-SQL)seçin.
Komut kutusuna, Veritabanı Postası olay günlüğünden geçerli aydan eski satırları 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 ;Adımı kaydetmek için Tamam'ı seçin.
İşi düzenli aralıklarla çalışacak şekilde zamanlama
Yeni İş iletişim kutusunda Zamanlamalar'ı seçin.
Zamanlamalar sayfasında Yeni'yi seçin.
Adı kutusuna Arşiv Veritabanı Postayazın.
Zamanlama türü kutusunda yinelenenseçin.
Sıklığı alanında, işi düzenli aralıklarla (örneğin her ay bir kez) çalıştırma seçeneklerini belirleyin.
Günlük sıklık alanında, <saatinde bir kez gerçekleşir seçeneği için >öğesini seçin.
Diğer seçeneklerin istediğiniz gibi yapılandırıldığını doğrulayın ve ardından zamanlamayı kaydetmek için Tamam'ı seçin.
İşi kaydetmek için 'Tamam' seçin.