데이터 가져오기 및 내보내기 권장사항

이 페이지에서는 Cloud SQL에서 데이터를 가져오고 내보낼 때의 권장사항을 제공합니다. Cloud SQL로 데이터를 가져오는 방법에 대한 단계별 안내는 데이터 가져오기를 참조하세요. Cloud SQL에 있는 데이터나 관리하고 있는 인스턴스에 있는 데이터 등 데이터 내보내기에 관한 단계별 안내는 데이터 내보내기를 참조하세요.

가져오기 및 내보내기 권장사항

다음은 데이터를 가져오고 내보낼 때 고려해야 할 권장사항입니다.

Cloud Storage 요청자 지불 버킷 사용 금지

Cloud SQL에서 가져오기와 내보내기에 요청자 지불이 사용 설정된 Cloud Storage 버킷을 사용할 수 없습니다.

데이터를 압축하여 비용 절감

Cloud SQL에서는 압축된 파일과 압축되지 않은 파일을 모두 가져오고 내보낼 수 있습니다. 특히 대규모 인스턴스를 내보낼 때 파일을 압축하면 Cloud Storage에서 차지하는 저장공간 및 스토리지 비용을 상당 부분 절약할 수 있습니다.

BAK 파일을 내보낼 때 .gz 파일 확장자를 사용하여 데이터를 압축하세요. 파일 확장자가 .gz인 파일을 가져오면 자동으로 압축이 풀립니다.

장기 실행 가져오기 및 내보내기 프로세스 줄이기

Cloud SQL로 가져오고 Cloud SQL에서 내보내는 작업은 처리 중인 데이터의 크기에 따라 완료하는 데 많은 시간이 걸릴 수 있습니다. 이에 따른 영향은 다음과 같습니다.

  • 장기 실행 Cloud SQL 인스턴스 작업을 중지할 수 없습니다.
  • 각 인스턴스에 대해 한 번에 하나씩만 가져오기 또는 내보내기 작업을 수행할 수 있고 가져오기 또는 내보내기를 장기간 실행하면 일일 자동 백업과 같은 다른 작업이 차단됩니다.

더 작은 데이터 배치로 Cloud SQL 가져오기 또는 내보내기 기능을 사용하여 각 작업을 완료하는 데 걸리는 시간을 단축시킬 수 있습니다.

전체 데이터베이스 마이그레이션의 경우 SQL 파일 대신 BAK 파일을 가져오기에 사용합니다. 일반적으로 SQL 파일에서 가져오는 것이 BAK 파일에서 가져오는 것보다 훨씬 오래 걸립니다.

SqlPackage를 사용하여 데이터 가져오기 및 내보내기

SqlPackage를 사용하여 Cloud SQL에서 데이터를 가져오고 내보낼 수 있습니다. 데이터베이스 스키마 및 사용자 데이터를 포함한 SQL 데이터베이스를 BACPAC 파일(.bacpac)로 내보내고 BACPAC 파일에서 스키마 및 테이블 데이터를 새 사용자 데이터베이스로 가져올 수 있습니다.

SqlPackage는 사용자 인증 정보를 사용하여 SQL Server에 연결하여 데이터베이스 가져오기 및 내보내기를 수행합니다. 모든 Cloud SQL 사용자가 마이그레이션을 사용할 수 있습니다. 가져오기 및 내보내기 작업을 수행하려면 다음이 필요합니다.

  • 인스턴스에 연결된 워크스테이션. 이 워크스테이션에서 SqlPackage를 실행할 수 있습니다. 연결 옵션에 대한 자세한 내용은 연결 옵션 정보를 참조하세요.

  • 시스템에 설치된 SqlPackage. SqlPackage 다운로드 및 설치에 대한 자세한 내용은 Microsoft 문서를 참조하세요.

  • 인스턴스에 액세스하도록 설정된 사용자 인증 정보. 사용자 인증 정보 설정에 대한 자세한 내용은 Cloud SQL에 인증하는 방법을 참조하세요.

예시

가져오기

데이터를 데이터베이스 AdventureWorks2017로 가져오려면 다음 명령어를 실행합니다.

