Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर (T-SQL) में msdb डेटाबेस से डेटाबेस मेल संदेश हटाएं

जब आप 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 का उपयोग करें डेटाबेस मेल लॉग से ईवेंट हटाने के लिए।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल 2005 में पिवोट

  2. SQL Server 2008 समर्थन समाप्त हो रहा है। अब क्या?

  3. SQL सर्वर:क्या मुझे sys तालिकाओं पर info_schema तालिकाओं का उपयोग करना चाहिए?

  4. SQL सर्वर डेटाबेस विकास के लिए GearHost के साथ प्रारंभ करना

  5. क्या MS SQL सर्वर में 'INSERT INTO' स्क्रिप्ट उत्पन्न करने के लिए कोई निःशुल्क उपकरण हैं?