जब आप SQL सर्वर से ईमेल भेजने के लिए डेटाबेस मेल का उपयोग करते हैं, तो ईमेल संदेशों और उनके अनुलग्नकों को msdb में संग्रहीत किया जाता है डेटाबेस। डेटाबेस को बड़े होने से रोकने के लिए आपको समय-समय पर इन संदेशों को हटा देना चाहिए।
T-SQL के साथ इन संदेशों को हटाने के लिए, sysmail_delete_mailitems_sp
का उपयोग करें संग्रहीत प्रक्रिया।
आप मेल संदेशों को उनके भेजने की अनुरोध तिथि (यानी एक निश्चित तिथि से पहले) या उनकी स्थिति के आधार पर हटा सकते हैं। आप अनुरोध तिथि के रूप में वर्तमान तिथि का उपयोग करके सभी मेल संदेशों को हटा भी सकते हैं।
सभी संदेश देखें
सबसे पहले, आइए देखें कि msdb . में कौन से संदेश हैं डेटाबेस।
SELECT
mailitem_id,
sent_status,
send_request_date
FROM msdb.dbo.sysmail_allitems;
परिणाम:
+---------------+---------------+-------------------------+ | mailitem_id | sent_status | send_request_date | |---------------+---------------+-------------------------| | 1 | failed | 2020-08-24 02:40:48.093 | | 2 | failed | 2020-08-24 02:47:40.833 | | 3 | sent | 2020-08-24 03:58:57.887 | | 4 | sent | 2020-08-24 04:11:19.300 | | 5 | failed | 2020-08-29 03:28:53.873 | | 6 | sent | 2020-08-29 04:00:01.460 | | 7 | failed | 2020-08-29 04:44:54.720 | | 8 | sent | 2020-08-29 04:45:08.080 | | 1006 | sent | 2020-08-30 23:01:20.437 | +---------------+---------------+-------------------------+
मैंने इस दृश्य के लिए सभी कॉलम वापस नहीं किए, क्योंकि यहां प्रस्तुत करने के लिए बहुत अधिक डेटा होता।
पुराने संदेश हटाएं
एक निश्चित तिथि से पहले भेजे गए सभी संदेशों को हटाने के लिए, @sent_before
. का उपयोग करें तर्क।
EXECUTE msdb.dbo.sysmail_delete_mailitems_sp
@sent_before = '2020-08-25';
परिणाम:
(4 rows affected)
ध्यान दें कि sysmail_delete_mailitems_sp
प्रक्रिया वास्तव में send_request_date
. के आधार पर ईमेल को हटा देती है sent_date
. के बजाय . इसलिए मैं send_request_date
का उपयोग कर रहा हूं ईमेल संदेश देखते समय।
सभी संदेशों को दोबारा देखें
अब जब मैं sysmail_allitems
को क्वेरी करता हूं देखें, पहली चार पंक्तियाँ गायब हो गई हैं।
SELECT
mailitem_id,
sent_status,
send_request_date
FROM msdb.dbo.sysmail_allitems;
परिणाम:
+---------------+---------------+-------------------------+ | mailitem_id | sent_status | send_request_date | |---------------+---------------+-------------------------| | 5 | failed | 2020-08-29 03:28:53.873 | | 6 | sent | 2020-08-29 04:00:01.460 | | 7 | failed | 2020-08-29 04:44:54.720 | | 8 | sent | 2020-08-29 04:45:08.080 | | 1006 | sent | 2020-08-30 23:01:20.437 | +---------------+---------------+-------------------------+
विफल संदेश हटाएं
एक निश्चित स्थिति के सभी संदेशों को हटाने के लिए, @sent_status
. का उपयोग करें तर्क।
यहां सभी विफल मेल संदेशों को हटाने का एक उदाहरण दिया गया है।
EXECUTE msdb.dbo.sysmail_delete_mailitems_sp
@sent_status = 'failed';
परिणाम:
(2 rows affected)
सभी संदेशों को दोबारा देखें
आइए देखें sysmail_allitems
फिर से देखें।
SELECT
mailitem_id,
sent_status,
send_request_date
FROM msdb.dbo.sysmail_allitems;
परिणाम:
+---------------+---------------+-------------------------+ | mailitem_id | sent_status | send_request_date | |---------------+---------------+-------------------------| | 6 | sent | 2020-08-29 04:00:01.460 | | 8 | sent | 2020-08-29 04:45:08.080 | | 1006 | sent | 2020-08-30 23:01:20.437 | +---------------+---------------+-------------------------+
सभी संदेश हटाएं
सभी संदेशों को हटाने के लिए, @sent_date
. का उपयोग करें GETDATE()
. के दिनांक मान के साथ तर्क ।
DECLARE @GETDATE datetime
SET @GETDATE = GETDATE();
EXECUTE msdb.dbo.sysmail_delete_mailitems_sp
@sent_before = @GETDATE;
परिणाम:
(3 rows affected)
सभी संदेशों को दोबारा देखें
आइए देखें sysmail_allitems
फिर से देखें।
SELECT
mailitem_id,
sent_status,
send_request_date
FROM msdb.dbo.sysmail_allitems;
परिणाम:
(0 rows affected)
डेटाबेस मेल लॉग से ईवेंट हटाएं
ध्यान दें कि sysmail_delete_mailitems_sp
डेटाबेस मेल लॉग में संबंधित प्रविष्टियों को नहीं हटाता है। sysmail_delete_log_sp
का उपयोग करें डेटाबेस मेल लॉग से ईवेंट हटाने के लिए।