c:\Program Files\Microsoft SQL Server\160\DAC\bin>SqlPackage
/Action:Import /tsn:myTargetServer /tdn:AdventureWorks2017
/tu:myUsername /sf:mySourceFile
/TargetTrustServerCertificate:True /tp:myPassword

여기서,

  • mySourceFile은 로컬 스토리지의 작업 소스로 사용하려는 소스 파일입니다. 이 매개변수를 사용하는 경우 다른 소스 매개변수가 유효하지 않습니다.
  • myTargetServer는 대상 데이터베이스를 호스팅하는 서버의 이름입니다.
  • myUsername은 대상 데이터베이스에 액세스하는 데 사용할 SQL Server 사용자 이름입니다.
  • myPassword는 사용자 인증 정보의 비밀번호입니다.

자세한 내용은 Microsoft 문서를 참고하세요.

내보내기

AdventureWorks2017 데이터베이스에서 데이터를 내보내려면 다음 명령어를 실행합니다.

c:\Program Files\Microsoft SQL Server\160\DAC\bin>SqlPackage
/Action:Export /TargetFile:"myTargetFile"
/ssn:mySourceServer /su:myUsername /sdn:AdventureWorks2017
/SourceTrustServerCertificate:True /sp:myPassword

여기서,

  • myTargetFile는 데이터베이스 대신 작업 대상으로 사용할 대상 파일(.dockerpac 파일)입니다. 이 매개변수를 사용하면 다른 대상 매개변수가 유효하지 않습니다. 이 매개변수는 데이터베이스 대상만 지원하는 작업에는 유효하지 않습니다.
  • myUsername은 소스 데이터베이스에 액세스하는 데 사용할 SQL Server 사용자 이름입니다.
  • mySourceServer는 소스 데이터베이스를 호스팅하는 서버의 이름입니다.
  • myPassword는 사용자 인증 정보의 비밀번호입니다.

자세한 내용은 Microsoft 문서를 참고하세요.

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

Cloud SQL에서 데이터를 가져오고 내보내는 또 다른 옵션은 일괄 복사 프로그램(bcp) 유틸리티를 사용하는 것입니다. bcp 유틸리티를 사용하면 SQL Server 데이터베이스에서 데이터를 데이터 파일로 내보내고 데이터 파일에서 SQL Server 데이터베이스로 데이터를 가져올 수 있습니다. bcp 유틸리티는 사용자 인증 정보를 사용하여 SQL Server에 연결하여 데이터베이스 가져오기 및 내보내기를 수행합니다. 모든 Cloud SQL 사용자가 전송을 사용할 수 있습니다. 가져오기 및 내보내기 작업을 수행하려면 다음이 필요합니다.

  • bcp 유틸리티를 실행할 수 있고 Cloud SQL 인스턴스에 연결된 워크스테이션. 연결 옵션에 대한 자세한 내용은 연결 옵션 정보를 참조하세요.

  • 시스템에 설치된 bcp 유틸리티. bcp 다운로드 및 설치에 대한 자세한 내용은 Microsoft 문서를 참조하세요.

  • 인스턴스에 액세스하도록 설정된 사용자 인증 정보. 사용자 인증 정보 설정에 대한 자세한 내용은 Cloud SQL에 인증하는 방법을 참조하세요.

예시

가져오기

person.csv 파일에서 AdventureWorks2017 데이터베이스의 Person 테이블로 데이터를 가져오려면 다음 명령어를 실행합니다.

bcp Person.Person in "person.csv" -d AdventureWorks2017 -U myLoginID -S myServer

여기서,

  • myLoginID는 SQL Server에 연결하는 데 사용되는 로그인 ID입니다.
  • myServer는 연결할 SQL Server의 인스턴스입니다. 서버를 지정하지 않으면 bcp 유틸리티가 로컬 컴퓨터에서 SQL Server의 기본 인스턴스에 연결합니다.

자세한 내용은 Microsoft 문서를 참고하세요.

내보내기

AdventureWorks2017 데이터베이스의 Person 테이블에서 person.dat 파일로 데이터를 내보내려면 다음 명령어를 실행합니다.

