2012. 8. 9. 11:08

SSIS 데이터 이관 속도

  • ODBC Tasks  : 5 minutes 57 seconds 
  • ADO NET Tasks  : 11 seconds
  • OLEDB Task
    • fast load, table lock option: 5 seconds.
    • table or view option : 2 minutes and 21 seconds
    • sql command :  2.85 seconds.
  • SQL Server Destination
    • oledb destination : 2.5 seconds.
  • T-SQL Tasks
    • 프로시저 생성해서 작업 : 1.8 seconds!   -> 이건 같은 DB 네요.

 

http://www.mssqltips.com/sqlservertip/2684/importing-sql-server-data-using-ssis--which-option-is-fastest/


'Business Inteligence (SSIS)' 카테고리의 다른 글

SSIS::플랫 파일 가져오기 에러.  (0) 2012.02.09
SQL2008에서 SQL2000 DTS열기  (0) 2010.06.07
For컨테이너-무한루프  (0) 2010.06.03
스크립트task사용  (0) 2010.06.03
2012. 2. 9. 18:46

SSIS::플랫 파일 가져오기 에러.

플랫 파일을 Table로 저장 해서 가져오기를 할 때 특이한 값이 가져오거나, 일부 행을 가져오지 못 할경우가 발생한다. 
ssis 버그라고 하는데 SQL R2 버전이면서 win7 x64일 경우 발생한다.


아래는 버그에 대한 설명이고 sp2를 설치하면 된다고 한다.
혹은 플랫 파일 연결자의 속성중  TextQualifier  를 아무것도 없이 지운다. 

http://support.microsoft.com/kb/2576118 
 

here is a bug in SSIS when exporting data from SQL to a comma delimited text file where you specified no text qualifier.

This bug apparently only occurs when you develop the SSIS on a x64 win7 PC and copy the .dtsx file (windows explorer copy/paste) to network path of a x86 SQL server and schedule the job to run from SQL Agent on the same x86 SQL server.

When the SSIS runs, the text file is written out containing text qualifier = "“_x003C_none_x003E".

If you look at " _x003C_none_x003E", it actually means <none>.  x003C = "<" and x003E = ">".

 

If you go into the SSIS package, double-click in the connection manager section to open the flat file connection manager editor and try to clear the text qualifier removing the <none>, the <none> value get added back in.

The only work-around is to NOT open the flat file connection manager editor, but instead make the change using the property window and clear out any value in the TextQualifier field.

 

Other similar problems occur when you actually want to put a real value in the text qualifier.  For explain if you select the double-quote as the text qualifier and copy to a x86 server and run, you end up with a text file containing the value " _x0022" around each field instead of a double quote.

 

In my mind this is a serious bug, I did some research and other people have been having this same issue.

 

FYI, the SQL server is currently SQL2008 with SP2.  I will try to get it updated to SP3/4 this weekend to see that will help.

 

FYI2, when I am developing the SSIS using VS2008 and my local test/run is done through visual studio on my Dev PC (x64).  Everything works fine this way.  I do not have a instance of SQL on my machine so I did not test it running from SQL Agent on my PC.

 

'Business Inteligence (SSIS)' 카테고리의 다른 글

SSIS 데이터 이관 속도  (0) 2012.08.09
SQL2008에서 SQL2000 DTS열기  (0) 2010.06.07
For컨테이너-무한루프  (0) 2010.06.03
스크립트task사용  (0) 2010.06.03
2010. 6. 3. 23:54

For컨테이너-무한루프

 

Question
FOR 문을 이용해서 무한적으로 반복해서 실행하고 싶은 작업이 있습니다.
그러면서도 작업과 작업 사이에 대기시간을 5초 정도 주고 싶습니다.
즉, 매번 반복되면서 5초에 한번씩 A 라는 곳에서 select 해서 B 라는 곳으로 Insert 하는 작업이 필요합니다.
대기시간 주는 것은 여기 사이트에 예시도 있어서 가능 할 것 같은데 계속 실행되면서  select 하려면 어떻게 해야 할까요?
작업할때 이렇게 대기와 loop가 필요할 때가 있다 JOB으로 등록했을때는 주기가 1분 마다 밖에 안되기 때문에 초 단위 대기가 필요할때는 이렇게 해야한다.

 

다음과 같이 For루프 컨테이너를 추가합니다.

 

 

 

루프 편집기에서 다른 조건은 설정할 필요 없이 EvalExpression 속성 값에 true 입력합니다.

 

 

이렇게 설정하는 것은 쿼리에서

 

WHILE (1=1)

BEGIN

 

END

 

비슷한 형태입니다.

 

이제, For 루프 컨테이너 안에 필요한 작업들을 설정해서 넣고선, 5 동안 대기하는 것을 구현해야 합니다.

 

