Aracılığıyla paylaş


Genel veritabanı postası sorun giderme adımları

Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen Örneği

Veritabanı Postası sorunlarını gidermek için Veritabanı Posta sisteminin aşağıdaki genel alanlarının denetlenilmesi gerekir. Bu yordamlar mantıksal bir sırada sunulur, ancak herhangi bir sırada değerlendirilebilir.

İzinler

Veritabanı Postası'nın tüm sorunlarını gidermek için sysadmin sabit sunucu rolünün üyesi olmanız gerekir. Sysadmin sabit sunucu rolünün üyesi olmayan kullanıcılar, diğer kullanıcılar tarafından gönderilen e-postalar hakkında değil, yalnızca göndermeye çalıştıkları e-postalar hakkında bilgi edinebilir.

Veritabanı postası etkin mi?

  1. SQL Server Management Studio'da sorgu düzenleyicisi penceresini kullanarak bir SQL Server örneğine bağlanın ve aşağıdaki kodu yürütun:

    sp_configure 'show advanced', 1; 
    GO
    RECONFIGURE;
    GO
    sp_configure;
    GO
    

    Sonuçlar bölmesinderun_value için değerinin olarak ayarlandığını onaylayın1.

    Eğer run_value1 değilse, Veritabanı Postası etkin değildir.

    Veritabanı Postası, kötü amaçlı bir kullanıcının saldırısı için kullanılabilecek özellik sayısını azaltmak için otomatik olarak etkinleştirilmez. Daha fazla bilgi için bkz. yüzey alanı yapılandırması.

  2. Veritabanı Postası'nı etkinleştirmenin uygun olduğuna karar verirseniz aşağıdaki kodu yürütebilirsiniz:

    sp_configure 'show advanced', 1; 
    GO
    RECONFIGURE;
    GO
    sp_configure 'Database Mail XPs', 1; 
    GO
    RECONFIGURE;
    GO
    

    Varsayılan durumda gelişmiş seçenekleri göstermeyen prosedürü geri yüklemek için aşağıdaki kodu yürütün:

    sp_configure 'show advanced', 0; 
    GO
    RECONFIGURE;
    GO
    

Kullanıcılar düzgün şekilde posta gönderecek şekilde yapılandırılmış mı?

  1. Veritabanı Postası göndermek için, kullanıcıların veritabanındaki DatabaseMailUserRole veritabanı rolünün msdb bir üyesi olması gerekir. Sysadmin sabit sunucu rolünün ve msdbdb_owner rolünün üyeleri otomatik olarak DatabaseMailUserRole rolünün üyeleridir. DatabaseMailUserRole'un diğer tüm üyelerini listelemek için aşağıdaki deyimi çalıştırın:

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    
  2. DatabaseMailUserRole rolüne kullanıcı eklemek için aşağıdaki deyimi kullanın:

    USE msdb;
    GO
    
    sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<database user>';
    
  3. Veritabanı Postası göndermek için kullanıcıların en az bir Veritabanı Posta profiline erişimi olmalıdır. Kullanıcıları (sorumluları) ve erişim sahibi oldukları profilleri listelemek için aşağıdaki deyimi yürütür.

    EXEC msdb.dbo.sysmail_help_principalprofile_sp;
    
  4. Profil oluşturmak ve kullanıcılara profil erişimi vermek için Veritabanı Posta Yapılandırma Sihirbazı'nı kullanın.

Veritabanı postası başlatıldı mı?

İşlenecek e-posta iletileri olduğunda Veritabanı Posta Dış Programı etkinleştirilir. Belirtilen zaman aşımı süresi boyunca gönderilecek ileti olmadığında, program kapatılır.

  1. Veritabanı Postası etkinleştirmesinin başlatıldığını onaylamak için aşağıdaki komutu yürütün:

    EXEC msdb.dbo.sysmail_help_status_sp;
    
  2. Veritabanı Postası etkinleştirilmediyse, başlatmak için aşağıdaki ifadeyi yürütün:

    EXEC msdb.dbo.sysmail_start_sp;
    
  3. Veritabanı Postası dış programı başlatılmışsa, posta kuyruğunun durumunu aşağıdaki komutla denetleyin.

    EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail';
    

    Posta kuyruğunun durumu RECEIVES_OCCURRING olmalıdır. Durum kuyruğu bir andan diğerine farklılık gösterebilir. Posta kuyruğu durumu RECEIVES_OCCURRING değilse, kuyruğu yeniden başlatmayı deneyin. Aşağıdaki deyimi kullanarak kuyruğu durdurun:

    EXEC msdb.dbo.sysmail_stop_sp;
    

    Ardından aşağıdaki deyimi kullanarak kuyruğu başlatın:

    EXEC msdb.dbo.sysmail_start_sp;
    

    Uyarı

    length Posta kuyruğundaki e-posta sayısını belirlemek için sonuç kümesindeki sysmail_help_queue_sp sütununu kullanın.

