2009-07-28 5 views
3

간단한 SSIS 패키지 (외부 폴더의 데이터를 SQL 2005 테이블로 복사)를 실행하려고합니다. Asp.net 2.0 응용 프로그램에서이 패키지를 실행하고 싶습니다. 어떤 제안?Asp.net 응용 프로그램에서 SSIS 실행

나는 많은 다른 블로그와 웹 사이트를 검색 한, 그러나이 모든 방법 (보통 때문에 보안 문제의) 실패 등

EXEC 마스터

은 dtexec/FILE "패키지의 이름"으로 이어질 .. xp_cmdshell을 @cmd (아마 아주 좋은 생각)

sp_start_job

app.LoadPackage (@ "\ 서버 이름 \ 공유 이름 \ Package1.dtsx", null)와

미리 도움을 주셔서 감사합니다.

+0

이 답변도 알고 싶습니다. – NotMe

+0

wtaniguchi와 Eric, 도와 주셔서 대단히 감사합니다. 당신의 솔루션은 아마도 더 강력하고 강력 할 수 있습니다.하지만 우리의 설정에 적응하기 위해 다음을 수행했습니다. 이것이 실행 방법입니다. – LizardJack

+0

dba는 sp_start_job 작업 (특정 도메인 계정을 통해 수행됨)을 실행할 수있는 권한을 부여해야했습니다. SQLAgentReaderRole SQLAgentUserRole 그때 .NET 2.0을 통해 그것을 실행하려면 다음 마이크로 소프트 코드를 사용 SQLAgentOperatorRole : http://msdn.microsoft.com/ 나는 그가 또한 다음과 같은 역할로 나에게 권한을 부여했다 생각 ko-kr/library/ms403355.aspx 코드를 그대로 사용하고 다음 작업을 내 이름으로 변경해야합니다. jobParameter.Value = "RunSSISPackage" – LizardJack

답변

5

자, 저기, 당신이 열거 한 것은 절반 반의 정답입니다.

SSIS 패키지를 시작하는 데는 여러 가지 방법이 있습니다. 그러나 가장 좋은 방법은 아마도 sp_start_job입니다. 자, 이것은 여러분의 SSIS 패키지를 실행할 created a job을 의미합니다.

많은 시간 동안이 강아지는 자격 증명 문제로 인해 실패합니다. 즉, 실행 능력이 충분하지 않은 SQL Server 에이전트 계정 (일명 LOCAL SYSTEM)으로 피 묻은 것을 실행하려고합니다. 따라서 작업을 실행하려면 create a Credential, 그 다음은 a Proxy이 필요합니다. 따라서, 당신이해야 할 것은 thusly 히입니다 :

CREATE CREDENTIAL MyCred WITH IDENTITY 'CORP\MyUser', SECRET = '<PassGoesHere>' 
GO 
sp_add_proxy @proxy_name='MyProxy', @enabled = 1, @credential = 'MyCred' 
GO 
sp_grant_proxy_to_subsystem @proxy_name = 'MyProxy', @subsystem_id = 3 
GO 
sp_add_job @job_name = 'MyJob', @enabled = 1 
GO 
sp_add_jobstep 
    @job_name = 'MyJob', 
    @step_name = 'Run SSIS Package', 
    @subsystem = 'CMDEXEC', 
    @command = 'dtexec /F C:\Path\To\Package.dtsx', 
    @proxy_name = 'MyProxy' 

의미있는 문서 :

  1. CREATE CREDENTIAL
  2. sp_add_proxy
  3. sp_grant_proxy_to_subsystem
  4. sp_add_job
  5. sp_add_jobstep
+0

에릭, 빠른 응답과 도움을 주셔서 감사합니다. 이 문제는 아마도이 내용을 언급해야하지만 SSMS에 액세스 할 수는 없습니다. 나는 SQL 2005가 어떻게 설정 되었는가에 대한 믿음을 갖게되었지만 아마도 DBA는 그것을 완전히 잠겼습니다. SQL 2000에서 우리는 "데이터 변환 서비스"와 "관리"/ "SQL Server 에이전트"로 갈 수 있습니다. 유사한 점이 SQL 2005에서 지금 나와 사용할 수 없습니다. – LizardJack

+0

@Jack : 순수 SQL로 변경했습니다. 즐겨. – Eric

+0

고마워, 에릭. 나는 이것을 확실히 시도 할 것이다! 내가 당신에게 점수를 줄 수있는 방법이 있습니까? (나는 전에이 사이트를 사용한 적이 없다.) – LizardJack

1

서버 측 현명한 ASP.NET 응용 프로그램을 사용하면 추측 할 수있는 다른 .NET 응용 프로그램과 거의 비슷합니다. 여기에 SSIS 패키지 (SQLServer 2008)를 실행하는 코드 샘플이 있지만이 프로젝트의 NDA에 있기 때문에 copy'n'paste 할 수 없습니다.

그러나 우리는 Microsoft.SqlServer.Dts.Runtime.Wrapper라는 네임 스페이스를 사용하고 있으며 패키지 및 응용 프로그램과 DTSExecResult 열거 형 인터페이스를 사용하고 있다고 말할 수 있습니다. 제대로 작동합니다.

그리고 우리 데이터베이스에도 엑셀 시트를 가져오고 있습니다.

편집 : 는 여기에 우리가 여기 어떻게의 개요입니다 : 우리는 엑셀 시트를 가지고 우리가 우리의 시스템에 가져올 데이터를 포함하는. 우리 시스템은 ASP.NET 3.5/Castle Project/SQLServer 2008을 지원합니다. 사용자가 새 시트를 시스템에 업로드하면이를 폴더에 저장합니다. "c : \ UPLOAD"라고합시다. 동작이 트리거되므로 SSIS 패키지를 호출하여 SQL Server 2008로 가져옵니다.

우리는 (C#)를 구현하는 방법 :

Package package; 
Application app; 
DTSExecuteResult packageResult; 

String packagePath = ""; // You have to get your physical path to your package. 

app = new Application(); 
app.PackagePassword = "password"; // We have it here.. 
package = (Package)app.LoadPackage(packagePath, true, null); 
packageResult = package.Execute(); 

그 모든 클래스가 같은 네임 스페이스, Microsoft.SqlServer.Dts.Runtime.Wrapper 출신, 내가 전에 언급 한 바와 같이.

액세스 문제가있는 경우 DBA에게 권한을 요청하거나 SSIS 패키지를 실행하기 위해 새 권한을 만들도록 요청하는 것이 좋습니다. 추가 권한 수준이 필요하기 때문입니다.

희망이 도움이 될 수 있습니다.

+0

도움 주셔서 감사합니다. "Microsoft.SqlServer.Dts.Runtime"클래스를 사용하려고했지만 어쩌면 래퍼를 추가하면 도움이됩니다. – LizardJack

+0

안녕하세요, 어떻게 작동하는지 더 자세히 알 수 있다면 궁금하십니까? Eric은 나를 아래에서 돕고 있었지만 제안을 사용할 수있는 적절한 권한이 없습니다. 감사! – LizardJack

+0

그래, 내가 살펴보고, 아마도 "새로운"예제를 제공해 줄 것이다. 곧 내 대답 편집. – wtaniguchi

관련 문제