BCP가 이전 버전의 SQL Server로 데이터를 가져오고 RDS에서 데이터를 가져 오는 데 일부 도구보다 더 효과적인 것으로 나타났습니다. (감사합니다 @ivan_posdeev.)
먼저 SQL Server Management Studio, 작업, 스크립트 생성에서 데이터베이스를 마우스 오른쪽 단추로 클릭하여 스키마를 생성합니다. 고급 객체에서 모든 객체를 체크하고 필요한 모든 것이 스크립팅되도록합니다 (통계, 인덱스 등). 대상 데이터베이스의 이름이 다른 경우 "데이터베이스 사용"을 선택 취소하고 대상 데이터베이스 버전과의 호환성을 설정하고 스키마를 생성하는 파일입니다. 목적지에 데이터베이스를 만들고 (사용하여이 파일을 실행 osql, sqlcmd또는 GUI)를.
데이터를 이동하려면 다음 쿼리를 실행 두 번 온 소스 먼저 목적지에 실행 가져 오기 배치 파일을 생성하는 첫 번째 열을 주석, 추출 데이터에 배치 파일을 생성 할 수있는 두 번째 열을 주석, 데이터베이스. 소스 및 대상 서버, 인스턴스 이름, 출력 및 입력 파일 디렉토리, 사용자 이름 및 비밀번호를 추가해야합니다. 통합 보안을 사용하려면 -U및 -P옵션을로 대체하십시오 -T.
유니 코드를 지원합니다. 필요하지 않으면 -N두 명령문 의 스위치를로 변경하십시오 -n.
SELECT
'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME + ' out d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
-- 'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME + ' in d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME + '.ERRORS.dat'
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
ORDER BY
s.Name, t.NAME
schema.tablename.ERRORS.dat라는 이름의 검사 파일을 실행 한 후 실패한 행이 포함됩니다 (없는 경우 비어 있음).
BCP에 대한 MSDN 참조는 여기 , BCP 옵션에 대한 보다 자세한 설명은 여기를 참조 하십시오 .
나는 이것이 스크립트 생성과 내가 시도한 도구보다 훨씬 우수하다는 것을 알았습니다. 또한 백업을 허용하지 않는 RDS 데이터베이스에서도 실행됩니다. 생성 된 데이터 파일은 SQL 스크립트 크기의 30 %이며, 실행하는 데 약간의 시간이 걸리며 훨씬 안정적입니다. (데이터 스크립팅을 위해 SQL Server가 생성 한 스크립트는 항상 트립 되었으나 때로는 예측할 수없는 경우도 있음) 생성 된 SQL이 2008R2와 호환되지 않았습니다 (예 : used nvarchar(0), 종종 알 수없는 이유로 완료되지 않았습니다). BCP는 제약 조건 위반도 복제합니다. 참조 무결성과 같은).