이전에 올린 글에 FOR 루프 컨테이너를 이용해서 일정 시간 동안 대기하는 것을 구현한 것이 있습니다. 하지만 방법은 쓰지 마시기 바랍니다. (CPU 과도하게 높이 올라갑니다.)

http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005SSIS&intSeq=523

 

대신, SQL 명령을 이용하는 것이 가장 바람직할 같습니다.

 

작업들을 구성한 , 가장 마지막 부분에 SQL 실행 작업을 추가한 ,

 

 

DB 연결을 설정하고, 다음과 같은 간단한 명령을 사용합니다.

) 5 동안 대기를 해야 경우

                  WAITFOR DELAY ’00:00:05’

 

 

 

 

 

루핑 마다 마지막 단계에서 5초간 대기하는 무한 루프가 만들어졌습니다.

 

 

이 글은 스프링노트에서 작성되었습니다.

'Business Inteligence (SSIS)' 카테고리의 다른 글

SSIS::플랫 파일 가져오기 에러.  (0) 2012.02.09
SQL2008에서 SQL2000 DTS열기  (0) 2010.06.07
스크립트task사용  (0) 2010.06.03
Debugging and Logging in SSIS  (0) 2010.06.03
2009. 7. 27. 10:57

SSIS::Foreach 이용한 장비별 동일 로직 반복 - ADO 열거자

DBA 작업을 하면서 장비별 동일 정보를 관리용으로 수집하고 싶은 경우가 종종 있게 된다.

연결 정보만 틀리고 동일한 로직을 호출하면 되는데 여러개의 데이터 흐름 작업을 만들고, 여러 연결 관리자를 만들게 되면 관리상의 이슈로 힘들어 지게 된다.

 

또한, 간혹 발생하게 될 장비의 IP 변경으로 인해 패키지를 다시 빌드해야 하는 단점도 발생하게 된다.

이런 점을 해결하기 위해 DB의 연결 정보를 파일로 처리하여 Foreach 루프 컨테이너의 ADO 연결자를 사용하여 장비별 동일 로직을 실행하는 예제를 만들어 본다.

 

- 한대성 님의 자료를 도움 받음 -

 

 

1. 관련 변수들을 선언한다.

object 변수와 파일에서 connection string 을 읽어올 변수는 필수이다. (obj_conn, file_conn)

 

 

 

2. conn_file01.txt 파일을 만들고  연결 스트링 정보를 입력한다.

연결정보에 관한 정보는 시스템에 맞게 입력

 

Data Source=ip 정보;User ID=;PWD=;Initial Catalog=db명;Provider=SQLOLEDB.1;Persist Security Info=True;Auto Translate=False;

 

 

 

3. 새 플랫 파일 연결관리자를 만들고 2번에서 입력한 파일을 읽을 수 있게 처리한다.

 

 

 

 

4. 플랫 파일 원본을 선택한 후 파일 연결관리자를 입력해서  connection string이 열로 출력되어 레코드 집합 대상을 만들 수 있게 처리해 준다.

 

 

5.  레코드 집한 대상에 VariableName 에 object 변수를 선택하여 파일에서 읽어온 정보가 해당 변수에 담아지도록 처리한다.

 

 

6. 파일 출력열이 맞는지 확인 한다.

 

 

 

7.  Foreach 루프 컨데이터를 이용해서 불러들인 연결 정보 만큼 동일 로직을 수행하게 작업 처리한다.

 

 

 

8.  ADO 연결자를 선택하고 원본 변수에 데이터 흐름 작업에서 connection string 정보를 담은 변수를 입력한다. 이 변수의 row 수 만큼 loop 작업이 실행되게 된다.

 

 

 

9.  ForEach 컨테이너에서 변수 매핑 을 클릭하고 출력되는 열을 변수에 담는다.

 

 

10.

담은 변수를 연결 관리자를 하나 만든다음에 실행된 DB의 커넥션 변수에 해당 변수를 매핑해 준다.

이로써 DB에 동적으로 연결 정보를 받아 작업이 실행될 수 있다.

 

 

 

 

11 SQL 실행작업을 하나 선택하고 DB를 연결관리자의 select @@servername을 실행하게 하고 출력된 결과를 스크립트 작업을 통해서 메세지 박스로 확인하는 작업이다.

 

해당 장비로 접속하여 실행되는 모습을 볼 수 있다.

 

 

'Business Inteligence (SSIS)' 카테고리의 다른 글

SQL2008에서 SQL2000 DTS열기  (0) 2010.06.07
For컨테이너-무한루프  (0) 2010.06.03
스크립트task사용  (0) 2010.06.03
Debugging and Logging in SSIS  (0) 2010.06.03