sql >> データベース >  >> RDS >> Sqlserver

SQLServerでのデータベースメールの構成

    SQLServerデータベースメールはSQLServer2005で導入されました。データベースメールは、SQLServerエンジンを使用して電子メールを送信できるコンポーネントです。データベースメールを使用すると、管理者または開発者はクエリ出力をエンドユーザーに送信できます。 DBAは、電子メールアラートと通知を受け取るように構成できます。データベースメールはSMTP(Simple Mail Transfer Protocol)を使用して、受信者に電子メールを配信します。

    この記事では、SQLServerデータベースメールを構成する方法を説明します。

    データベースメールを有効にするための前提条件

    データベースメール機能を有効にするには、次の前提条件が必要です。

    1. MSDBデータベースのServiceBrokerを有効にする必要があります。
    2. SQLServerエージェントサービスが実行されている必要があります。

    ServiceBrokerを有効にする必要があります

    データベースメールでは、サービスブローカーが電子メールをキューに入れる必要があります。サービスブローカーが無効になっている場合、データベースメールはサービスブローカーメッセージを配信できず、サービスブローカーキューに残ります。
    サービスブローカーが有効になっていることを確認するには、次のクエリを実行します。

    USE master 
    go 
    
    SELECT database_id AS 'Database ID', 
           NAME        AS 'Database Name', 
           CASE 
             WHEN is_broker_enabled = 0 THEN 'Service Broker is disabled.' 
             WHEN is_broker_enabled = 1 THEN 'Service Broker is Enabled.' 
           END         AS 'Service Broker Status' 
    FROM   sys.databases 
    WHERE  NAME = 'msdb.'

    出力は次のようになります。

    MSDBデータベースのサービスブローカーが無効になっている場合は、次のクエリを順番に実行して、サービスブローカーを有効にします。

    Use master
    go
    alter database [MSDB] set single_user with rollback immediate
    GO
    alter database [MSDB] set Enable_Broker
    GO
    alter database [MSDB] set multi_user with rollback immediate
    GO

    SQLServerエージェントサービスが実行されている必要があります

    データベースメールは、SQLServerエージェントサービスを使用して電子メールまたはメッセージを送信します。エージェントサービスが実行されていない場合、SQLServerは電子メールを送信できません。エージェントサービスが実行されていない間は、すべてのメッセージがキューに入れられ、エージェントサービスが開始されると、キューに入れられたすべてのメッセージが配信されます。

    エージェントサービスのステータスを確認するには、SQLServerManagementStudioで次のコマンドを実行します。

    use master
    go
    EXEC xp_servicecontrol N'querystate',N'SQLAgent$CMS'

    出力は次のようになります。

    SQL Serverエージェントサービスが実行されていない場合は、開始する必要があります。 SQL Serverエージェントサービスを開始するには、サービスを開きます 、コントロールパネル>>管理ツール>>サービスに移動します 。サービスのリストで、SQLServerエージェントを検索します 。 SQLServerエージェントを右クリックします 開始を選択します 次の画像に示すように:

    サービスブローカーを有効にし、SQLエージェントサービスを開始したら、データベースインスタンスの構成パラメーターを変更してデータベースの電子メールを有効にします。デフォルトでは、データベースの電子メール機能は有効になっていません。 Database Mail XPsの構成値を変更して有効にする必要があります 0から1まで。ここでも、データベースメールXP パラメータは高度なオプションです。したがって、変更する前に、詳細オプションを表示を変更してください 0から1までの構成パラメーター。

    データベースメールを有効にするには、次のクエリを順番に実行します。

    USE master
    Go
    EXEC sp_configure 'show advanced options', 1 --Enable advance option
    Go
    RECONFIGURE
    Go
    EXEC sp_configure 'Database Mail XPs,' 1 --Enable database Mail option
    Go
    RECONFIGURE
    Go
    EXEC sp_configure 'show advanced options', 0 --Disabled advanced option
    Go
    RECONFIGURE
    Go

    データベースメールを有効にしたら、データベースメールプロファイルとデータベースメールアカウントを作成します。

    データベースメールの設定

    すべての前提条件が満たされたら、データベースメールアカウントとデータベースメールプロファイルを構成します。

    データベースメールプロファイルとアカウントの作成

    データベースメールアカウントとデータベースメールプロファイルを構成するには、SQL ServerManagementStudioを開きます。オブジェクトエクスプローラーで、[管理]を展開します データベースメールの構成を右クリックします 、次の画像に示すように:

    データベースメール構成ウィザード ダイアログボックスが開きます。ダイアログボックスで、次のタスクを実行してデータベースメールを設定するを選択します。 ラジオボタンを押して、次へをクリックします 。

    さて、新しいプロファイル ダイアログボックスで、プロファイル名、オプションの説明を入力し、追加をクリックします。 ボタンをクリックしてSMTPアカウントを作成します。複数のSMTPアカウントを構成できます。データベースメールが電子メールを送信するとき、SMTPアカウントにリストされている優先度に基づいてSMTPアカウントを使用します グリッドビュー。電子メールの送信中にアカウントに障害が発生した場合、プロファイルは優先順位リストの次のアカウントを使用します。次の画像を参照してください:

    新しいデータベースメールアカウント ダイアログボックスで、適切なアカウント名を入力します 、説明 (オプション)、メールアドレス表示名返信メール (オプション)、SMTPサーバー およびポート番号 。 SMTPサーバーがSSL/TSL認証を使用している場合は、サーバーに安全な認証が必要を確認してください。 オプション。認証リストで、SMTPサーバーの認証に使用する認証の種類を選択し、[ OK]をクリックします。 。次の画像を参照してください:

    データベースメール設定ウィザードに戻ります ダイアログボックスで、SMTPアカウントがSMTPアカウントに一覧表示されます グリッドビュー。次の画像を参照してください:

    次へをクリックします データベースのメールプロファイルのセキュリティを構成します。データベースの電子メールプロファイルは、プライベートまたはパブリックのいずれかで構成できます。プライベートプロファイルの使用を使用して電子メールを送信できるのは、特定のユーザーまたはロールのみです。すべてのデータベースユーザーまたはロールは、パブリックプロファイルを使用して電子メールを送信できます。ユーザーはMSDBデータベースに作成する必要があり、それらのユーザーは DatabaseMailUserRoleという名前のデータベースロールのメンバーである必要があります。 メールを送信します。プロファイルをデフォルトのプロファイルとして作成することもできます。プロファイルのセキュリティが設定されたら、[次へ]をクリックします システムパラメータを設定します。構成を表示するには、次の画像を参照してください。

    システムパラメータの設定 ウィンドウでは、再試行回数、添付ファイルの最大サイズ、添付ファイルとしての送信が禁止されているファイル拡張子のリストを設定できます。次の画像を参照してください:

    システムパラメータを設定したら、[次へ]をクリックします 構成全体とアクションのリストを確認します。 完了をクリックします データベースメールの設定を完了します。次の画像を参照してください。

    構成が完了したら、[閉じる]をクリックします ウィザードを終了します。次の画像を参照してください:

    T-SQLを使用したデータベースメールプロファイルとアカウントの作成と構成

    T-SQLを使用して、データベースのメールプロファイルとメールアカウントを構成することもできます。データベースメールを構成するには、ユーザーは次のストアドプロシージャに対する「実行」権限を持っている必要があります。

    1. Sysmail_add_account_sp
    2. Sysmail_add_profile_sp
    3. Sysmail_add_profileaccount_sp

    Sysmail_add_account_sp プロシージャは、データベースメールのアカウントを作成します。データベースメールのアカウントを作成するには、次のコードを実行します。

    EXEC msdb.dbo.sysmail_add_account_sp
        @account_name = 'Database Mail Default SMTP account'
      , @description = 'This account will be used to send database mail'
      , @email_address = '[email protected]'
      , @display_name = 'DBA Support'
      , @replyto_address = ''
      , @mailserver_type = 'SMTP'
      , @mailserver_name = '192.168.1.60'
      , @port = 25
    Go

    Sysmail_add_profile_sp プロシージャは、データベースのメールプロファイルを作成します。データベースメールプロファイルを作成するには、次のコードを実行します。

    -- Create a Database Mail profile
    EXEC msdb.dbo.sysmail_add_profile_sp
        @profile_name = 'Database Mail Profile'
      , @description = 'This profile will be used to send database mail'
    Go

    Sysmail_add_profileaccount_sp プロシージャは、SMTPアカウントをデータベースのメールプロファイルに追加します。 SMTPアカウントをデータベースのメールプロファイルに追加するには、次のコードを実行します。

    -- Add the account to the profile
    EXEC msdb.dbo.sysmail_add_profileaccount_sp
        @profile_name = 'Database Mail Profile'
      , @account_name = 'Database Mail Default SMTP account'
      , @sequence_number = 1
    Go

    データベースメールを使用したテストメールの送信

    前述のように、データベースメールを構成して電子メールを送信するには、ユーザーをMSDBデータベースに作成し、このユーザーを DatabaseMailUserRoleのメンバーにする必要があります。 。これにより、データベースユーザーはデータベースメールを使用して電子メールを送信できます。データベースユーザーは、データベースメールの管理に使用される次のストアドプロシージャに対して実行権限を持っている必要があります。

    • sysmail_help_status_sp
    • sysmail_delete_mailitems_sp
    • sysmail_allitems
    • sysmail_event_log
    • sysmail_faileditems
    • sysmail_mailattachments
    • sysmail_sentitems
    • sysmail_unsentitems

    SSMSを使用してテストメールを送信するには、SQL ServerManagementStudioを開きます>>管理を展開します SQLServer管理で>>データベースメールを右クリックします テストメールの送信を選択します 。次の画像を参照してください:

    テストメールを送信 ダイアログボックスが開きます。 データベースメールプロファイル ドロップダウンで、[宛先]で、電子メールの送信に使用するプロファイル(データベースメールプロファイル)の名前を選択します。 テキストボックスに、メール受信者のメールアドレスを入力し、[テストメールを送信]をクリックします 。次の画像を参照してください:

    T-SQLコードを使用してメールを送信することもできます。これを行うには、次のT-SQLスクリプトを実行します。

    use MSDB
    go
    EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'Database Mail Profile'
      , @recipients = '[email protected]'
      , @subject = 'Automated Test Results (Successful)'
      , @body = 'The stored procedure finished successfully.'
    Go

    メールのステータスを確認するための重要なテーブルのリスト

    以下は、構成データベースのメール、データベースアカウント、および電子メールのステータスを表示するために使用されるテーブルのリストです。

    [テーブルID=53 /]

    データベースのメールログを表示するには、SQL ServerManagementStudioを開きます>>管理を展開します>>データベースメールを右クリックします データベースメールログの表示を選択します 。次の画像を参照してください:

    ログファイルビューア 次の画像に示すように、ダイアログが開きます。

    データベースのメールアカウントとプロファイルの削除

    データベースメールプロファイルを削除するには、最初にデータベースメールプロファイルを削除します。これを行うには、データベースメールの構成ウィザードを開きます。 記事の冒頭で説明したように。ウィザードで、[データベースメールアカウントとプロファイルの管理]を選択します 次へをクリックします 。次の画像を参照してください:

    プロファイルとアカウントの管理 sページで、[変更の表示または既存のプロファイルの削除]を選択します 次へをクリックします 。次の画像を参照してください:

    既存のプロファイルの管理 ページで、プロファイル名から削除するプロファイルの名前を選択します ドロップダウンボックスをクリックして、削除をクリックします ボタンをクリックして、[次へ]をクリックします。 次の画像を参照してください:

    次に、画面に夏のアクションが表示され、概要を確認して、[完了]をクリックします。 プロファイルを削除します。次の画像を参照してください:

    データベースメールプロファイルを削除した後、データベースアカウントを削除します。これを行うには、データベースメール構成ウィザードを開く>>データベースメールアカウントとプロファイルの管理を選択します>> 既存のアカウントの表示、変更、または削除を選択します オプションを選択し、[次へ]をクリックします 次の画像を参照してください:

    既存のアカウントの管理 ページ、アカウント名から ドロップダウンボックスで、削除するアカウントの名前を選択し、削除をクリックします。 次の画像に示すように、ボタン:

    次の画面には、夏のアクションが表示され、概要を確認して、[完了]をクリックします。 アカウントを削除します。次の画像を参照してください:

    T-SQLを使用したデータベースメールアカウントとプロファイルの削除

    T-SQLスクリプトを実行して、データベースメールアカウントとデータベースメールプロファイルを削除することもできます。データベースプロファイルとアカウントを削除するには、次のコードを実行します。

    IF EXISTS(SELECT * 
                FROM msdb.dbo.sysmail_profileaccount pa 
                  INNER JOIN msdb.dbo.sysmail_profile p ON pa.profile_id = p.profile_id 
                  INNER JOIN msdb.dbo.sysmail_account a ON pa.account_id = a.account_id   
                WHERE p.name = 'Database Mail Profile' 
                  AND a.name = 'Database Mail Default SMTP account') 
      BEGIN 
        EXECUTE msdb.dbo.sysmail_delete_profileaccount_sp @profile_name = 'Database Mail Profile',@account_name = 'Database Mail Default SMTP account' 
      END  
    IF EXISTS(SELECT * FROM msdb.dbo.sysmail_account WHERE  name = 'Database Mail Default SMTP account') 
      BEGIN 
        EXECUTE msdb.dbo.sysmail_delete_account_sp @account_name = 'Database Mail Default SMTP account' 
      END 
    IF EXISTS(SELECT * FROM msdb.dbo.sysmail_profile WHERE  name = 'Database Mail Profile')  
      BEGIN 
        EXECUTE msdb.dbo.sysmail_delete_profile_sp @profile_name = 'Database Mail Profile' 
      END

    データベースメールとデータベースアカウントが削除されたことを確認するには、次のクエリを実行します。

    SELECT * 
                FROM msdb.dbo.sysmail_profileaccount pa 
                  INNER JOIN msdb.dbo.sysmail_profile p ON pa.profile_id = p.profile_id 
                  INNER JOIN msdb.dbo.sysmail_account a ON pa.account_id = a.account_id   
                WHERE p.name = 'Database Mail Profile' 
                  AND a.name = 'Database Mail Default SMTP account'

    概要

    この記事では、次のことを説明しました:

    1. データベースメールとその目的は何ですか?
    2. データベースメールを構成するための前提条件。
    3. SQLServer管理スタジオを使用してデータベースメールアカウントとデータベースメールプロファイルを構成します。
    4. T-SQLを使用してデータベースメールアカウントとデータベースメールプロファイルを構成します。
    5. SSMSとT-SQLを使用してテストメールを送信します。
    6. データベースメールプロファイルとデータベースメールアカウントを適切に削除します。

    1. uuidを数値として保存する方法は?

    2. リンクされたテーブルのリストをAccess2016からExcelにエクスポートする方法

    3. ODBCアプリケーションをMySQLに接続する

    4. DBMS_OUTPUT.PUT_LINEの出力をファイルにリダイレクトするにはどうすればよいですか?