Dela via


Allmänna felsökningssteg för e-post i databasen

gäller för:SQL ServerAzure SQL Managed Instance

Felsökning av Database Mail omfattar kontroll av följande allmänna områden i Database Mail-systemet. Dessa procedurer visas i logisk ordning, men kan utvärderas i valfri ordning.

Behörigheter

Du måste vara medlem i den fasta serverrollen sysadmin för att felsöka alla aspekter av Database Mail. Användare som inte är medlemmar i den fasta serverrollen sysadmin kan bara hämta information om de e-postmeddelanden som de försöker skicka, inte om e-postmeddelanden som skickas av andra användare.

Är databasens e-post aktiverad

  1. I SQL Server Management Studio ansluter du till en instans av SQL Server med hjälp av ett frågeredigerarefönster och kör sedan följande kod:

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

    I resultatfönstret bekräftar du att run_value för Database Mail XPs (server configuration option) är inställt på 1.

    Om run_value inte är 1 är Database Mail inte aktiverat.

    Database Mail aktiveras inte automatiskt för att minska antalet funktioner som är tillgängliga för angrepp av en obehörig användare. Mer information finns i Ytkonfiguration.

  2. Om du anser att det är lämpligt att aktivera Database Mail kör du följande kod:

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

    Om du vill återställa proceduren sp_configure till standardtillståndet, som inte visar avancerade alternativ, kör du följande kod:

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

Är användarna korrekt konfigurerade för att skicka e-post

  1. För att kunna skicka Database Mail måste användarna vara medlemmar i databasrollen msdb i databasen. Medlemmar i den fasta sysadmin-serverrollen och msdbdb_owner rollen är automatiskt medlemmar i rollen DatabaseMailUserRole . Om du vill visa en lista över alla andra medlemmar i DatabaseMailUserRole kör du följande instruktion:

    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    
  2. Om du vill lägga till användare i rollen DatabaseMailUserRole använder du följande instruktion:

    USE msdb;
    GO
    
    sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<database user>';
    
  3. För att kunna skicka Database Mail måste användarna ha åtkomst till minst en Databaspostprofil. Kör följande instruktion för att visa en lista över användare (huvudnamn) och de profiler som de har åtkomst till.

    EXEC msdb.dbo.sysmail_help_principalprofile_sp;
    
  4. Använd guiden Konfiguration av databaspost för att skapa profiler och bevilja åtkomst till profiler till användare.

Är databasmail startat

Det externa programmet för databaspost aktiveras när det finns e-postmeddelanden som ska bearbetas. När det inte finns några meddelanden att skicka för den angivna tidsgränsen avslutas programmet.

  1. Bekräfta att database mail-aktiveringen har startats genom att köra följande instruktion:

    EXEC msdb.dbo.sysmail_help_status_sp;
    
  2. Om database mail-aktiveringen inte har startats kör du följande instruktion för att starta den:

    EXEC msdb.dbo.sysmail_start_sp;
    
  3. Om det externa programmet Database Mail startas kontrollerar du statusen för e-postkön med följande instruktion:

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

    E-postkön ska ha tillståndet RECEIVES_OCCURRING. Statuskön kan variera från ögonblick till ögonblick. Om e-postkötillståndet inte är "RECEIVES_OCCURRING", försök att starta om kön. Stoppa kön med följande instruktion:

    EXEC msdb.dbo.sysmail_stop_sp;
    

    Starta sedan kön med följande instruktion:

    EXEC msdb.dbo.sysmail_start_sp;
    

    Anmärkning

    length Använd kolumnen i resultatuppsättningen sysmail_help_queue_sp för för att fastställa antalet e-postmeddelanden i e-postkön.

Påverkar problem vissa eller alla konton

Om du har fastställt att vissa men inte alla profiler kan skicka e-post kan du ha problem med de Databas-e-postkonton som används av problemprofilerna.

  1. Kör följande instruktion för att avgöra vilka konton som lyckas skicka e-post:

    SELECT sent_account_id, sent_date FROM msdb.dbo.sysmail_sentitems;
    
  2. Om en icke-fungerande profil inte använder något av kontona i listan är det möjligt att alla konton som är tillgängliga för profilen inte fungerar korrekt. Om du vill testa enskilda konton använder du konfigurationsguiden för databasmeddelanden för att skapa en ny profil med ett enda konto och använder sedan dialogrutan Skicka test-e-post för att skicka e-post med det nya kontot.

  3. Kör följande instruktion för att visa felmeddelandena som returneras av Database Mail:

    SELECT * FROM msdb.dbo.sysmail_event_log;
    

    Anmärkning

    Database Mail anser att e-post skickas när den har levererats till en SMTP-e-postserver. Efterföljande fel, till exempel en ogiltig e-postadress för mottagare, kan fortfarande förhindra att e-post levereras, men kommer inte att finnas i databasens e-postlogg.

Försök skicka e-post igen

  1. Om du har fastställt att Database Mail misslyckas på grund av att SMTP-servern inte kan nås på ett tillförlitligt sätt kan du öka leveransfrekvensen för e-post genom att öka antalet gånger Database Mail försöker skicka varje meddelande. Starta guiden Konfiguration av databaspost och välj alternativet Visa eller ändra systemparametrar. Du kan också associera fler konton till profilen, så vid redundansväxling från det primära kontot använder Database Mail redundanskontot för att skicka e-postmeddelanden.

  2. På sidan Konfigurera systemparametrar innebär standardvärdena på fem gånger för återförsök av konto och 60 sekunder för fördröjning av kontoförsök att meddelandeleveransen misslyckas om SMTP-servern inte kan nås på 5 minuter. Öka dessa parametrar för att förlänga tiden innan meddelandeleveransen misslyckas.

    Anmärkning

    När ett stort antal meddelanden skickas kan stora standardvärden öka tillförlitligheten, men avsevärt öka användningen av resurser eftersom många meddelanden försöker levereras om och om igen. Åtgärda rotproblemet genom att lösa problemet med nätverket eller SMTP-servern som hindrar Database Mail från att kontakta SMTP-servern omgående.

Kontrollera att tjänstkoordinatorn är aktiverad för msdb

Databasmeddelande kräver att Service Broker är aktiverat för msdb databasen. Kontrollera om service brokern är aktiverad på msdb med följande T-SQL-skript:

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

Om den inte är aktiverad måste tjänstkoordinatorn vara aktiverad. Följande exempelskript kräver dock exklusiv åtkomst till msdb systemdatabaserna, så det kanske inte går att köra under normal kontorstid. Mer information finns i ALTER DATABASE ... ANGE ENABLE_BROKER.

ALTER DATABASE msdb SET ENABLE_BROKER;