Sorunlar hesapların bazılarını veya tümünü etkiler mi?

Bazı ancak tüm profillerin posta gönderemediğini belirlediyseniz, sorun profilleri tarafından kullanılan Veritabanı Posta hesaplarıyla ilgili sorunlarla karşılaşabilirsiniz.

  1. Hangi hesapların posta göndermede başarılı olduğunu belirlemek için aşağıdaki deyimi yürütür:

    SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;
    
  2. Çalışmayan bir profil listelenen hesaplardan hiçbirini kullanmıyorsa, profil için kullanılabilen tüm hesaplar düzgün çalışmıyor olabilir. Tek tek hesapları test etmek için Veritabanı Posta Yapılandırma Sihirbazı'nı kullanarak tek bir hesapla yeni bir profil oluşturun ve ardından Test E-postası Gönder iletişim kutusunu kullanarak yeni hesabı kullanarak posta gönderin.

  3. Veritabanı Postası tarafından döndürülen hata iletilerini görüntülemek için aşağıdaki deyimi yürütür:

    SELECT * FROM msdb.dbo.sysmail_event_log;
    

    Uyarı

    Veritabanı Postası, bir SMTP posta sunucusuna başarıyla teslim edildiğinde postanın gönderilmesini kabul eder. Geçersiz alıcı e-posta adresi gibi sonraki hatalar, postanın teslim edilmesini yine de engelleyebilir, ancak Veritabanı Posta günlüğünde yer almaz.

Posta teslimini yeniden deneyin

  1. SMTP sunucusuna güvenilir bir şekilde ulaşılamadığından Veritabanı Postası'nın başarısız olduğunu belirlediyseniz, Veritabanı Postası'nın her iletiyi göndermeye çalışma sayısını artırarak başarılı posta teslim oranınızı artırabilirsiniz. Veritabanı Posta Yapılandırma Sihirbazı'nı başlatın ve Sistem parametrelerini görüntüle veya değiştir seçeneğini belirleyin. Alternatif olarak, birincil hesaptan yük devredilmesi durumunda, Veritabanı Postası'nın e-posta göndermek için yük devretme hesabını kullanabilmesi amacıyla profile daha fazla hesap ekleyebilirsiniz.

  2. Sistem Parametrelerini Yapılandır sayfasında, Hesap Yeniden Deneme Denemeleri için beş kez ve Hesap Yeniden Deneme Gecikmesi için 60 saniye olan varsayılan değerler, SMTP sunucusuna 5 dakika içinde ulaşılamazsa ileti tesliminin başarısız olacağı anlamına gelir. İleti tesliminin başarısız olması için gereken süreyi uzatmak için bu parametreleri artırın.

    Uyarı

    Çok sayıda ileti gönderildiğinde, büyük varsayılan değerler güvenilirliği artırabilir, ancak birçok ileti tekrar tekrar teslim edilmeye çalışıldığında kaynakların kullanımını önemli ölçüde artırır. Veritabanı Postası'nın SMTP sunucusuyla hemen iletişim kurmasını engelleyen ağ veya SMTP sunucusu sorununu çözerek kök sorunu giderin.

Hizmet Aracısı'nın msdb için etkinleştirildiğini doğrulayın

Veritabanı postası, msdb veritabanı için Hizmet Aracısı'nın etkinleştirilmiş olmasını gerektirir. Hizmet aracısının etkinleştirilip etkinleştirilmediğini msdb aşağıdaki T-SQL betiğiyle doğrulayın:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb' ; -- should be 1

Etkinleştirilmemişse, hizmet aracısı etkinleştirilmelidir. Ancak aşağıdaki örnek betik, sistem veritabanlarına msdb özel erişim gerektirir, bu nedenle bu işlem tipik iş saatlerinde yürütülemez. Daha fazla bilgi için bkz. ALTER DATABASE ... SET ENABLE_BROKER.

ALTER DATABASE msdb SET ENABLE_BROKER;