Linux의 BCP 유틸리티를 사용하여 데이터 가져오기 및 내보내기 - Amazon Relational Database Service

Linux의 BCP 유틸리티를 사용하여 데이터 가져오기 및 내보내기

Bulk Copy Program(BCP) 유틸리티는 RDS for SQL Server DB 인스턴스와 데이터 파일 간에 대량의 데이터를 전송하는 효율적인 방법을 제공합니다. Linux 환경의 BCP를 사용하여 일괄 데이터 작업을 수행할 수 있으므로 데이터 마이그레이션, ETL 프로세스 및 정기적인 데이터 전송에 유용합니다.

BCP는 파일에서 SQL Server 테이블로 데이터를 가져오고 SQL Server 테이블에서 파일로 데이터를 내보내는 것을 모두 지원합니다. 이는 구분된 텍스트 파일을 포함한 다양한 형식의 정형 데이터를 전송하는 데 특히 효과적입니다.

사전 조건

Linux에서 RDS for SQL Server DB 인스턴스와 함께 BCP를 사용하기 전에 다음 사항이 있는지 확인합니다.

  • RDS for SQL Server DB 인스턴스에 네트워크로 연결된 Linux 환경

  • 다음을 포함하여 Linux 시스템에 설치된 Microsoft SQL Server 명령줄 도구:

    • sqlcmd - SQL Server 명령줄 쿼리 도구

    • bcp - Bulk Copy Program 유틸리티

  • RDS for SQL Server DB 인스턴스에 유효한 자격 증명

  • SQL Server 포트(일반적으로 1433)에서 연결을 허용하도록 보안 그룹을 통해 구성된 네트워크 액세스

  • 수행하려는 작업에 대한 적절한 데이터베이스 권한

Linux에 SQL Server 명령줄 도구 설치

Linux의 BCP를 사용하려면 Microsoft SQL Server 명령줄 도구를 설치해야 합니다. 특정 Linux 배포에 대한 자세한 설치 지침은 다음 Microsoft 설명서를 참조하세요.

설치 후 다음을 실행하여 PATH에서 도구를 사용할 수 있는지 확인합니다.

bcp -v sqlcmd -?

RDS for SQL Server에서 데이터 내보내기

BCP를 사용하여 RDS for SQL Server DB 인스턴스의 데이터를 Linux 시스템의 파일로 내보낼 수 있습니다. 이는 백업 생성, 데이터 분석 또는 마이그레이션을 위한 데이터 준비에 유용합니다.

기본 내보내기 구문

BCP를 사용하여 데이터를 내보내는 기본 구문은 다음과 같습니다.

bcp database.schema.table out output_file -S server_name -U username -P password [options]

위치:

  • database.schema.table - 정규화된 테이블 이름

  • output_file - 출력 파일의 경로 및 이름

  • server_name - RDS for SQL Server 엔드포인트

  • username - 데이터베이스 사용자 이름

  • password - 데이터베이스 암호

내보내기 예시

다음 예시에서는 sales 데이터베이스의 customers 테이블에서 데이터를 내보냅니다.

bcp sales.dbo.customers out /home/user/customers.txt \ -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \ -U admin \ -P mypassword \ -c \ -t "|" \ -r "\n"

이 명령은 다음을 수행합니다.

  • customers 테이블에서 데이터 내보내기

  • 출력을 /home/user/customers.txt에 저장

  • 문자 형식(-c) 사용

  • 파이프(|)를 필드 구분 기호(-t "|")로 사용

  • 줄 바꿈을 행 구분 기호(-r "\n")로 사용

RDS for SQL Server로 데이터 가져오기

BCP를 사용하여 Linux 시스템의 파일에서 RDS for SQL Server DB 인스턴스로 데이터를 가져올 수 있습니다. 이는 데이터 마이그레이션, 테스트 데이터 로드 또는 정기적인 데이터 업데이트에 유용합니다.

기본 가져오기 구문

BCP를 사용하여 데이터를 가져오는 기본 구문은 다음과 같습니다.

bcp database.schema.table in input_file -S server_name -U username -P password [options]

위치:

  • database.schema.table - 정규화된 대상 테이블 이름

  • input_file - 입력 파일의 경로 및 이름

  • server_name - RDS for SQL Server 엔드포인트

  • username - 데이터베이스 사용자 이름

  • password - 데이터베이스 암호

가져오기 예시

다음 예시에서는 파일에서 customers 테이블로 데이터를 가져옵니다.

