Megosztás a következőn keresztül:


Az adatbázispostal kapcsolatos gyakori hibák

A következőkre vonatkozik:SQL ServerAzure SQL Managed Instance

Ez a cikk az adatbázis-levelezéssel és azok megoldásaival kapcsolatos gyakori hibákat ismerteti.

T-SQL-parancsok SQL Server-példányon való futtatásához használja az SQL Server Management Studiót (SSMS), a Visual Studio Code MSSQL-bővítményét, az sqlcmd-et vagy a kedvenc T-SQL-lekérdezési eszközét.

Nem található az "sp_send_dbmail" tárolt eljárás

A sp_send_dbmail tárolt eljárás telepítve van az msdb adatbázisban. Vagy a sp_send_dbmail az msdb adatbázisból kell futtatnia, vagy meg kell adnia a tárolt eljárás háromrészes nevét.

Példa:

EXEC msdb.dbo.sp_send_dbmail ...

Vagy:

USE msdb;
GO
EXEC dbo.sp_send_dbmail ...

Az adatbázis-levelezés beállítása funkció használható az adatbázis-levelezés engedélyezésére és beállítására.

Érvénytelen profil

Ennek az üzenetnek két lehetséges oka lehet. Vagy a megadott profil nem létezik, vagy a sp_send_dbmail (Transact-SQL) futtató felhasználó nem rendelkezik engedéllyel a profil eléréséhez.

Egy profil engedélyeinek ellenőrzéséhez futtassa a tárolt eljárást sysmail_help_principalprofile_sp (Transact-SQL) a profil nevével. A tárolt eljárás sysmail_add_principalprofile_sp (Transact-SQL) vagy az adatbázis-levelezés konfigurálása használatával engedélyt adhat egy msdb felhasználónak vagy csoportnak a profil eléréséhez.

Hozzáférés megtagadva az sp_send_dbmail esetében

Ez a cikk azt ismerteti, hogyan hárítható el az a hibaüzenet, amely szerint az adatbázisposta küldését megkísérlő felhasználónak nincs engedélye a végrehajtásra sp_send_dbmail

A hiba szövege a következő:

EXECUTE permission denied on object 'sp_send_dbmail', 
database 'msdb', schema 'dbo'.

Az adatbázis-levelek küldéséhez a felhasználóknak az adatbázis felhasználójának és a msdb DatabaseMailUserRole adatbázis-szerepkör tagjának kell lenniük az msdb adatbázisban. Ha msdb-felhasználókat vagy csoportokat szeretne hozzáadni ehhez a szerepkörhöz, használja az SQL Server Management Studiót, vagy hajtsa végre a következő utasítást az adatbázisposta küldéséhez szükséges felhasználóra vagy szerepkörre vonatkozóan.

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
    ,@membername = '<user or role name>';
GO

További információ: sp_addrolemember és sp_droprolemember.

Az adatbázis e-mailjei várólistára kerülnek, nincsenek bejegyzések a sysmail_event_log vagy a Windows alkalmazás eseménynaplójában

A Database Mail a Service Brokerre támaszkodik az e-mailek sorba állításához. Ha a Database Mail le van állítva, vagy ha a Service Broker üzenetkézbesítés nincs aktiválva az adatbázisban, a msdb Database Mail üzenetsorokat küld az adatbázisban, de nem tudja kézbesíteni az üzeneteket. Ebben az esetben a Szolgáltatásközvetítő üzenetei a Service Broker Mail üzenetsorában maradnak. A Service Broker nem aktiválja a külső programot, így nincsenek naplóbejegyzések sysmail_event_log , és nincsenek frissítések az elem állapotáról és a kapcsolódó nézetekben sysmail_allitems .

Futtassa a következő utasítást annak ellenőrzéséhez, hogy a Service Broker engedélyezve van-e az msdb adatbázisban:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';

Az érték 0 azt jelzi, hogy a Service Broker üzenetkézbesítés nincs aktiválva az msdb adatbázisban. A probléma megoldásához aktiválja a Service Brokert az adatbázisban a következő Transact-SQL paranccsal:

USE master ;
GO

ALTER DATABASE msdb SET ENABLE_BROKER ;
GO

A Database Mail számos belső tárolt eljárásra támaszkodik. A felület csökkentése érdekében ezek a tárolt eljárások le vannak tiltva az SQL Server új telepítésekor. A tárolt eljárások engedélyezéséhez használja a rendszer által tárolt eljárás Database Mail XPs (kiszolgálókonfigurációs beállítását) az sp_configure alábbi példához hasonlóan:

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

Előfordulhat, hogy a Database Mail le van állítva az msdb adatbázisban. A Database Mail állapotának ellenőrzéséhez hajtsa végre a következő utasítást:

EXECUTE dbo.sysmail_help_status_sp;

A Database Mail egy levelezési gazdaadatbázisban való elindításához futtassa a következő parancsot az msdb adatbázisban:

EXECUTE dbo.sysmail_start_sp;

A Service Broker megvizsgálja az üzenetek párbeszédpanel-élettartamát az aktiváláskor; Ezért a Service Broker átviteli üzenetsorában a konfigurált párbeszédpanel élettartamánál hosszabb üzenetek azonnal meghiúsulnak. A Database Mail frissíti a sikertelen üzenetek állapotát a sysmail_allitems és a kapcsolódó nézetekben. El kell döntenie, hogy újra elküldi-e az e-maileket. A Database Mail által használt párbeszédpanel élettartamának konfigurálásáról további információt a sysmail_configure_sp talál.

Következő lépés