bcp Person.Person out "person.dat" -U myLoginID -S myServer -d AdventureWorks2017

여기서,

  • myLoginID는 SQL Server에 연결하는 데 사용되는 로그인 ID입니다.
  • myServer는 연결할 SQL Server의 인스턴스입니다. 서버를 지정하지 않으면 bcp 유틸리티가 로컬 컴퓨터에서 SQL Server의 기본 인스턴스에 연결합니다.

자세한 내용은 Microsoft 문서를 참조하세요.

데이터 가져오기에 일괄 삽입 사용

일괄 삽입을 사용하면 Cloud Storage에 저장된 파일에서 SQL Server용 Cloud SQL 데이터베이스로 데이터를 가져올 수 있습니다.

이 섹션에서는 다음을 설명합니다.

필수 역할 및 권한

일괄 삽입을 구성하려면 다음이 필요합니다.

  • 데이터를 가져올 데이터베이스에 대한 CONTROL 권한
  • HMAC 액세스 키와 다음 권한을 가진 IAM 계정에 매핑된 보안 비밀

    • storage.buckets.get
    • 오류 로그 및 잘못된 데이터의 예시를 작성하기 위한 storage.objects.createstorage.multipartUploads.create

    또는 다음 역할을 사용할 수도 있습니다.

    • Storage Object Viewer
    • 오류 로그 및 잘못된 데이터의 예시를 작성하기 위한 Storage Object Creator

일괄 삽입을 사용하려면 다음이 필요합니다.

  • msdb.dbo.gcloudsql_bulk_insert 저장 프로시져에 대한 EXECUTE 권한. Cloud SQL은 인스턴스에서 대량 삽입이 사용 설정된 후 저장 프로시져를 만듭니다. Cloud SQL은 기본적으로 sqlserver 관리자 계정에 EXECUTE 권한을 부여합니다.
  • 데이터를 가져올 객체에 대한 INSERT 권한

일괄 삽입을 위한 사용자 만들기에 대한 자세한 내용은 사용자 만들기 및 관리를 참조하세요.

일괄 삽입 사용 시 고려사항

이 섹션에서는 일괄 삽입을 사용하는 동안 인스턴스의 보안, 성능, 안정성을 처리하기 위한 권장사항을 제공합니다.

보안

Cloud SQL은 HMAC 액세스 키와 보안 비밀을 인스턴스에 데이터베이스 범위 사용자 인증 정보로 암호화하고 저장합니다. 값을 저장한 후에는 이 값에 액세스할 수 없습니다. T-SQL 명령어를 사용하여 데이터베이스 범위 사용자 인증 정보를 삭제하여 인스턴스에서 키와 보안 비밀을 삭제할 수 있습니다. 키와 보안 비밀이 인스턴스에 저장되는 동안 백업을 수행하면 해당 백업이 해당 키와 보안 비밀을 포함합니다. HMAC 키를 비활성화 및 삭제하여 키를 유효하지 않게 렌더링할 수도 있습니다.

다음 작업은 의도치 않게 액세스 키와 보안 비밀을 전송하고 이를 사용할 수 있게 할 수 있습니다.

  • 인스턴스 클론: 클론된 인스턴스에서 키와 보안 비밀을 사용할 수 있습니다.
  • 읽기 복제본 만들기: 생성된 읽기 복제본에서 키와 보안 비밀을 사용할 수 있습니다.
  • 백업에서 복원: 백업에서 복원된 인스턴스에서 키와 보안 비밀을 사용할 수 있습니다.

이러한 작업을 수행한 후에는 대상 인스턴스에서 키와 보안 비밀을 삭제하는 것이 좋습니다.

일괄 삽입은 Cloud Storage 버킷에 저장된 파일에 파싱할 수 없는 데이터를 쓸 수 있습니다. 일괄 삽입이 액세스할 수 있는 데이터를 보호하려면 VPC 서비스 제어를 구성합니다.

성능