bcp sales.dbo.customers in /home/user/customers.txt \ -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \ -U admin \ -P mypassword \ -c \ -t "|" \ -r "\n" \ -b 1000

이 명령은 다음을 수행합니다.

  • 데이터를 customers 테이블로 가져오기

  • /home/user/customers.txt에서 데이터를 읽습니다.

  • 문자 형식(-c) 사용

  • 파이프(|)를 필드 구분 기호(-t "|")로 사용

  • 줄 바꿈을 행 구분 기호(-r "\n")로 사용

  • 1,000개 행의 배치로 데이터 처리(-b 1000)

일반적인 BCP 옵션

BCP는 데이터 형식 지정 및 전송 동작을 제어하는 다양한 옵션을 제공합니다. 다음 표에 일반적으로 사용되는 옵션이 설명되어 있습니다.

옵션 설명
-c 모든 열에 문자 데이터 유형 사용
-n 기본 데이터베이스 데이터 유형 사용
-t 필드 구분 기호 지정(기본값은 탭)
-r 행 구분 기호 지정(기본값은 줄 바꿈)
-b 일괄 작업의 배치 크기 지정
-F 내보내거나 가져올 첫 번째 행 지정
-L 내보내거나 가져올 마지막 행 지정
-e 거부된 행을 캡처할 오류 파일 지정
-f 데이터 형식 지정을 위한 형식 파일 지정
-q 객체 이름에 따옴표로 묶인 식별자 사용

모범 사례 및 고려 사항

Linux에서 RDS for SQL Server와 함께 BCP를 사용하는 경우 다음 모범 사례를 고려하세요.

  • 배치 처리 사용 - 대규모 데이터세트의 경우 -b 옵션을 사용하여 데이터를 배치로 처리합니다. 이렇게 하면 성능이 개선되고 오류 복구가 개선됩니다.

  • 적절한 오류 처리 - -e 옵션을 사용하여 분석을 위해 오류 정보와 거부된 행을 별도의 파일로 캡처합니다.

  • 적절한 데이터 형식 선택 - 교차 플랫폼 호환성을 위해 문자 형식(-c)을 사용하거나 소스와 대상이 모두 SQL Server인 경우 더 나은 성능을 위해 기본 형식(-n)을 사용합니다.

  • 자격 증명 보호 - 암호를 명령줄에 직접 입력하지 마세요. 적절한 권한이 있는 환경 변수 또는 구성 파일을 사용하는 것이 좋습니다.

  • 작은 데이터세트로 테스트 - 대량의 데이터를 처리하기 전에 작은 데이터세트로 BCP 명령을 테스트하여 형식 지정 및 연결을 확인합니다.

  • 네트워크 연결 모니터링 - 특히 대규모 데이터 전송의 경우 안정적인 네트워크 연결을 보장합니다. 장기 실행 작업에는 screen 또는 tmux와 같은 도구를 사용하는 것이 좋습니다.

  • 데이터 무결성 검증 - 데이터 전송 후 행 수와 샘플 데이터를 확인하여 작업이 성공적으로 완료되었는지 확인합니다.

일반적인 문제 해결

다음 표에는 Linux의 BCP 및 해당 솔루션을 사용할 때 발생할 수 있는 일반적인 문제가 설명되어 있습니다.

문제 Solution
연결 제한 시간 초과 또는 네트워크 오류 Amazon RDS 엔드포인트, 보안 그룹 설정 및 네트워크 연결을 확인합니다. Linux 시스템에서 SQL Server 포트(일반적으로 1433)에 액세스할 수 있는지 확인합니다.
인증 실패 횟수 사용자 이름과 암호를 확인합니다. 데이터베이스 사용자에게 수행 중인 작업에 대한 적절한 권한이 있는지 확인합니다.
데이터 형식 오류 필드와 행 구분 기호를 확인합니다. 데이터 형식이 BCP에서 요구하는 것과 일치하는지 확인합니다. 복잡한 데이터 구조에 형식 파일을 사용합니다.
권한 거부 오류 데이터베이스 사용자에게 대상 테이블에 대한 가져오기의 경우 INSERT 권한, 내보내기의 경우 SELECT 권한이 있는지 확인합니다.
대용량 파일 처리 문제 -b 옵션과 함께 배치 처리를 사용합니다. 성능 향상 및 오류 복구를 위해 대용량 파일을 더 작은 묶음으로 분할하는 것이 좋습니다.
문자 인코딩 문제 데이터 파일이 호환되는 문자 인코딩을 사용하는지 확인합니다. 문자 형식에 -c 옵션을 사용하거나 적절한 코드 페이지를 지정합니다.