2015-01-20 2 views
1

동시에 SSIS 패키지를 여러 번 실행하려는 ASP.NET 응용 프로그램이 있습니다 (패키지를 실행하는 데 약간의 시간이 걸릴 수 있으며, 전에 다른 인스턴스를 시작하는 기능이 필요합니다. 첫 번째 완료). 웹 서버는 SQL Server와 동일한 서버에 있지 않으며 SQL Server 또는 SSIS가 설치되어 있지 않습니다.SSIS 패키지를 여러 번 동시에 원격으로 실행합니다.

SSIS를 SQL 작업으로 랩핑하고 sp_start_job을 사용하여 실행할 수 있지만 SQL 작업을 두 번 동시에 실행할 수 없으므로이 작업은 저에게 적합하지 않습니다.

From what I understand .NET은 SSIS를 클라이언트에 설치하지 않고 직접 시작할 수 없습니다. SQL 서버에 특수 원격 처리기를 설치할 수있는 위치에 있지 않습니다.

이러한 제한 사항이 적용되는 이유는 무엇입니까? 내가 탐색 할 수있는 다른 해결 방법이 많이 있지만 가능한 경우 SSIS를 사용하고 싶습니다.

SQL 서버 2008R2 및 .NET 4.5

편집

나는 그 보안 문제처럼 보이기 때문에 날아 나는 생각하지 않는다 xp_cmdshell를 사용하여 몇 가지 솔루션을 발견했습니다 - 또는 만들어 즉석에서 작업을 수행하고 실행 한 다음 삭제하지만 사용자 계정에는 서버에서 작업을 생성 할 수있는 권한이 없습니다.

답변

1

당신은 두 번 이상 실행되는 동일한 SQL 에이전트 작업을 할 수 없습니다, 그래서 왜 속이지? 내가 delete_level = 1, 작업이 성공적으로 실행 후 자체를 삭제합니다 지정한 때문에 대신 다음 sp_add_job, sp_add_job_step을 불러 경우 어떻게 sp_start_job를 호출의

sp_start_job

를 호출.

다음 작업 정의가 주어지면 IAmUnique 및 붐 고유 작업 이름의 끝과 비슷한 GUID를 추가하고 동시에 실행할 수 있습니다.

DECLARE @jobId binary(16) 
EXEC msdb.dbo.sp_add_job 
    @job_name = N'IAmUnique' 
, @enabled = 1 
, @notify_level_eventlog = 0 
, @notify_level_email = 2 
, @notify_level_netsend = 2 
, @notify_level_page = 2 
, @delete_level = 0 
, @category_name = N'[Uncategorized (Local)]' 
, @owner_login_name = N'EU\u001899' 
, @job_id = @jobId OUTPUT; 

EXEC msdb.dbo.sp_add_jobstep 
    @job_name = N'IAmUnique' 
, @step_name = N'Run package' 
, @step_id = 1 
, @cmdexec_success_code = 0 
, @on_success_action = 1 
, @on_fail_action = 2 
, @retry_attempts = 0 
, @retry_interval = 0 
, @os_run_priority = 0 
, @subsystem = N'SSIS' 
, @command = N'/SQL "\New Package" /SERVER "localhost\dev2008" /CHECKPOINTING OFF /REPORTING E' 
, @database_name = N'master' 
, @flags = 0; 

EXEC msdb.dbo.sp_update_job 
    @job_name = N'IAmUnique' 
, @enabled = 1 
, @start_step_id = 1 
, @notify_level_eventlog = 0 
, @notify_level_email = 2 
, @notify_level_netsend = 2 
, @notify_level_page = 2 
, @delete_level = 1 
, @description = N'' 
, @category_name = N'[Uncategorized (Local)]' 
, @notify_email_operator_name = N'' 
, @notify_netsend_operator_name = N'' 
, @notify_page_operator_name = N''; 
+0

사용자가 작업을 생성 할 권한이 필요하기 때문에이 옵션을 고려하지 않을 것입니다. 작업을 생성하는 데 권한이 필요합니다. 이는 너무 강력하고 좋은 보안 정책이되지는 않을 것이라고 생각했습니다.그러나 사용 권한을 살펴보면 계정에 가장 낮은 에이전트 권한 인 [SQLAgentUserRole] (https://msdn.microsoft.com/en-us/library/ms188283.aspx)을 부여 할 수있는 것처럼 보입니다. 그것이 가져서는 안되는 권한 집합. 이 작품에 대해 좀 더 자세히 살펴볼 것입니다. –

+0

@JoeEnos 작업을 생성하고 실행할 수있는 저장 프로 시저를 생성하고 응용 프로그램에 실행 권한을 부여 할 수있는 저장 프로 시저를 만든 다음 더 높은 권한 수준에서 작업을 수행하기 위해 Execute AS와 같은 것을 사용하는 방법으로 제한 할 수 있습니다 . 나는 앱이 일을 실행하도록 내버려 두었다면 아마도 앱을 만들게하는 것에 대해 더 큰 관심사가 아니라고 생각했다. – billinkc

+0

감사합니다. –

3

저장 프로 시저에서 패키지를 시작할 수 있어야합니다. 특히 catalog.create_execution 메소드를 살펴 보겠습니다. 그런 다음 ASP.NET에서 저장 프로 시저를 호출하면됩니다.

다음 MSDN 문서가 도움이 될 수 Deploy and Execute SSIS Packages using Stored Procedures

편집 : 위는 SQL 서버 2012 새로운 작동합니다. 이전 버전의 경우 명령 줄에서 DTExec을 사용하여 SSIS 패키지를 실행해야 할 수 있습니다. SSIS 패키지는 저장 프로 시저를 통해 얻을 수도 있습니다.

은 다음을 참조하십시오 Executing a SSIS Package from Stored Procedure in SQL Server

+0

SQL2012에서 새로 추가 된 것처럼 보이므로 나에게 도움이되지 않습니다. 하지만 2012 년에 올바른 방법 인 것 같습니다. 감사. –

+0

@ JoeEnos 네 말이 맞아, 나는 그것을 간과했다. 아마도 저장 프로 시저를 통해 명령 줄에서 DTExec를 실행해야 할 것입니다. 예를 들어 위의 내 업데이트를 참조하십시오. –

관련 문제