Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Managed Instance
W tym artykule opisano niektóre typowe błędy napotkane z pocztą bazy danych i ich rozwiązaniami.
Aby uruchomić polecenia języka T-SQL w wystąpieniu programu SQL Server, użyj programu SQL Server Management Studio (SSMS),rozszerzenia MSSQL dla programu Visual Studio Code, narzędzia sqlcmd lub ulubionego narzędzia do wykonywania zapytań T-SQL.
Nie można odnaleźć procedury składowanej "sp_send_dbmail"
Procedura składowana sp_send_dbmail jest zainstalowana w bazie danych msdb. Musisz albo uruchomić sp_send_dbmail z bazy danych msdb, albo określić trzyczęściową nazwę procedury składowanej.
Przykład:
EXEC msdb.dbo.sp_send_dbmail ...
Lub:
USE msdb;
GO
EXEC dbo.sp_send_dbmail ...
Użyj opcji Konfiguruj pocztę bazy danych , aby włączyć i skonfigurować pocztę bazy danych.
Nieprawidłowy profil
Istnieją dwie możliwe przyczyny tego komunikatu. Określony profil nie istnieje lub użytkownik z systemem sp_send_dbmail (Transact-SQL) nie ma uprawnień dostępu do profilu.
Aby sprawdzić uprawnienia profilu, uruchom procedurę składowaną sysmail_help_principalprofile_sp (Transact-SQL) z nazwą profilu. Użyj procedury składowanej sysmail_add_principalprofile_sp (Transact-SQL) lub Skonfiguruj pocztę bazy danych, aby udzielić użytkownikowi lub grupie uprawnień do dostępu do profilu msdb.
Odmowa dostępu na sp_send_dbmail
W tym artykule opisano sposób rozwiązywania problemów z komunikatem o błędzie, informującym, że użytkownik próbujący wysłać Database Mail nie ma uprawnień do wykonania sp_send_dbmail
Tekst błędu to:
EXECUTE permission denied on object 'sp_send_dbmail',
database 'msdb', schema 'dbo'.
Aby wysyłać pocztę bazy danych, użytkownicy muszą mieć konto w msdb bazie danych i być członkiem roli DatabaseMailUserRole w msdb bazie danych. Aby dodać użytkowników lub grupy msdb do tej roli, użyj programu SQL Server Management Studio lub wykonaj następującą instrukcję dla użytkownika lub roli, która musi wysłać pocztę bazy danych.
EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole'
,@membername = '<user or role name>';
GO
Aby uzyskać więcej informacji, zobacz sp_addrolemember i sp_droprolemember.
Poczta bazy danych w kolejce, brak wpisów w dzienniku zdarzeń sysmail_event_log lub dziennika zdarzeń aplikacji systemu Windows
Poczta bazy danych opiera się na usłudze Service Broker na potrzeby kolejkowania wiadomości e-mail. Jeśli poczta bazy danych jest zatrzymana lub jeśli dostarczanie komunikatów usługi Service Broker nie jest aktywowane w msdb bazie danych, poczta bazy danych kolejkuje komunikaty w bazie danych, ale nie może dostarczać wiadomości. W takim przypadku komunikaty usługi Service Broker pozostają w kolejce poczty usługi Service Broker. Usługa Service Broker nie aktywuje programu zewnętrznego, dlatego nie ma żadnych wpisów dziennika w sysmail_event_log i nie ma aktualizacji stanu elementu w sysmail_allitems ani powiązanych widokach.
Wykonaj następującą instrukcję, aby sprawdzić, czy usługa Service Broker jest włączona w msdb bazie danych:
SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';
Wartość 0 wskazuje, że dostarczanie wiadomości usługi Service Broker nie jest aktywowane w bazie danych msdb. Aby rozwiązać ten problem, aktywuj usługę Service Broker w bazie danych za pomocą następującego polecenia Transact-SQL:
USE master ;
GO
ALTER DATABASE msdb SET ENABLE_BROKER ;
GO
Mechanizm Poczty baz danych opiera się na wielu wewnętrznych procedurach składowanych. Aby zmniejszyć obszar powierzchni, te procedury składowane są wyłączone w nowej instalacji programu SQL Server. Aby włączyć te procedury składowane, użyj XPs Poczty Bazodanowej (opcji konfiguracji serwera) w systemowej procedurze składowanej, jak pokazano w poniższym przykładzie:
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
Poczta bazy danych może zostać zatrzymana w msdb bazie danych. Aby sprawdzić stan poczty bazy danych, wykonaj następującą instrukcję:
EXECUTE dbo.sysmail_help_status_sp;
Aby uruchomić Database Mail w bazie danych mail hosta, uruchom następujące polecenie w bazie danych msdb.
EXECUTE dbo.sysmail_start_sp;
Usługa Service Broker sprawdza okres istnienia okna dialogowego dla komunikatów po aktywowaniu; w związku z tym wszystkie komunikaty, które znajdują się w kolejce transmisji usługi Service Broker dłużej niż skonfigurowany okres istnienia okna dialogowego natychmiast kończy się niepowodzeniem. Database Mail aktualizuje status nieudanych wiadomości w sysmail_allitems i powiązanych widokach. Musisz zdecydować, czy wysyłać wiadomości e-mail ponownie. Aby uzyskać więcej informacji na temat konfigurowania okresu istnienia okna dialogowego używanego przez usługę Poczta bazy danych, zobacz sysmail_configure_sp.