Sdílet prostřednictvím


Obecné kroky pro řešení potíží s poštou v databázi

platí pro:SQL Serverazure SQL Managed Instance

Řešení potíží s databázovou poštou zahrnuje kontrolu následujících obecných oblastí systému Databázová pošta. Tyto postupy jsou uvedeny v logickém pořadí, ale lze je vyhodnotit v libovolném pořadí.

Povolení

Abyste mohli řešit všechny aspekty databázové pošty, musíte být členem pevné role serveru správce systému . Uživatelé, kteří nejsou členy pevné role serveru správce systému , mohou získat pouze informace o e-mailech, které se pokusí odeslat, ne o e-mailech odeslaných jinými uživateli.

Je povolená databázová pošta

  1. V aplikaci SQL Server Management Studio se připojte k instanci SQL Serveru pomocí okna editoru dotazů a spusťte následující kód:

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

    V podokně výsledků ověřte, že run_value je pro XPs databázové pošty (možnost konfigurace serveru) nastavena na 1hodnotu .

    Pokud run_value není 1, není Database Mail povoleno.

    Databázová pošta není automaticky povolená, aby se snížil počet funkcí dostupných pro útok uživatelem se zlými úmysly. Další informace najdete v tématu konfigurace oblasti Surface.

  2. Pokud se rozhodnete, že je vhodné povolit databázovou poštu, spusťte následující kód:

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

    Pokud chcete obnovit sp_configure postup do výchozího stavu, který nezobrazuje pokročilé možnosti, spusťte následující kód:

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

Jsou uživatelé správně nakonfigurovaní pro odesílání pošty.

  1. Chcete-li odeslat databázovou poštu, musí být uživatelé členem databázové role DatabaseMailUserRole v msdb databázi. Členové pevné role serveru správce systému a msdbdb_owner role jsou automaticky členy role DatabaseMailUserRole . Chcete-li zobrazit seznam všech ostatních členů DatabaseMailUserRole spusťte následující příkaz:

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    
  2. Chcete-li přidat uživatele do role DatabaseMailUserRole , použijte následující příkaz:

    USE msdb;
    GO
    
    sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<database user>';
    
  3. Aby uživatelé mohli odesílat databázové pošty, musí mít přístup alespoň k jednomu profilu databázové pošty. Pokud chcete zobrazit seznam uživatelů (subjektů) a profilů, ke kterým mají přístup, spusťte následující příkaz.

    EXEC msdb.dbo.sysmail_help_principalprofile_sp;
    
  4. Pomocí Průvodce konfigurací databázové pošty můžete vytvářet profily a udělovat uživatelům přístup k profilům.

Je spuštěna databázová pošta

Externí program Databázové pošty je aktivován při zpracování e-mailových zpráv. Pokud nebyly odeslány žádné zprávy po zadanou dobu časového limitu, program se ukončí.

  1. Pokud chcete ověřit, že je aktivace databázové pošty spuštěná, spusťte následující příkaz:

    EXEC msdb.dbo.sysmail_help_status_sp;
    
  2. Pokud se aktivace databázové pošty nespustí, spusťte ho spuštěním následujícího příkazu:

    EXEC msdb.dbo.sysmail_start_sp;
    
  3. Pokud je spuštěn externí program Databázová pošta, zkontrolujte stav fronty pošty pomocí následujícího příkazu:

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

    Fronta pošty by měla mít stav RECEIVES_OCCURRING. Stavová fronta se může lišit z momentu na moment. Pokud stav poštovní fronty není RECEIVES_OCCURRING, zkuste ji restartovat. Zastavte frontu pomocí následujícího příkazu:

    EXEC msdb.dbo.sysmail_stop_sp;
    

    Poté spusťte frontu pomocí následujícího příkazu:

    EXEC msdb.dbo.sysmail_start_sp;
    

    Poznámka:

    length Pomocí sloupce v sadě sysmail_help_queue_sp výsledků určete počet e-mailů ve frontě pošty.

Problémy mají vliv na některé nebo všechny účty

Pokud jste zjistili, že některé, ale ne všechny profily mohou odesílat e-maily, mohou mít problémové profily potíže s účty Databázové pošty, které používají.

  1. Pokud chcete zjistit, které účty jsou při odesílání pošty úspěšné, spusťte následující příkaz:

    SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;
    
  2. Pokud nepracovní profil nepoužívá žádný z uvedených účtů, je možné, že všechny účty dostupné pro tento profil nefungují správně. Pokud chcete otestovat jednotlivé účty, vytvořte pomocí Průvodce konfigurací databázové pošty nový profil s jedním účtem a pak pomocí dialogového okna Odeslat testovací e-mail odešlete poštu pomocí nového účtu.

  3. Chcete-li zobrazit chybové zprávy vrácené databázová pošta, spusťte následující příkaz:

    SELECT * FROM msdb.dbo.sysmail_event_log;
    

    Poznámka:

    Databázová pošta považuje poštu za poslanou při úspěšném doručení na poštovní server SMTP. Následné chyby, jako je například neplatná e-mailová adresa příjemce, mohou přesto zabránit doručení pošty, ale nebudou obsaženy v protokolu databázové pošty.

Opakování doručování pošty

  1. Pokud jste zjistili, že databázová pošta selhává, protože server SMTP se nedá spolehlivě dosáhnout, můžete zvýšit míru úspěšného doručování pošty zvýšením počtu pokusů o odeslání každé zprávy službou Database Mail. Spusťte Průvodce konfigurací databázové pošty a vyberte možnost Zobrazit nebo změnit systémové parametry. Případně můžete k profilu přidružit další účty, takže při převzetí služeb při selhání z primárního účtu používá Databázová pošta k odesílání e-mailů účet převzetí služeb při selhání.

  2. Na stránce Konfigurovat systémové parametry znamenají výchozí hodnoty pěti pokusů o opakované připojení k účtu a 60 sekund pro zpoždění pro opakované pokusy o připojení, že doručení zprávy selže, pokud nelze server SMTP dosáhnout do 5 minut. Zvyšte tyto parametry, aby se prodloužila doba, než dojde k nezdaření doručení zprávy.

    Poznámka:

    Při odesílání velkého počtu zpráv mohou velké výchozí hodnoty zvýšit spolehlivost, ale výrazně zvýší využití prostředků, protože mnoho zpráv se pokouší doručovat opakovaně. Vyřešte problém původního problému tím, že vyřešíte problém se sítí nebo serverem SMTP, který brání tomu, aby databázová pošta kontaktovala server SMTP okamžitě.

Ověřte, že je pro msdb povolený zprostředkovatel služeb.

Databázová pošta vyžaduje, aby byla pro msdb databázi povolená služba Service Broker. Pomocí následujícího skriptu T-SQL ověřte, zda je na msdb zapnutý zprostředkovatel služeb:

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

Pokud není povolený, musí být povolený zprostředkovatel služeb. Následující ukázkový skript vyžaduje výhradní přístup k msdb systémovým databázím, takže to nemusí být možné provést během typické pracovní doby. Další informace naleznete v tématu ALTER DATABASE ... SET ENABLE_BROKER.

ALTER DATABASE msdb SET ENABLE_BROKER;