2013-05-15 5 views
1

우리는 SQL Server 2008R2를 사용하여 메일 큐를 처리합니다. 새 메일이 대기열에 입력되고 1 분마다 한 번씩 일괄 처리 파일이 처리되지 않은 메일을 읽고 처리하고, smtp를 통해 메일을 보내고 대기열의 메일에 플래그를 지정합니다 (레코드가 대기열에서 삭제됨). 메일 히스토리 테이블).배치 파일을 트리거하는 SQL

이 방법의 문제점은 1 분에 1 회만 실행되므로 메일이 "자동으로"발송되지 않으며 몇 시간 동안 발신 메일이없는 경우에도 매분마다 배치 파일이 실행된다는 것입니다.

메일 큐에 삽입 된 각 새 항목에서 SQL Server가 배치 파일을 실행하는 방법이 있습니까? 나는 트리거가 있다는 것을 알고 있지만 비동기 적이기 때문에 배치 파일에 시간이 걸리면 SQL 서버를 유지할 것입니다.

+3

왜 외부 배치 파일을 사용해야합니까? SQL Server 내에서이 기능을 직접 쉽게 구현할 수 있으므로 관리가 더 쉬워집니다. 또한 : x 분마다 실행할 SQL 작업을 작성하여 수행해야 할 작업이 있는지 확인하십시오. 즉, 데이터베이스의 "정상적인"작업과 분리되어 데이터를 입력하는 사용자를 방해하지 않습니다. –

+0

보내기 전에 수행 된 비 관련 처리가 있으므로 이메일을 외부로 실행해야합니다. 그리고 대기열을 확인하기 위해 몇 분마다 실행되는 프로세스의 단점은 불필요 할 때 여러 번 실행되며 다른 한편으로는 전자 메일이 즉시 대신 몇 분 후에 꺼지기 때문에 응답이없는 것처럼 보일 것입니다. – user1480192

+0

현재 해결책이 잘된 것 같습니다. 실제로 메일이 "자동"으로 전송되지 않는다는 귀하의 의견을 이해할 수 없습니다. 메시지를 즉시 보내야하는 경우 전자 메일은 잘못된 메커니즘이므로 어쨌든 배달되지 않으며 읽는 데 어느 정도 시간이 걸릴지 알 수 없습니다. 또한 서비스를 효율적으로 쿼리하는 한 몇 분마다 데이터베이스를 확인하는 서비스에는 아무런 문제가 없습니다. – Pondlife

답변

1

SQL 서버 에이전트 작업을 작성하여 작업의 커서를 사용하여 배치 파일을 실행합니다. 한 번에 여러 행이 업데이트됩니다. 에이전트 작업을 실행하는 테이블에 트리거를 작성하십시오. 이것은 SQL 에이전트를 통해 실행되기 때문에 SQL 서버를 유지하지 않습니다. 행이 처리되고 이메일이 즉시 발송됩니다.

0

SQL Server에서 전자 메일을 보내는 것에 대해 이야기하고 있습니까?

http://msdn.microsoft.com/en-us/library/office/aa155737(v=office.10).aspx

는 그렇다면, 바로이 프로 시저로 보내 통합합니다.

IIS가 없다고 가정 할 때 자체 대기열을 시도하지 마십시오. 배치 서버와 같은 곳의 .NET 대기열에 전자 메일을 추가하는 CLR 프로 시저를 만듭니다. 그런 다음 큐를 읽고 전자 메일을 보내도록 배치 서버에서 프로세스를 실행할 수 있습니다. 주기적으로 실행하지 마십시오. 차단을 수행하여 대기열을 읽고 메일을 전송하는 루프에 보관하십시오. (시작시에 추가해야 할 수도 있습니다. 주기적으로 실행하거나 탄력성과 DR을 이유로 실행해야 할 수도 있습니다.)

관련 문제