データベース メールのトラブルシューティング : ローカル サーバーのトラブルシューティング時のリモート サーバーからのメール送信
新規 : 2006 年 12 月 12 日
ここでは、ローカル サーバーで生成された電子メールを、リモート サーバーで一時的に送信する方法について説明します。ローカル サーバー上のデータベース メールの構成に問題がある場合は、その原因を確認して修復するときに、この手順が役立ちます。このトピックの内容は、データベース メールで送信される電子メールにのみ適用されます。xp_sendmail またはサード パーティのユーティリティを使用して送信する電子メールには影響を与えません。
メモ : |
---|
このトピックで、ローカル サーバーは、トラブルシューティング対象のサーバーを指しています。リモート サーバーは、トラブルシューティング時にローカル サーバーに代わって電子メールを送信する別のサーバーを指しています。 |
電子メールは、一度に 1 台のサーバーからのみ送信できます。リモート サーバーのデータベース メールがローカル サーバーの電子メールを送信するように構成されている場合、そのリモート サーバー自体の電子メールは送信できません。
ローカル サーバーで生成された電子メールをリモート サーバーが送信する場合、その電子メールのすべての電子メール エラーおよびデータベース メール ログ エラーは、ローカル サーバーの msdb テーブルに書き込まれます。リモート サーバーがローカル サーバーの電子メールを送信するように構成されているとき、ローカル サーバーで電子メールの送信を再開した場合は、どちらのサーバーも電子メール メッセージを送信できます。どちらのサーバーが電子メール メッセージを送信したのかを確認するには、電子メール メッセージのヘッダーを参照する必要があります。
メモ : |
---|
以下の手順を実行するには、ローカル サーバーとリモート サーバーが両方とも SQL Server 2005 Service Pack 2 以降のバージョンを実行している必要があります。 |
手順
ローカル サーバーの電子メール メッセージをリモート サーバーが送信するように構成するには
リモート サーバーでデータベース メールがセットアップされていることを確認します。データベース メールをセットアップする方法については、「データベース メールの操作方法に関するトピック」を参照してください。
トラブルシューティング中に生成された電子メールが使用する、ローカル サーバー上の各プロファイルと同じプロファイルを、リモート サーバー上に作成します。各プロファイルには、有効なアカウントが 1 つ必要です。ただし、そのアカウントは、ローカル サーバー上のプロファイルのアカウントと同一である必要はありません。
ローカル サーバーで生成された電子メールを送信するのに DatabaseMailUserRole のメンバシップが必要である場合、ローカル サーバーの DatabaseMailUserRole のメンバになっている Windows 認証ログイン アカウントが、リモート サーバーでもそのロールのメンバになっていることを確認します。
DatabaseMail90.exe.config というテキスト ファイルを作成し、次の内容を記述します。
LocalServerName
には、ローカル サーバーの名前を指定します。DatabaseName
のmsdb
はそのままにします。<configuration> <appSettings> <add key="DatabaseServerName" value ="LocalServerName" /> <add key="DatabaseName" value ="msdb" /> </appSettings> </configuration>
このファイルを、リモート サーバーの \MSSQL\Binn フォルダに DatabaseMail90.exe という名前で保存します。既定のパスは、<drive>\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn です。
別のサーバーの電子メールを送信できるようにデータベース メールを構成するため、リモート サーバーで次のコードを実行します。
重要 : このコードによって、システム テーブルにレコードが挿入されます。このコードは変更しないでください。制約が設定されているので、レコードは 1 回しか挿入されません。制約が機能している限り、このシステム テーブルのデータは直接変更しないでください。 USE msdb; GO INSERT INTO [msdb].[dbo].[sysmail_configuration] ( [paramname] ,[paramvalue] ,[description] ) VALUES ( N'ReadFromConfigurationFile' ,N'1' ,N'Send mail from mail server in configuration file' ); GO
リモート サーバーで
dbo.sysmail_start_sp
を実行して、データベース メールを再起動します。USE msdb; GO EXEC dbo.sysmail_start_sp; GO
ローカル サーバーの電子メール メッセージの送信を停止するようにリモート サーバーを再構成するには
ローカル サーバーによる電子メールの送信を再開するには、リモート サーバーで次のコードを実行します。このコードを実行すると、リモート サーバーは、ローカル サーバーで生成された電子メール メッセージの送信を停止し、再びリモート サーバー上で生成された電子メールを送信するようになります。
USE msdb; GO EXEC sysmail_configure_sp @parameter_name = N'ReadFromConfigurationFile' ,@parameter_value = N'0'; GO
リモート サーバーで
dbo.sysmail_start_sp
を実行して、データベース メールを再起動します。USE msdb; GO EXEC dbo.sysmail_start_sp; GO
リモート サーバー上でデータベース メールの構成を切り替えるには
別のサーバーで生成された電子メール メッセージを送信するようにリモート サーバーを切り替えるには、msdb.dbo.sysmail_configuration で
ReadFromConfigurationFile
レコードのparameter_value
を1
に設定し、msdb.dbo.sysmail_start_sp を実行します。リモート サーバーで生成された電子メール メッセージを送信するようにリモート サーバーを切り替えるには、parameter_value
を0
に設定し、msdb.dbo.sysmail_start_sp を実行します。USE msdb; GO EXEC sysmail_configure_sp @parameter_name = N'ReadFromConfigurationFile' ,@parameter_value = N'0|1'; GO
別のローカル サーバーで生成された電子メールを送信するようにリモート サーバーを構成するには、DatabaseMail90.exe.config 構成ファイルの DatabaseServerName キーの値をそのローカル サーバーの名前に変更し、msdb.dbo.sysmail_start_sp を実行します。
権限
dbo.sysmail_start_sp および sysmail_configure_sp の EXECUTE 権限、dbo.sysmail_configuration の INSERT 権限が、既定により sysadmin 固定サーバー ロールのメンバに与えられます。
\MSSQL\Binn に構成ファイルを作成するには、NTFS アクセス許可が必要です。
ローカル サーバーとリモート サーバーの両方で sysadmin 固定サーバー ロールのメンバに設定されているログイン アカウントを使用して、上記のトラブルシューティング手順を実行することをお勧めします。