일괄 삽입을 사용하는 동안 성능에 미치는 영향을 완화하려면 다음을 수행하는 것이 좋습니다.

  • 기본적으로 모든 데이터를 단일 배치로 가져오기 때문에 @batchsize에 적절한 값을 테스트하고 설정합니다.
  • 대량 삽입의 경우 색인을 일시적으로 사용 중지하여 데이터 삽입 속도를 높입니다.
  • 가능하면 경합을 줄이고 데이터 로드 성능을 높일 수 있는 @tablock 옵션을 사용하세요.
  • @ordercolumnsjson 매개변수를 사용하여 클러스터링된 색인의 순서대로 정렬된 데이터를 지정합니다. 이렇게 하면 인스턴스 성능이 향상됩니다.
신뢰성

일괄 삽입을 사용하는 동안 인스턴스 신뢰성에 대한 영향을 줄이려면 다음을 수행하는 것이 좋습니다.

  • 장애가 발생하고 @batchsize가 사용되는 경우 데이터가 부분적으로 로드될 수 있습니다. 인스턴스에서 이 데이터를 수동으로 삭제해야 할 수 있습니다.
  • 로드 프로세스 중에 감지된 잘못된 데이터의 예시와 오류 로그를 유지하려면 @errorfile 옵션을 사용합니다. 이를 통해 로드할 수 없는 행을 쉽게 식별할 수 있습니다.

일괄 삽입 수행

다음 저장 프로시져를 사용하여 일괄 삽입 작업을 수행할 수 있습니다.

msdb.dbo.gcloudsql_bulk_insert

자세한 내용은 일괄 삽입을 사용하는 저장 프로시져를 참조하세요.

예시: Cloud Storage의 파일에서 데이터 가져오기 및 오류 파일 지정
1. 일괄 삽입 사용 설정

인스턴스에 일괄 삽입을 사용 설정하려면 cloud sql enable bulk insert 플래그를 사용 설정합니다.

gcloud sql instances patch INSTANCE_NAME --database-flags="cloud sql enable bulk insert"=on

INSTANCE_NAME을 일괄 삽입에 사용할 인스턴스의 이름으로 바꿉니다.

자세한 내용은 데이터베이스 플래그 구성을 참조하세요.

인스턴스에 이 플래그를 사용 설정하면 Cloud SQL이 인스턴스에 일괄 삽입 저장 프로시져를 설치하고 sqlserver 관리자 계정에 실행할 권한을 부여합니다.

2. HMAC 키 만들기

Cloud Storage 버킷에 액세스하려면 HMAC 키가 필요합니다. 서비스 계정에 HMAC 키를 만들고 일괄 삽입에 사용할 버킷에 서비스 계정 권한을 부여하는 것이 좋습니다. 자세한 내용 및 보안 고려사항은 일괄 삽입 사용 시 고려사항을 참조하세요.

셋째, 가져올 샘플 데이터 만들기
  1. 텍스트 편집기를 사용하여 다음 샘플 데이터가 포함된 ANSI 또는 UTF-16 인코딩으로 파일을 만듭니다. Cloud Storage 버킷에 파일을 저장하고 이름을 bulkinsert.bcp로 지정합니다.

    1,Elijah,Johnson,1962-03-21
    2,Anya,Smith,1982-01-15
    3,Daniel,Jones,1990-05-21
    
  2. 다음 샘플 데이터를 사용하여 형식 파일을 만듭니다. Cloud Storage 버킷에 파일을 저장하고 이름을 bulkinsert.fmt로 지정합니다. SQL Server에 XML 및 비XML 형식 파일에 대한 자세한 내용은 형식 파일 만들기를 참조하세요.

    13.0
    4
    1       SQLCHAR             0       7       ","      1     PersonID               ""
    2       SQLCHAR             0       25      ","      2     FirstName            SQL_Latin1_General_CP1_CI_AS
    3       SQLCHAR             0       30      ","      3     LastName            SQL_Latin1_General_CP1_CI_AS
    4       SQLCHAR             0       11      "\r\n"   4     BirthDate             ""
    
