Bagikan melalui


Kesalahan umum dengan email database

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Artikel ini menjelaskan beberapa kesalahan umum yang ditemui dengan email database dan solusinya.

Tidak dapat menemukan prosedur tersimpan 'sp_send_dbmail'

Prosedur tersimpan sp_send_dbmail diinstal dalam database msdb. Anda harus menjalankan sp_send_dbmail dari database msdb, atau menentukan nama tiga bagian untuk prosedur tersimpan.

Contoh:

EXEC msdb.dbo.sp_send_dbmail ...

Atau:

USE msdb;
GO
EXEC dbo.sp_send_dbmail ...

Gunakan Wizard Konfigurasi Email Database untuk mengaktifkan dan mengonfigurasi email database.

Profil tidak valid

Ada dua kemungkinan penyebab pesan ini. Profil yang ditentukan tidak ada, atau pengguna yang menjalankan sp_send_dbmail (Transact-SQL) tidak memiliki izin untuk mengakses profil.

Untuk memeriksa izin profil, jalankan prosedur tersimpan sysmail_help_principalprofile_sp (Transact-SQL) dengan nama profil. Gunakan prosedur tersimpan sysmail_add_principalprofile_sp (Transact-SQL) atau Wizard Konfigurasi Email Database untuk memberikan izin bagi pengguna atau grup msdb untuk mengakses profil.

Izin ditolak pada sp_send_dbmail

Topik ini menjelaskan cara memecahkan masalah pesan kesalahan yang menyatakan bahwa pengguna yang mencoba mengirim Email Database tidak memiliki izin untuk menjalankan sp_send_dbmail.

Teks kesalahannya adalah:

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

Untuk mengirim email Database, pengguna harus menjadi pengguna dalam database msdb dan anggota peran database DatabaseMailUserRole dalam database msdb. Untuk menambahkan pengguna atau grup msdb ke peran ini, gunakan SQL Server Management Studio atau jalankan pernyataan berikut untuk pengguna atau peran yang perlu mengirim Email Database.

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

Untuk informasi selengkapnya, lihat sp_addrolemember dan sp_droprolemember.

Email database diantrekan, tidak ada entri di sysmail_event_log atau Log Peristiwa Aplikasi Windows

Email Database mengandalkan Service Broker untuk mengantre pesan email. Jika Email Database dihentikan atau jika pengiriman pesan Service Broker tidak diaktifkan dalam database msdb , Database Mail mengantre pesan dalam database tetapi tidak dapat mengirimkan pesan. Dalam hal ini, pesan Service Broker tetap berada dalam antrean Service Broker Mail. Service Broker tidak mengaktifkan program eksternal, sehingga tidak ada entri log dalam sysmail_event_log dan tidak ada pembaruan status item dalam sysmail_allitems dan tampilan terkait.

Jalankan pernyataan berikut untuk memeriksa apakah Service Broker diaktifkan dalam database msdb :

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

Nilai 0 menunjukkan bahwa pengiriman pesan Service Broker tidak diaktifkan dalam database msdb. Untuk memperbaiki masalah, aktifkan Service Broker dalam database dengan perintah Transact-SQL berikut:

USE master ;
GO

ALTER DATABASE msdb SET ENABLE_BROKER ;
GO

Email Database bergantung pada sejumlah prosedur tersimpan internal. Untuk mengurangi area permukaan, prosedur tersimpan ini dinonaktifkan pada penginstalan baru SQL Server. Untuk mengaktifkan prosedur tersimpan ini, gunakan opsi Database Mail XPs dari prosedur tersimpan sistem sp_configure , seperti dalam contoh berikut:

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  

Email Database mungkin dihentikan dalam database msdb . Untuk memeriksa status Email Database, jalankan pernyataan berikut:

EXECUTE dbo.sysmail_help_status_sp;

Untuk memulai Email Database dalam database host email, jalankan perintah berikut ini di database msdb:

EXECUTE dbo.sysmail_start_sp;

Service Broker memeriksa masa pakai dialog untuk pesan saat diaktifkan; oleh karena itu, setiap pesan yang telah berada dalam antrean transmisi Service Broker lebih lama dari masa pakai dialog yang dikonfigurasi segera gagal. Email Database memperbarui status pesan yang gagal dalam sysmail_allitems dan tampilan terkait. Anda harus memutuskan apakah akan mengirim pesan email lagi. Untuk informasi selengkapnya tentang mengonfigurasi masa pakai dialog yang digunakan Database Mail, lihat sysmail_configure_sp (Transact-SQL).

Baca juga