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.

Untuk menjalankan perintah T-SQL pada instans SQL Server Anda, gunakan SQL Server Management Studio (SSMS), ekstensi MSSQL untuk Visual Studio Code, sqlcmd, atau alat kueri T-SQL favorit Anda.

Tidak dapat menemukan prosedur tersimpan 'sp_send_dbmail'

Prosedur sp_send_dbmail yang tersimpan diinstal dalam database msdb. Anda harus menjalankan sp_send_dbmail dari msdb database, 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 Konfigurasikan 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 Konfigurasikan email database untuk memberikan izin bagi msdb pengguna atau grup untuk mengakses profil.

Izin ditolak pada sp_send_dbmail

Artikel 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 msdb database dan anggota peran database DatabaseMailUserRole dalam msdb database. 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 msdb database, 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 di sysmail_event_log dan tidak ada pembaruan status item serta tampilan terkait di sysmail_allitems.

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

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

Nilai 0 menunjukkan bahwa pengiriman pesan Service Broker tidak diaktifkan dalam msdb database. 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 Database Mail XPs (opsi konfigurasi server) dari prosedur tersimpan sp_configure sistem, 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 msdb dalam database. Untuk memeriksa status Email Database, jalankan pernyataan berikut:

EXECUTE dbo.sysmail_help_status_sp;

Untuk memulai Database Mail dalam database host, 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.

Langkah selanjutnya