4. 저장 프로시져 실행
  1. sqlserver 사용자를 사용하여 인스턴스에 연결하고 일괄 삽입을 위한 샘플 데이터베이스와 테이블을 만듭니다.

    USE MASTER
    GO
    -- create test database
    DROP DATABASE IF EXISTS bulktest
    CREATE DATABASE bulktest
    GO
    
    -- create table to insert
    USE bulktest;
    GO
    CREATE TABLE dbo.myfirstimport(
    PersonID smallint,
    FirstName varchar(25),
    LastName varchar(30),
    BirthDate Date
    );
    
  2. 데이터베이스 마스터 키, 데이터베이스 범위 사용자 인증 정보, 외부 데이터 소스를 만듭니다. ID를 S3 Access Key로 설정합니다.

      -- create master key
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword1';
    
    -- create database scoped credential
    CREATE DATABASE SCOPED CREDENTIAL GCSCredential
    WITH IDENTITY = 'S3 Access Key',
    SECRET = '<Access key>:<Secret>';
    
    --create external data source
    CREATE EXTERNAL DATA SOURCE GCSStorage
    WITH ( TYPE = BLOB_STORAGE,
    LOCATION = 's3://storage.googleapis.com/bulk-insert-demo/'
    , CREDENTIAL = GCSCredential
    );
    
    CREATE EXTERNAL DATA SOURCE GCSStorageError
    WITH ( TYPE = BLOB_STORAGE,
    LOCATION = 's3://storage.googleapis.com/bulk-insert-demo/'
    , CREDENTIAL = GCSCredential
    );
    
  3. 일괄 삽입 저장 프로시져를 실행하여 샘플 데이터를 가져옵니다.

    EXEC msdb.dbo.gcloudsql_bulk_insert
    @database = 'bulktest',
    @schema = 'dbo',
    @object = 'myfirstimport',
    @file = 's3://storage.googleapis.com/bulk-insert-demo/bulkinsert.bcp',
    @formatfile = 's3://storage.googleapis.com/bulk-insert-demo/bulkinsert.fmt',
    @fieldquote = '"',
    @formatfiledatasource = 'GCSStorage',
    @ROWTERMINATOR = '0x0A',
    @fieldterminator = ',',
    @datasource ='GCSStorage',
    @errorfiledatasource = 'GCSStorageError',
    @errorfile = 's3://storage.googleapis.com/oom-data/bulkinsert/bulkinsert_sampleimport.log',
    @ordercolumnsjson =
    '[{"name": "PersonID","order": " asc "},{"name": "BirthDate","order": "asc"}]'
    
    

가져온 데이터 보기

다음 방법 중 하나를 사용하여 가져온 데이터를 볼 수 있습니다.

  • 다음 쿼리를 실행합니다.

    SELECT * FROM dbo.myfirstimport
    
  • Cloud SQL은 SQL 오류 로그에 이 절차의 레코드를 추가합니다. Cloud Logging에서 이를 확인할 수 있습니다. SQL Server Management Studio(SSMS)의 SQL 오류 로그 데이터에서도 이를 확인할 수 있습니다.

일괄 삽입 사용 중지

일괄 삽입을 사용 중지하려면 cloud sql enable bulk insert 플래그를 삭제합니다.

  gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable bulk insert"=off
  

INSTANCE_NAME을 일괄 삽입을 삭제할 인스턴스의 이름으로 바꿉니다.

또는 다음 명령어를 실행하여 모든 데이터베이스 플래그를 삭제할 수 있습니다.

  gcloud sql instances patch INSTANCE_NAME --clear-database-flags
  

INSTANCE_NAME을 일괄 삽입을 삭제할 인스턴스의 이름으로 바꿉니다.

스트라이핑된 가져오기 및 내보내기 사용

스트라이핑된 가져오기 또는 내보내기를 수행할 경우 작업을 완료하는 데 걸리는 시간을 줄이고, 5TB보다 큰 데이터베이스를 가져오고 내보내도록 설정합니다. 자세한 내용은 BAK 파일을 사용하여 내보내기 및 가져오기를 참조하세요.

가져온 데이터베이스 확인

