가져오기 및 내보내기 권장사항
다음은 데이터를 가져오고 내보낼 때 고려해야 할 권장사항입니다.
- Cloud Storage 요청자 지불 버킷 사용 금지
- 데이터를 압축하여 비용 절감
- 장기 실행 가져오기 및 내보내기 프로세스 줄이기
- bcp 유틸리티를 사용하여 데이터 가져오기 및 내보내기
- 데이터 가져오기에 일괄 삽입 사용
- SqlPackage를 사용하여 데이터 가져오기 및 내보내기
- 스트라이핑된 가져오기 및 내보내기 사용
- 가져온 데이터베이스 확인
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
은 데이터베이스 대신 작업 대상으로 사용할 대상 파일(.dacpac 파일)입니다. 이 매개변수를 사용하면 다른 대상 매개변수는 유효하지 않습니다. 이 매개변수는 데이터베이스 타겟만 지원하는 작업에는 유효하지 않습니다.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 서버용 Cloud SQL 데이터베이스로 데이터를 가져올 수 있습니다.
이 섹션에서는 다음을 설명합니다.
필수 역할 및 권한
일괄 삽입을 구성하려면 다음이 필요합니다.
- 데이터를 가져올 데이터베이스에 대한
CONTROL
권한 다음 권한이 있는 IAM 계정에 매핑된 HMAC 액세스 키 및 보안 비밀:
storage.buckets.get
- 오류 로그 및 잘못된 데이터의 예시를 작성하기 위한
storage.objects.create
및storage.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 키를 만들고 일괄 삽입에 사용할 버킷에 서비스 계정 권한을 부여하는 것이 좋습니다. 자세한 내용과 보안 고려사항은 일괄 삽입 사용 시 고려사항을 참조하세요.
3. 가져올 샘플 데이터 만들기
텍스트 편집기를 사용하여 다음 샘플 데이터가 포함된 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
다음 샘플 데이터를 사용하여 형식 파일을 만듭니다. 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. 저장 프로시저 실행
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 );
데이터베이스 마스터 키, 데이터베이스 범위 사용자 인증 정보, 외부 데이터 소스를 만듭니다. 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 );
일괄 삽입 저장 프로시저를 실행하여 샘플 데이터를 가져옵니다.
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 Run 함수와 같은 Google Cloud 제품을 사용하여 자체 자동 내보내기 시스템을 빌드할 수 있습니다. |
다음 단계
- BAK 파일을 사용하여 데이터 가져오기 및 내보내기 방법 알아보기
- SQL 덤프 파일을 사용하여 데이터를 가져오는 방법 알아보기
- 자동 백업을 사용 설정하는 방법 알아보기
- 백업에서 복원하는 방법 알아보기