모든 서버의dbmail 설정 대량 수정 (추천)

2435 단어
최근에 이러한 사례가 발생했습니다. 모든 SQL Server의 Database Mail의 SMTP를 수정해야 합니다. 원래의 SMTP는 10입니다.xxx.xxx.xxx, 현재 192.168로 수정해야 합니다.xxx.xxx, 메일 주소를 규범화해야 합니다[email protected]의 접미사를 (으) 로 수정해야 합니다[email protected](정보가 알레르기 처리를 했다).
SSMS 클라이언트의 UI 인터페이스를 사용하여 수정하면 많은 서버가 한 대씩 수정하는데 시간이 걸릴 뿐만 아니라 무미건조하다.스크립트만 사용할 수 있습니다. 스크립트를 한 번 작성한 후에 Multiple Server Query Execution(이 관리, 데이터베이스 유지 보수를 적극 추천합니다)을 사용하여 스크립트를 한 번 실행하면 모두 처리됩니다.남은 시간에 차를 마시고 새로운 지식을 배울 수 있습니다!

DECLARE @EmailAccount sysname;
DECLARE @SmtpServer sysname;
DECLARE @EmailAddress NVARCHAR(120);
DECLARE @EmailSuffix NVARCHAR(32);
DECLARE @NewEamilAddress NVARCHAR(120);
--DECLARE @ActualEmailSuffix NVARCHAR(32)='xxxx.com'; SQL Server 2005 , Cannot assign a default value to a local variable.
DECLARE @ActualEmailSuffix NVARCHAR(32);
DECLARE @ActualSmtpServer sysname;
SET @ActualEmailSuffix='xxx.com';
SET @ActualSmtpServer='192.168.xxx.xxx';
DECLARE EmailAccount_Cursor CURSOR FAST_FORWARD
FOR
SELECT sa.[name]    
   ,ss.[servername] 
   ,sa.email_address
 FROM [msdb].[dbo].[sysmail_server] ss 
 INNER JOIN [msdb].[dbo].[sysmail_account] sa
 ON ss.[account_id]=sa.[account_id];
OPEN EmailAccount_Cursor;
FETCH NEXT FROM EmailAccount_Cursor INTO @EmailAccount, @SmtpServer,@EmailAddress;
WHILE @@FETCH_STATUS = 0
BEGIN
  IF LTRIM(RTRIM(@SmtpServer))!=@ActualSmtpServer
  BEGIN
    EXECUTE msdb.dbo.sysmail_update_account_sp
       @account_name = @EmailAccount
      ,@mailserver_name=@ActualSmtpServer;
    PRINT @SmtpServer;
    PRINT @EmailAccount;
  END;
  SET @EmailSuffix=SUBSTRING(@EmailAddress,CHARINDEX('@',@EmailAddress)+1, LEN(@EmailAddress) -CHARINDEX('@',@EmailAddress))
  IF @EmailSuffix!=@ActualEmailSuffix
  BEGIN
    SET @NewEamilAddress= REPLACE(@EmailAddress,@EmailSuffix,@ActualEmailSuffix);
    EXECUTE msdb.dbo.sysmail_update_account_sp
       @account_name = @EmailAccount
      ,@email_address=@NewEamilAddress
      ,@mailserver_name=@SmtpServer;
    PRINT @EmailAccount;
    PRINT @NewEamilAddress;
  END;
  FETCH NEXT FROM EmailAccount_Cursor INTO @EmailAccount, @SmtpServer,@EmailAddress;
END
CLOSE EmailAccount_Cursor;
DEALLOCATE EmailAccount_Cursor;

좋은 웹페이지 즐겨찾기