가져오기 작업이 완료된 후 데이터베이스에 연결하고 적절한 데이터베이스 명령어를 실행하여 콘텐츠가 올바른지 확인합니다. 예를 들어 데이터베이스, 테이블, 특정 항목을 연결하고 나열합니다.

제한 사항

알려진 제한사항 목록은 데이터 가져오기 및 내보내기 문제를 참조하세요.

내보내기 작업 자동화

Cloud SQL은 데이터베이스 내보내기를 자동화하는 기본 제공 방법을 제공하지 않지만 여러 Google Cloud 구성요소를 사용하여 자체 자동화 도구를 빌드할 수 있습니다. 자세한 내용은 이 튜토리얼을 참조하세요.

문제 해결

가져오기 작업 문제 해결

문제 문제 해결
HTTP Error 409: Operation failed because another operation was already in progress. 인스턴스에 대기 중인 작업이 이미 있습니다. 한 번에 하나의 작업만 허용됩니다. 현재 작업이 완료된 후 요청을 시도하세요.
가져오기 작업이 너무 오래 걸립니다. 활성 연결이 너무 많으면 가져오기 작업을 방해할 수 있습니다.

사용하지 않는 작업을 종료합니다. Cloud SQL 인스턴스의 CPU 및 메모리 사용량을 확인하여 사용 가능한 리소스가 충분한지 확인합니다. 가져오기에 최대 리소스를 보장하는 가장 좋은 방법은 작업을 시작하기 전에 인스턴스를 다시 시작하는 것입니다.

다시 시작하면 다음과 같은 결과가 발생합니다.

  • 모든 연결이 끊깁니다.
  • 리소스를 소비할 수 있는 모든 태스크가 종료됩니다.
덤프 파일에 참조된 하나 이상의 사용자가 없으면 가져오기 작업이 실패할 수 있습니다. 덤프 파일을 가져오기 전에 객체를 소유하거나 덤프된 데이터베이스의 객체에 대한 권한이 부여된 모든 데이터베이스 사용자가 대상 데이터베이스에 있어야 합니다. 그렇지 않으면 가져오기 작업이 원래 소유권이나 권한으로 객체를 다시 만들지 못합니다.

가져오기 전에 데이터베이스 사용자를 만듭니다.

LSN 불일치 트랜잭션 로그 백업 가져오기 순서가 잘못되었거나 트랜잭션 로그 체인이 손상되었습니다.
백업 세트 테이블과 동일한 순서로 트랜잭션 로그 백업을 가져옵니다.
너무 빠르게 중지 이 오류는 트랜잭션 로그 파일의 첫 번째 로그가 StopAt 타임스탬프 이후임을 나타냅니다. 예를 들어 트랜잭션 로그 파일의 첫 번째 로그가 2023-09-01T12:00:00이고 StopAt 필드 값이 2023-09-01T11:00:00이면 Cloud SQL에서 이 오류를 반환합니다.
올바른 StopAt 타임스탬프와 올바른 트랜잭션 로그 파일을 사용하고 있는지 확인합니다.

내보내기 작업 문제 해결

문제 문제 해결
HTTP Error 409: Operation failed because another operation was already in progress. 인스턴스에 대기 중인 작업이 이미 있습니다. 한 번에 하나의 작업만 허용됩니다. 현재 작업이 완료된 후 요청을 시도하세요.
HTTP Error 403: The service account does not have the required permissions for the bucket. 버킷이 있고 내보내기를 수행하는 Cloud SQL 인스턴스의 서비스 계정에 버킷으로 내보낼 수 있는 Storage Object Creator 역할(roles/storage.objectCreator)이 있는지 확인합니다. Cloud Storage에 대한 IAM 역할을 참조하세요.
내보내기를 자동화하려고 합니다. Cloud SQL은 내보내기를 자동화하는 방법을 제공하지 않습니다.

백업 자동화에 대한 이 문서와 마찬가지로 Cloud Scheduler, Pub/Sub, Cloud Functions와 같은 Google Cloud 제품을 사용하여 자체 자동 내보내기 시스템을 빌드할 수 있습니다.

다음 단계