2013-08-13 3 views
0

내 SQL Server 인스턴스 데이터베이스에서 Azure에 새로 생성 된 데이터베이스로 하나의 테이블을 전송하고 싶습니다. 문제는 삽입 스크립트가 60GB입니다.큰 테이블을 Azure SQL 데이터베이스로 가져 오기

하나의 접근법은 백업 파일을 만든 다음 저장소에로드 한 다음 하늘색에서 가져 오기를 실행하는 것입니다. 그러나 문제는 내가 푸른 IO에 가져 오는 동안보다 그렇게하려고하면 오류가 있다는 것입니다 :

Could not load package. 
File contains corrupted data. 
File contains corrupted data. 

두 번째 문제는이 방법을 사용하여 나는 하나 개의 테이블을 복사하지 못할 것입니다을, 전체 데이터베이스는에 있어야한다 백업 파일.

그런 작업을 수행하는 다른 방법이 있습니까? 가장 좋은 해결책은 무엇입니까? 백업이 가장 좋은 경우 왜이 오류가 발생합니까?

답변

3

도구를 사용하면 매우 쉽게 (포인트 앤 클릭) 만들 수 있습니다. 한 가지 일이라면 거의 모든 도구 (Red Gate, BlueSyntax ...)를 사용할 수 있습니다. 당신은 항상 BCP을 가지고 있습니다. 이러한 접근 방식의 대부분은 단일 테이블을 백업하거나 복원 할 수있게합니다.

더 반복적 인 것이 필요한 경우 backup API을 사용하거나 SQLBulkCopy 클래스를 사용하여 직접 코딩해야합니다.

1

나는 60GB 스크립트를 실행하려고 시도했는지 모른다. 스크립트는 일반적으로 최적화되지 않은 단일 삽입을 수행합니다. 다양한 일괄 가져 오기/내보내기 옵션을 사용하여 살펴 보았습니까?

http://msdn.microsoft.com/en-us/library/ms175937.aspx/css http://msdn.microsoft.com/en-us/library/ms188609.aspx/css

이 좋은 대안이 될 수있는 SQL 애저 데이터베이스로 가져 오기를 할 수있는 IaaS의 VM을 사용하여 한 번로드됩니다. 일단 내 보낸 데이터 파일은 압축/압축되어 BLOB 저장소에 업로드 될 수 있습니다. 그런 다음 저장소로 파일을 가져 와서 VM에서 작업 할 수 있도록하십시오.

0

명령 프롬프트에서 BCP를 사용해 보셨습니까? 여기에 설명 된대로 : Bulk Insert Azure SQL.

기본적으로 모든 테이블 데이터가 포함 된 텍스트 파일을 만들고 명령 프롬프트에서 BCP 명령을 사용하여 Azure SQL 데이터베이스를 대량 복사합니다.

+0

한 번에 1000 개의 레코드 제한. 380k 레코드가있는 테이블이 있습니다. – fortboise

+0

1k 레코드의 실제 제한은 없습니다. 코드는 한 번에 1k 만 삽입합니다. 380k 레코드가 있다면 1k 레코드 380 건의 대량 삽입 –

+0

아, 고맙습니다. bcp *는 일괄 처리 크기 지정 (-b 옵션 또는 -h "ROWS_PER_BATCH = bb"로드 힌트)을 허용합니다. "일괄 처리에 대한 트랜잭션이 실패하면 현재 일괄 처리의 삽입 만 롤백됩니다." 귀하의 블로그 또는 ms 문서에 1,000이 기본값으로 표시되지 않습니다. 필자의 경우에는 (export db) + (INSERT INTO를 사용하는 테이블 데이터 전송 ... Azure의 제한이있는 localhost 서버의 SELECT) + (Azure로 다시 배포)로 끝났습니다. 큰 테이블 (지리 열이 있음), 완료되면 1GB 미만의 적당한 크기의 DB – fortboise

관련 문제