Compute Engine에서 Microsoft SQL Server 데이터베이스 클론


이 가이드에서는 Compute Engine에서 실행되는 Microsoft SQL Server 데이터베이스를 클론하는 두 가지 방법을 보여줍니다. 한 가지 방법은 영구 디스크 스냅샷을 사용하는 것이고, 다른 방법은 네이티브 SQL Server 백업 및 복원을 사용하여 Cloud Storage를 통해 백업을 전송하는 것입니다. Cloud Storage는 Google Cloud의 객체 스토리지 서비스로, 간편하고 보안이 강화된 내구성과 가용성이 높은 파일 저장 방식을 제공합니다.

클론은 온라인 데이터베이스를 다른 서버로 복사하는 프로세스입니다. 복사는 기존 데이터베이스와 별개이며 특정 시점의 스냅샷으로 보존됩니다. 프로덕션 서버에 부하를 주거나 프로덕션 데이터의 무결성을 손상하지 않고 클론된 데이터베이스를 다양한 목적으로 사용할 수 있습니다. 이러한 목적 중 일부는 다음과 같습니다.

  • 분석 쿼리 수행
  • 앱 부하 테스트 또는 통합 테스트
  • 데이터 웨어하우스를 채우기 위한 데이터 추출
  • 데이터에 대한 실험 실행

이 가이드에 설명된 각 클론 방식에는 장단점이 있습니다. 가장 적합한 방식은 사용자의 상황에 따라 다릅니다. 다음 표에서는 몇 가지 주요 문제를 보여줍니다.

문제 방식 1: 디스크 스냅샷 방식 2: Cloud Storage를 사용한 백업 및 복원
SQL Server 인스턴스에 필요한 추가 디스크 공간 추가 디스크 공간 필요 없음 생성 및 복원 시 백업 파일 저장에 필요한 추가 공간
클론 시 소스 SQL Server 인스턴스에 추가 부하 추가 부하 없음 백업 파일 생성 및 업로드 시 CPU 및 I/O에 추가 부하
클론 기간 대규모 데이터베이스의 경우 비교적 빠름 대규모 데이터베이스의 경우 비교적 느림
Google Cloud 외부의 SQL Server 인스턴스에서 클론 가능 아니요
복잡성 클론된 디스크를 연결하기 위한 복잡한 명령어 시퀀스 비교적 간단한 클론 명령어 집합
기존 백업 시스템 활용 가능 예, 백업 시스템이 Google Cloud 디스크 스냅샷을 사용하는 경우 예, 백업 시스템이 Cloud Storage에 네이티브 SQL Server 백업 파일을 작성하는 경우
클론의 세부사항 전체 디스크만 클론 가능 지정된 데이터베이스만 클론 가능
데이터 일관성 스냅샷 시점에서 일관적 백업 시점에서 일관적

이 가이드에서는 사용자가 Microsoft SQL Server Management Studio를 사용하는 Microsoft Windows 시스템 관리, PowerShell, Microsoft SQL Server 관리에 익숙하다고 가정합니다.

목표

  • Google Cloud에서 SQL Server 인스턴스를 실행하는 방법을 알아봅니다.
  • 보조 디스크에 데모 데이터베이스를 만드는 방법을 알아봅니다.
  • Compute Engine 디스크 스냅샷을 사용하여 SQL Server 데이터베이스를 클론하는 방법을 알아봅니다.
  • Cloud Storage를 통해 백업을 전송하여 SQL Server 데이터베이스를 클론하는 방법을 알아봅니다.

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  6. Compute Engine API를 사용 설정합니다.
  7. API 사용 설정

다음 추가적인 기본 요건을 충족하는지 확인하세요.

  • Google Chrome 브라우저를 사용합니다.
  • 선택한 원격 데스크톱 프로토콜(RDP) 클라이언트를 설치합니다. 자세한 내용은 Microsoft 원격 데스크톱 클라이언트를 참조하세요. 이미 RDP 클라이언트가 설치되어 있으면 이 태스크를 건너뛰어도 됩니다.

환경 설정

이 가이드를 완료하려면 다음을 사용하여 컴퓨팅 환경을 설정해야 합니다.

  • 프로덕션 데이터베이스 서버를 나타내는 Compute Engine의 SQL Server 인스턴스(sql-server-prod)
  • 프로덕션 데이터베이스를 저장하기 위해 프로덕션 서버에 연결된 추가 디스크(sql-server-prod-data)
  • 클론하려는 프로덕션 데이터베이스를 시뮬레이션하기 위한 Wide World Importers SQL Server 샘플 데이터베이스의 사본
  • 테스트 데이터베이스 서버를 나타내는 Compute Engine의 SQL Server 인스턴스(sql-server-test) 이 서버에 데이터베이스를 클론합니다.

이 아키텍처를 다이어그램으로 나타내면 다음과 같습니다.

이 가이드의 SQL Server 데이터베이스를 클론하기 위한 설정을 보여주는 다이어그램

프로덕션 VM 인스턴스 만들기

프로덕션 환경을 시뮬레이션하려면 Windows Server에서 SQL Server를 실행하는 Compute Engine VM 인스턴스를 설정합니다.

이 가이드의 VM 인스턴스는 두 개의 디스크, 즉 OS 및 사용자 계정용 50GB 디스크와 데이터베이스 스토리지용 100GB 디스크를 사용합니다.

Compute Engine에서 별도의 디스크를 사용해도 성능 이점이 없습니다. 디스크 성능은 인스턴스에 연결된 모든 디스크의 총 스토리지 용량과 VM 인스턴스의 총 vCPU 수에 따라 결정됩니다. 따라서 데이터베이스와 로그 파일은 동일한 디스크에 있을 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 만들기를 클릭합니다.

  3. 이름 필드에 sql-server-prod를 입력합니다.

  4. 리전으로 us-east1을 선택합니다.

  5. 영역으로 us-east1-b를 선택합니다.

  6. 머신 구성에서 머신 유형n1-standard-2(2 vCPU)로 변경합니다.

  7. 부팅 디스크 설명 옆에 있는 변경을 클릭합니다.

  8. 부팅 디스크 패널에서 공개 이미지 탭을 클릭합니다.

  9. 운영체제 드롭다운 목록에서 SQL Server on Windows Server를 선택합니다.

  10. 버전 드롭다운 목록에서 SQL Server 2022 Standard on Windows Server 2022 Datacenter를 선택합니다.

  11. 다음 값이 설정되었는지 확인합니다.

    • 부팅 디스크 유형표준 영구 디스크로 설정되었습니다.
    • 크기(GB)50으로 설정되었습니다.
  12. 선택을 클릭합니다.

  13. ID 및 API 액세스에서 액세스 범위모든 Cloud API에 대한 전체 액세스 허용으로 설정합니다.

  14. 관리, 보안, 디스크, 네트워킹, 단독 테넌시를 펼칩니다.

  15. 디스크 탭을 클릭합니다.

  16. 새 디스크 추가 를 클릭합니다.

  17. 이름 필드에 sql-server-prod-data를 입력합니다.

  18. 크기(GB) 필드에 100을 입력합니다.

  19. 완료를 클릭합니다.

  20. 만들기를 클릭합니다.

Cloud Shell

  1. Cloud Shell을 엽니다.

    Cloud Shell 열기

  2. 다음 변수를 초기화합니다.

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    각 항목의 의미는 다음과 같습니다.

    • VPC_NAME: VPC 이름
    • SUBNET_NAME: 서브넷 이름
  3. 기본 프로젝트 ID를 설정합니다.

    gcloud config set project PROJECT_ID
    

    PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.

  4. 기본 리전을 설정합니다.

    gcloud config set compute/region REGION
    

    REGION을 배포하려는 리전의 ID로 바꿉니다.

  5. 기본 영역을 설정합니다.

    gcloud config set compute/zone ZONE
    

    ZONE을 배포하려는 영역의 ID로 바꿉니다.

  6. SQL Server 2022 Standard on Windows Server 2022 Datacenter의 앱 이미지를 사용하여 Compute Engine 인스턴스를 만듭니다.

    REGION=$(gcloud config get-value compute/region)
    ZONE=$(gcloud config get-value compute/zone)
    
    gcloud compute instances create sql-server-prod \
        --machine-type=n1-standard-2 \
        --scopes=cloud-platform \
        --image-family=sql-std-2022-win-2022 \
        --image-project=windows-sql-cloud \
        --boot-disk-size=50GB \
        --boot-disk-device-name=sql-server-prod \
        --create-disk="mode=rw,size=100,type=pd-standard,name=sql-server-prod-data,device-name=sql-server-prod-data" \
        --subnet=$SUBNET_NAME
    

    이 명령어는 인스턴스에 Google Cloud APIs에 대한 전체 액세스 권한을 부여하고, 100GB 보조 디스크를 만들고, 디스크를 인스턴스에 연결합니다. 이 가이드에서는 고성능이 필요하지 않기 때문에 디스크 성능 경고는 무시합니다.

VM 인스턴스에 연결

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. VM 인스턴스가 준비될 때까지 약 5분 정도 기다립니다.

    VM의 초기화 프로세스를 모니터링하려면 Cloud Shell에서 직렬 포트 출력을 확인합니다.

    gcloud compute instances tail-serial-port-output sql-server-prod
    

    다음 메시지가 표시되면 초기화가 완료된 것입니다.

    Instance setup finished. sql-server-prod is ready to use.
    

    직렬 포트 모니터링을 중지하려면 Control + C를 누릅니다.

  3. 인스턴스 이름 sql-server-prod를 클릭하여 VM 인스턴스 세부정보 페이지를 엽니다.

  4. 원격 액세스에서 Windows 비밀번호 설정을 클릭한 다음 설정을 클릭하여 원격 머신에 계정을 만듭니다.

    이 단계를 수행하면 비밀번호가 생성됩니다. 비밀번호를 기록하거나 안전한 임시 파일에 복사합니다.

  5. Google Cloud 콘솔의 Compute Engine 섹션에서 RDP 드롭다운을 클릭하고 RDP 파일 다운로드 옵션을 선택하여 인스턴스용 RDP 파일을 다운로드합니다.

    이 파일을 사용하여 RDP 클라이언트를 사용하는 인스턴스에 연결합니다. 자세한 내용은 Microsoft 원격 데스크톱 클라이언트를 참조하세요.

  6. 메시지가 표시되면 방금 생성한 비밀번호를 입력한 다음 확인을 클릭합니다.

  7. 서버 인증서를 수락하고 원격 Windows 인스턴스에 로그인하려면 계속을 클릭합니다.

  8. 네트워크의 다른 PC 및 기기에서 컴퓨터를 검색 가능하도록 할지 묻는 메시지가 표시되면 아니요를 클릭합니다.

추가 디스크 설정

프로덕션 인스턴스에 연결된 두 번째 디스크는 프로덕션 데이터베이스를 저장하는 데 사용됩니다. 이 디스크는 비어 있으므로 디스크를 파티션으로 나누고, 포맷하고, 마운트해야 합니다.

  1. sql-server-prod 인스턴스에 연결된 RDP 세션에서 Windows 작업 표시줄의 시작 버튼을 클릭하고 diskpart를 입력한 다음 diskpart를 클릭하여 DiskPart를 엽니다.
  2. 앱에서 변경하도록 허용하라는 메시지가 표시되면 를 클릭합니다.
  3. 인스턴스에 연결된 디스크 목록을 표시합니다.

    list disk
    

    출력은 다음과 같습니다.

    Disk ###  Status         Size     Free     Dyn  Gpt
    --------  -------------  -------  -------  ---  ---
    Disk 0    Online           50 GB      0 B
    Disk 1    Online          100 GB   100 GB
    

    디스크 1(100GB)은 데이터 디스크입니다.

  4. 데이터 디스크를 선택합니다.

    select disk 1
    
  5. 디스크를 초기화합니다.

    clean
    
  6. GUID 파티션 테이블을 만듭니다.

    convert gpt
    
  7. 전체 디스크를 사용하여 데이터 파티션을 만듭니다.

    create partition primary
    
  8. 사용 가능한 볼륨을 나열합니다.

    list volume
    

    출력은 다음과 같습니다.

    Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
    ----------  ---  -----------  -----  ----------  -------  ---------  --------
    Volume 0     C                NTFS   Partition     49 GB  Healthy    Boot
    Volume 1                      FAT32  Partition    100 MB  Healthy    System
    Volume 2                      RAW    Partition     99 GB  Healthy
    

    볼륨 2(99GB)는 데이터 디스크입니다.

  9. 볼륨을 선택합니다.

    select volume 2
    
  10. 파티션 형식을 NTFS 파일 시스템으로 지정하고 라벨을 data로 지정합니다.

    format quick fs=ntfs label=data
    
  11. 디스크를 D 드라이브로 마운트합니다.

    assign letter=d
    
  12. DiskPart를 종료합니다.

    exit
    

샘플 데이터베이스 다운로드

이 클론 연습을 위한 환경을 설정하려면 다음을 수행해야 합니다.

  • D 드라이브(data)에 데이터베이스를 저장할 디렉터리 구조를 만듭니다.
  • Wide World Importers SQL Server 샘플 데이터베이스 전체 백업 파일을 다운로드합니다. 이 데이터베이스는 클론하려는 프로덕션 데이터베이스를 시뮬레이션합니다.

디렉터리를 만들고 백업 파일을 다운로드하려면 다음 단계를 따르세요.

  1. RDP 세션에서 Windows 작업 표시줄의 시작 버튼을 클릭하고 PowerShell을 입력한 다음 Windows PowerShell 앱을 선택합니다.

  2. PowerShell 프롬프트에서 데이터베이스 스토리지에 대한 디렉터리 구조를 만듭니다.

    mkdir D:\sql-server-data\wideworldimporters
    
  3. 백업 파일을 D 드라이브로 다운로드합니다.

    bitsadmin /transfer sampledb /dynamic /download /priority FOREGROUND `
      https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak `
      D:\sql-server-data\WideWorldImporters-Full.bak
    

샘플 데이터베이스 복원

대화형으로 Microsoft SQL Server Management Studio(SSMS) 마법사를 사용하거나 직접 Transact-SQL 명령어를 실행하여 샘플 데이터베이스를 D 드라이브(data)로 복원해야 합니다.

SSMS 마법사

  1. RDP 세션에서 Windows 작업 표시줄의 시작 버튼을 클릭하고 ssms를 입력한 다음 Microsoft SQL Server Management Studio(관리자 권한으로 실행)를 선택합니다.
  2. 앱이 시작되면 연결을 클릭하여 Windows 인증을 통해 sql-server-prod 데이터베이스 엔진에 연결합니다.
  3. 객체 탐색기에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭한 다음 데이터베이스 복원을 선택합니다.
  4. 소스에서 기기를 선택한 다음 기기 이름 옆에 있는 [...] 버튼을 클릭합니다.
  5. 백업 기기 선택 대화상자에서 백업 미디어 유형파일이 선택되었는지 확인한 다음 추가를 클릭합니다.
  6. 파일 선택기에서 D:\sql-server-data로 이동하여 WideWorldImporters-Full.bak 파일을 클릭한 다음 확인을 클릭합니다.
  7. 확인을 클릭하여 백업 기기 선택 대화상자를 닫습니다.

    데이터베이스 복원 대화상자가 Wide World Importers 데이터베이스 백업에 대한 데이터로 채워집니다.

  8. 페이지 선택에서 파일을 클릭합니다.

  9. 모든 파일을 폴더로 재배치 체크박스를 선택합니다.

  10. 데이터 파일 폴더로그 파일 폴더 필드에 D:\sql-server-data\wideworldimporters를 입력합니다.

    데이터베이스 복원 대화상자를 보여주는 스크린샷

  11. 확인을 클릭하여 복원 작업을 시작합니다.

몇 분 후에 데이터베이스가 복원되었다는 알림이 전송됩니다.

Transact-SQL

  1. RDP 세션에서 Windows 작업 표시줄의 시작 버튼을 클릭하고 ssms를 입력한 다음 Microsoft SQL Server Management Studio(관리자 권한으로 실행)를 선택합니다.
  2. 앱이 시작되면 연결을 클릭하여 Windows 인증을 통해 sql-server-prod 데이터베이스 엔진에 연결합니다.
  3. 파일 > 새로 만들기 > 현재 연결로 쿼리를 선택하여 새 쿼리 창을 엽니다.
  4. 다운로드한 백업 파일에서 복원을 시작합니다.

    USE [master]
    GO
    
    RESTORE DATABASE [WideWorldImporters]
      FROM  DISK = N'D:\SQL-SERVER-DATA\WideWorldImporters-Full.bak'
      WITH  FILE = 1,
      MOVE N'WWI_Primary' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.mdf',
      MOVE N'WWI_UserData' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_UserData.ndf',
      MOVE N'WWI_Log' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.ldf',
      MOVE N'WWI_InMemory_Data_1' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_InMemory_Data_1',
      NOUNLOAD,
      STATS = 5
    GO
    

    이 명령어는 데이터베이스와 로그 파일을 D:\sql-server-data\wideworldimporters 디렉터리로 복원합니다.

  5. 쿼리 코드를 마우스 오른쪽 버튼으로 클릭하고 실행을 클릭합니다.

    데이터베이스 복원이 완료될 때까지 몇 분 정도 기다립니다. 객체 탐색기에서 새로고침 을 클릭하여 데이터베이스가 데이터베이스 트리에 나열되는지 확인할 수 있습니다. 데이터베이스 복원이 완료되면 저장하지 않고 쿼리 창을 닫을 수 있습니다.

쿼리를 실행하여 샘플 데이터베이스가 작동하는지 확인할 수 있습니다.

  1. Microsoft SQL Server Management Studio에서 파일 > 새로 만들기 > 현재 연결로 쿼리를 선택하여 새 쿼리 창을 열고 다음 코드를 복사합니다.

    SELECT top(100)
      i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName,
      i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy
    FROM
      WideWorldImporters.Sales.Invoices i
      JOIN WideWorldImporters.Sales.Customers c
      ON i.CustomerID=c.CustomerID
    WHERE i.ConfirmedDeliveryTime IS NOT NULL
    ORDER BY i.InvoiceDate desc;
    

    이 쿼리는 가장 최근에 전송된 100개의 인보이스에서 요약 정보를 검색합니다.

  2. 쿼리 창을 마우스 오른쪽 버튼으로 클릭하고 실행을 클릭합니다.

    결과 창에 요약 정보가 표시됩니다.

    쿼리에서 샘플 데이터베이스로 결과 창을 보여주는 스크린샷

테스트 VM 인스턴스 만들기

이 섹션에서는 클론된 데이터베이스의 대상으로 sql-server-test라는 이름의 SQL Server 인스턴스를 만듭니다. 이 인스턴스의 구성은 프로덕션 인스턴스와 동일합니다. 그러나 두 번째 데이터 디스크는 만들지 않는 대신 이 가이드의 뒷부분에서 데이터 디스크를 연결합니다.

콘솔

  1. VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 만들기를 클릭합니다.

  3. 이름 필드에 sql-server-test를 입력합니다.

  4. 리전으로 us-east1을 선택합니다.

  5. 영역으로 us-east1-b를 선택합니다.

  6. 머신 구성에서 머신 유형n1-standard-2(2 vCPU)로 변경합니다.

  7. 부팅 디스크 이미지 옆에 있는 변경을 클릭합니다.

  8. 부팅 디스크 패널에서 공개 이미지 탭을 클릭합니다.

  9. 운영체제 드롭다운 목록에서 SQL Server on Windows Server를 선택합니다.

  10. 버전 드롭다운 목록에서 SQL Server 2022 Standard on Windows Server 2022 Datacenter를 선택합니다.

  11. 다음 값이 설정되었는지 확인합니다.

    • 부팅 디스크 유형표준 영구 디스크로 설정되었습니다.
    • 크기(GB)50으로 설정되었습니다.
  12. 선택을 클릭합니다.

  13. ID 및 API 액세스에서 액세스 범위모든 Cloud API에 대한 전체 액세스 허용으로 설정합니다.

  14. 만들기를 클릭합니다.

Cloud Shell

  1. Cloud Shell을 엽니다.

    Cloud Shell 열기

  2. 테스트 SQL Server 인스턴스를 만듭니다.

    gcloud compute instances create sql-server-test \
        --machine-type=n1-standard-2 \
        --scopes=cloud-platform \
        --image-family=sql-std-2022-win-2022 \
        --image-project=windows-sql-cloud \
        --boot-disk-size=50GB \
        --boot-disk-device-name=sql-server-test \
        --subnet=$SUBNET_NAME
    

    이 가이드에서는 고성능이 필요하지 않기 때문에 디스크 성능 경고는 무시해도 됩니다.

VM 인스턴스에 연결

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. VM 인스턴스가 준비될 때까지 약 5분 정도 기다립니다.

    VM의 초기화 프로세스를 모니터링하려면 Cloud Shell에서 직렬 포트 출력을 확인합니다.

    gcloud compute instances tail-serial-port-output sql-server-prod
    

    다음 메시지가 표시되면 초기화가 완료된 것입니다.

    Instance setup finished. sql-server-test is ready to use.
    

    직렬 포트 모니터링을 중지하려면 Control + C를 누릅니다.

  3. 인스턴스 이름 sql-server-test를 클릭하여 VM 인스턴스 세부정보 페이지를 표시합니다.

  4. 원격 액세스에서 Windows 비밀번호 설정을 클릭한 다음 설정을 클릭하여 원격 머신에 계정을 만듭니다.

    이 단계를 수행하면 비밀번호가 생성됩니다. 비밀번호를 기록하거나 안전한 임시 파일에 복사합니다.

  5. Google Cloud 콘솔의 Compute Engine 섹션에서 RDP 드롭다운을 클릭하고 RDP 파일 다운로드 옵션을 선택하여 인스턴스용 RDP 파일을 다운로드합니다.

    이 파일을 사용하여 RDP 클라이언트를 사용하는 인스턴스에 연결합니다. 자세한 내용은 Microsoft 원격 데스크톱 클라이언트를 참조하세요.

  6. 메시지가 표시되면 방금 생성한 비밀번호를 입력한 다음 확인을 클릭합니다.

  7. 서버 인증서를 수락하고 원격 Windows 인스턴스에 로그인하려면 계속을 클릭합니다.

  8. PC를 검색 가능하도록 할 것인지 묻는 메시지가 표시되면 아니요를 클릭합니다.

Compute Engine 디스크 스냅샷을 사용하여 데이터베이스 클론

Compute Engine에서 실행되는 SQL Server 데이터베이스를 클론하는 한 가지 방법은 데이터베이스를 별도의 데이터 디스크에 저장하고 영구 디스크 스냅샷을 사용하여 해당 디스크의 클론을 만드는 것입니다.

영구 디스크 스냅샷을 사용하여 특정 시점의 디스크 데이터 사본을 얻을 수 있습니다. 디스크 스냅샷 예약은 데이터를 자동으로 백업하기 위한 한 가지 방법입니다.

튜토리얼의 이 섹션에서는 다음과 같은 작업을 수행하게 됩니다.

  • 프로덕션 서버의 데이터 디스크 스냅샷을 만듭니다.
  • 스냅샷에서 새 디스크를 만듭니다.
  • 새 디스크를 테스트 서버에 마운트합니다.
  • 이 디스크의 데이터베이스를 테스트 인스턴스의 SQL Server에 연결합니다.

다음 다이어그램은 디스크 스냅샷을 사용하여 데이터베이스를 클론하는 방법을 보여줍니다.

디스크 스냅샷을 사용하여 SQL Server 데이터베이스를 클론하기 위한 설정을 보여주는 다이어그램

디스크 스냅샷 만들기

콘솔

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. sql-server-prod 인스턴스의 이름을 클릭합니다.

  3. VM 인스턴스 세부정보 페이지에서 디스크 sql-server-prod-data를 클릭합니다.

  4. 스냅샷 만들기를 클릭합니다.

  5. 스냅샷 이름을 sql-server-prod-data-snapshot으로 지정합니다.

  6. 위치리전을 선택합니다.

  7. 리전이 us-east1(VM 인스턴스와 동일)으로 설정되었는지 확인합니다.

  8. VSS 사용 설정 옵션을 선택합니다.

    이 옵션은 Microsoft Windows의 Volume Shadow Copy Service를 사용하여 일관된 스냅샷을 만듭니다.

  9. 만들기를 클릭합니다.

    몇 분 후에 스냅샷이 생성됩니다.

Cloud Shell

  1. Cloud Shell을 엽니다.

    Cloud Shell 열기

  2. VM 인스턴스와 동일한 영역에 데이터 디스크의 스냅샷을 만듭니다.

    gcloud compute disks snapshot sql-server-prod-data \
         --snapshot-names=sql-server-prod-data-snapshot \
         --guest-flush \
         --zone="${ZONE}"
    

    --guest-flush 옵션은 Microsoft Windows의 Volume Shadow Copy Service를 사용하여 일관된 스냅샷을 만듭니다. 몇 분 후에 스냅샷이 생성됩니다.

디스크 스냅샷을 테스트 인스턴스에 연결

생성한 스냅샷에서 새 데이터 디스크를 만든 다음 sql-server-test 인스턴스에 연결해야 합니다.

콘솔

다음 단계에서는 새 영구 디스크를 만들고 프로덕션 디스크의 콘텐츠 스냅샷을 사용한 다음 디스크를 테스트 인스턴스에 연결합니다.

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 인스턴스 이름 sql-server-test를 클릭합니다.

  3. VM 인스턴스 세부정보 페이지에서 수정을 클릭합니다.

  4. 새 디스크 추가 를 클릭합니다.

  5. 새 디스크의 이름을 sql-server-test-data로 지정합니다.

  6. 소스 유형으로 스냅샷을 선택합니다.

  7. 생성한 sql-server-prod-data-snapshot 인스턴스에 소스 스냅샷을 선택합니다.

  8. 모드읽기/쓰기로 설정되어 있는지 확인합니다.

  9. 완료를 클릭합니다.

Cloud Shell

  1. Cloud Shell을 엽니다.

    Cloud Shell 열기

  2. 프로덕션 디스크의 콘텐츠 스냅샷을 사용하여 새 영구 디스크를 만듭니다.

    gcloud beta compute disks create sql-server-test-data \
         --size=100GB \
         --source-snapshot=sql-server-prod-data-snapshot \
         --zone="${ZONE}"
    
  3. 새 디스크를 읽기-쓰기 권한이 있는 sql-server-test 인스턴스에 연결합니다.

    gcloud compute instances attach-disk sql-server-test \
        --disk=sql-server-test-data --mode=rw
    

Windows에서 새 데이터 디스크 마운트

만든 디스크가 VM 인스턴스에 연결되지만 오프라인 상태이며 볼륨이 읽기 전용으로 설정됩니다. 볼륨을 읽기-쓰기 및 마운트 가능으로 구성하려면 다음 단계를 수행합니다.

  1. sql-server-test 인스턴스에 연결된 RDP 클라이언트 창에서 Windows 작업 표시줄의 시작 버튼을 클릭하여 diskpart를 입력한 다음 diskpart를 클릭하여 DiskPart를 엽니다.
  2. 앱에서 변경하도록 허용하라는 메시지가 표시되면 를 클릭합니다.
  3. 인스턴스에 연결된 디스크 목록을 표시합니다.

    list disk
    

    출력은 다음과 같습니다.

    
    Disk ###  Status         Size     Free     Dyn  Gpt
    --------  -------------  -------  -------  ---  ---
    Disk 0    Online           50 GB      0 B
    Disk 1    Offline         100 GB      0 B       *
     

    데이터 디스크(디스크 1, 100GB)가 오프라인 상태입니다.

  4. 데이터 디스크를 선택합니다.

    select disk 1
    
  5. 디스크를 온라인으로 전환합니다.

    online disk
    
  6. 사용 가능한 볼륨을 나열합니다.

    list volume
    

    출력은 다음과 같습니다.

    Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
    ----------  ---  -----------  -----  ----------  -------  ---------  --------
    Volume 0     C                NTFS   Partition     49 GB  Healthy    Boot
    Volume 1                      FAT32  Partition    100 MB  Healthy    System
    Volume 2                      RAW    Partition     99 GB  Healthy
    

    볼륨 2(99GB)는 데이터 볼륨입니다. 드라이브 문자가 할당되지 않은 상태에서 숨김으로 표시됩니다.

  7. 볼륨을 선택합니다.

    select volume 2
    
  8. 스냅샷에서 볼륨을 만들 때 설정한 속성을 삭제합니다.

    attr volume clear readonly hidden nodefaultdriveletter shadowcopy
    

    이 명령어는 볼륨을 마운트할 수 있도록 설정합니다.

  9. 볼륨을 D 드라이브로 마운트합니다.

    assign letter=d
    
  10. DiskPart를 종료합니다.

    exit
    

파일 소유권 및 권한 재설정

sql-server-prod 인스턴스에서 스냅샷을 만들어 데이터 디스크를 만들었기 때문에 파일 소유권 및 권한의 사용자 ID는 sql-server-test 인스턴스의 사용자 ID와 다릅니다. 파일의 소유권을 sql-server-test 인스턴스의 사용자로 변경하고 로컬 사용자와 MSSQLSERVER 사용자가 파일을 읽을 수 있도록 권한을 업데이트해야 합니다.

  1. sql-server-test 인스턴스에 연결된 RDP 클라이언트 창에서 Windows 작업 표시줄의 시작 버튼을 클릭한 다음 cmd를 입력합니다.
  2. 관리자 권한으로 명령 프롬프트 앱을 엽니다.
  3. sql-server-data 폴더에 있는 파일의 소유자를 MSSQLSERVER 서비스 사용자로 설정합니다.

    icacls d:\sql-server-data /setowner "nt service\mssqlserver" /t
    
  4. 최상위 sql-server-data 폴더의 모든 파일에 대한 모든 권한을 재설정합니다.

    icacls d:\sql-server-data /reset /t
    
  5. sql-server-data 폴더의 액세스 제어 목록(ACL)을 업데이트합니다.

    icacls d:\sql-server-data /grant Administrators:(oi)(ci)f "nt service\mssqlserver":(oi)(ci)f "owner rights":(oi)(ci)f  %USERNAME%:(oi)(ci)f
    
  6. 앞의 권한만 적용되도록 드라이브의 루트 폴더에서 상속을 사용 중지합니다.

    icacls d:\sql-server-data /inheritancelevel:r
    
  7. 명령 프롬프트 앱을 종료합니다.

    exit
    

이제 SQL Server 인스턴스와 sql-server-test 인스턴스의 로컬 사용자가 데이터베이스 파일에 액세스할 수 있습니다.

클론된 데이터베이스 연결

이제 D 드라이브(data)에 클론된 데이터베이스를 테스트 SQL Server 인스턴스에 연결합니다. Microsoft SQL Server Management Studio 마법사를 사용하여 대화형으로 데이터베이스를 연결하거나 Transact-SQL 명령어를 직접 실행하여 데이터베이스를 연결할 수 있습니다.

SSMS 마법사

  1. sql-server-test 인스턴스에 연결된 RDP 세션에서 Windows 작업 표시줄의 시작 버튼을 클릭하고 ssms를 입력한 다음 Microsoft SQL Server Management Studio(관리자 권한으로 실행)를 선택합니다.
  2. 연결을 클릭하여 Windows 인증을 사용하여 sql-server-test 데이터베이스 엔진에 연결합니다.
  3. 객체 탐색기에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭한 다음 연결을 선택합니다.
  4. 데이터베이스 연결 마법사에서 추가를 클릭합니다.
  5. D:\sql-server-data\wideworldimporters 디렉터리로 이동하여 WideWorldImporters.mdf 파일을 클릭한 다음 확인을 클릭합니다.
  6. 확인을 클릭하여 데이터베이스를 연결합니다.

    잠시 후 클론된 데이터베이스가 연결됩니다. 객체 탐색기에서 새로고침 을 클릭하여 데이터베이스가 데이터베이스 트리에 나열되는지 확인할 수 있습니다.

Transact-SQL

  1. sql-server-test 인스턴스에 연결된 RDP 세션에서 Windows 작업 표시줄의 시작 버튼을 클릭하고 ssms를 입력한 다음 Microsoft SQL Server Management Studio(관리자 권한으로 실행)를 선택합니다.
  2. 연결을 클릭하여 Windows 인증을 사용하여 sql-server-prod 데이터베이스 엔진에 연결합니다.
  3. 파일 > 새로 만들기 > 현재 연결로 쿼리를 선택하여 새 쿼리 창을 엽니다.
  4. D:\sql-server-data\wideworldimporters 디렉터리의 데이터와 로그 파일을 연결합니다.

    USE [master]
    GO
    
    CREATE DATABASE [WideWorldImporters] ON
    ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters.mdf' ),
    ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters.ldf' ),
    ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters_UserData.ndf' )
     FOR ATTACH
    GO
    
  5. 쿼리 코드를 마우스 오른쪽 버튼으로 클릭하고 실행을 클릭합니다.

    잠시 후 클론된 데이터베이스가 연결됩니다. 객체 탐색기에서 새로고침 을 클릭하여 데이터베이스가 데이터베이스 트리에 나열되는지 확인할 수 있습니다. 데이터베이스가 연결되면 저장하지 않고 쿼리 창을 닫을 수 있습니다.

샘플 데이터베이스가 작동하는지 확인하려면 쿼리를 실행하면 됩니다.

  1. SQL Server Management Studio에서 파일 > 새로 만들기 > 현재 연결로 쿼리를 선택하여 새 쿼리 창을 열고 다음 코드를 복사합니다.

    SELECT top(100)
      i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName,
      i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy
    FROM
      WideWorldImporters.Sales.Invoices i
      JOIN WideWorldImporters.Sales.Customers c
      ON i.CustomerID=c.CustomerID
    WHERE i.ConfirmedDeliveryTime IS NOT NULL
    ORDER BY i.InvoiceDate desc;
    

    이 쿼리는 가장 최근에 전송된 100개의 인보이스에서 요약 정보를 검색합니다.

  2. 쿼리를 실행하려면 쿼리 창을 마우스 오른쪽 버튼으로 클릭한 다음 실행을 선택합니다.

    결과 창에 요약 정보가 표시됩니다.

    쿼리에서 샘플 데이터베이스로 결과 창을 보여주는 스크린샷

이제 영구 디스크 스냅샷을 사용하여 데이터베이스를 클론하는 방법을 알아보았으므로 백업 및 복원을 사용하여 데이터베이스를 클론할 수 있습니다. 이 두 번째 접근 방식에 대한 가이드를 완료하려면 sql-server-test 인스턴스에서 클론한 데이터베이스를 삭제해야 합니다.

클론된 데이터베이스 삭제

디스크 스냅샷을 사용하여 만든 클론된 데이터베이스를 삭제하려면 다음 단계를 수행하세요.

SSMS 마법사

  1. sql-server-test 인스턴스에 연결된 RDP 세션에서 Microsoft SQL Server Management Studio를 열고 sql-server-test 데이터베이스 엔진에 연결합니다.
  2. 객체 탐색기에서 데이터베이스를 펼치고 WorldWideImporters 데이터베이스를 마우스 오른쪽 버튼으로 클릭한 다음 삭제를 선택합니다.
  3. 객체 삭제 마법사에서 기존 연결 닫기 체크박스가 선택되어 있는지 확인합니다.
  4. 확인을 클릭합니다.

Transact-SQL

  1. sql-server-test 인스턴스에 연결된 RDP 세션에서 Microsoft SQL Server Management Studio를 열고 sql-server-test 데이터베이스 엔진에 연결합니다.
  2. WideWorldImporters 데이터베이스로의 모든 연결을 닫고 데이터베이스를 삭제하려면 다음 스크립트를 새 쿼리 창에 복사하고 코드를 마우스 오른쪽 버튼으로 클릭한 다음 실행을 클릭합니다.

    USE [master]
    GO
    ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    DROP DATABASE [WideWorldImporters]
    GO
    

    데이터베이스가 삭제되면 저장하지 않고 쿼리 창을 닫을 수 있습니다. 객체 탐색기에서 새로고침을 클릭하여 데이터베이스가 삭제되었는지 확인할 수 있습니다.

백업 및 복원을 사용한 클론

Compute Engine에서 실행되는 SQL Server 데이터베이스를 클론하는 두 번째 방법은 네이티브 SQL Server 백업 및 복원을 사용하는 것입니다. 이 접근 방식에서는 Cloud Storage를 사용하여 백업을 전송합니다.

이 가이드 섹션에서는 이 가이드의 데이터베이스 클론 섹션에서 Compute Engine 디스크 스냅샷을 사용하여 만든 리소스를 사용합니다. 해당 섹션을 완료하지 않은 경우 계속하기 전에 해당 리소스를 만들어야 합니다.

튜토리얼의 이 섹션에서는 다음과 같은 작업을 수행하게 됩니다.

  • Cloud Storage 버킷을 만듭니다.
  • 프로덕션 서버의 데이터베이스를 백업합니다.
  • 백업 파일을 프로덕션 서버에서 Cloud Storage로 복사합니다.
  • 백업 파일을 Cloud Storage에서 테스트 서버로 복사합니다.
  • 테스트 인스턴스에서 백업을 복원합니다.

다음 다이어그램은 Cloud Storage를 사용하여 백업을 전송하여 데이터베이스를 클론하는 방법을 보여줍니다.

Cloud Storage를 사용하여 SQL Server 데이터베이스를 클론하기 위한 설정을 보여주는 다이어그램

Google Cloud 외부 시스템에 Cloud Storage에 대한 액세스 권한을 부여할 수 있으므로 이 접근 방식을 통해 외부 SQL Server 인스턴스에서 데이터베이스를 클론할 수 있습니다.

Cloud Storage 버킷 생성

백업 파일을 sql-server-prod 인스턴스에서 sql-server-test 인스턴스로 전송 시 백업 파일을 저장하는 Cloud Storage 버킷을 만들어야 합니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Storage 브라우저 페이지로 이동합니다.

    Cloud Storage 브라우저 페이지로 이동

  2. 버킷 만들기를 클릭합니다.

  3. 버킷 이름을 project-name 버킷으로 설정합니다.

    다음을 바꿉니다.

    • project-name: Google Cloud 프로젝트의 ID입니다.
  4. 기본 스토리지 클래스 선택을 펼친 다음 리전을 선택합니다.

  5. 위치us-east1을 선택합니다.

  6. 만들기를 클릭합니다.

Cloud Shell

  1. Cloud Shell을 엽니다.

    Cloud Shell 열기

  2. VM 인스턴스와 동일한 리전에 Cloud Storage 버킷을 만듭니다.

    gsutil mb -l "${REGION}" "gs://$(gcloud config get-value project)-bucket"
    

데이터베이스의 전체 특정 시점 백업 만들기

사용자의 프로덕션 환경에서는 이미 백업을 만들 수 있습니다. 이 백업을 기반으로 데이터베이스를 클론할 수 있습니다. 이 가이드에서는 복사 전용 백업을 만들어 기존의 전체 또는 증분 백업 일정에 영향을 주지 않도록 합니다.

SSMS 마법사

  1. sql-server-prod 인스턴스에 연결된 RDP 세션에서 Microsoft SQL Server Management Studio를 열고 sql-server-prod 데이터베이스 엔진에 연결합니다.
  2. 객체 탐색기에서 데이터베이스를 확장하고 WorldWideImporters 데이터베이스를 마우스 오른쪽 단추로 클릭한 다음 작업 > 백업을 선택합니다.
  3. 데이터베이스 백업 마법사에서 다음 값이 설정되어 있는지 확인합니다.
    • 백업 유형전체로 설정되어 있습니다.
    • 복사 전용 백업이 선택되어 있습니다.
    • 백업 대상디스크로 설정되어 있습니다.
  4. 백업 파일을 추가하려면 추가를 클릭합니다.
  5. 대상 위치 필드에 D:\sql-server-data\WideWorldImporters-copy.bak를 입력합니다.

    데이터베이스 백업 대화상자를 보여주는 스크린샷

  6. 미디어 옵션 페이지를 선택하고 모든 기존 백업 세트 덮어쓰기를 선택합니다.

  7. 백업 옵션 페이지를 선택한 다음 백업 압축 설정백업 압축으로 변경합니다.

  8. 백업을 만들려면 확인을 클릭합니다.

    백업을 만드는 데 몇 분 정도 걸립니다.

Transact-SQL

  1. sql-server-prod 인스턴스에 연결된 RDP 세션에서 Microsoft SQL Server Management Studio를 열고 sql-server-prod 데이터베이스 엔진에 연결합니다.
  2. WideWorldImporters 데이터베이스 d:\sql-server-data\WideWorldImporters-copy.bak 파일로 복사 전용 압축 백업을 수행하려면 다음 스크립트를 새 쿼리 창에 복사하고 코드를 마우스 오른쪽 버튼으로 클릭한 다음 실행을 클릭합니다.

    BACKUP DATABASE [WideWorldImporters]
       TO  DISK = N'd:\sql-server-data\WideWorldImporters-copy.bak'
       WITH  COPY_ONLY, NOFORMAT, INIT,
       NAME = N'WideWorldImporters-Full Database Backup',
       SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10
    GO
    

    서버가 백업을 만들 때까지 몇 분 정도 기다립니다. 데이터베이스 백업이 완료되면 저장하지 않고 쿼리 창을 닫을 수 있습니다.

Cloud Storage에 백업 파일 복사

  1. sql-server-prod 인스턴스에 연결된 RDP 세션에서 Windows PowerShell 창을 엽니다.
  2. 백업 파일을 앞서 만든 Cloud Storage 버킷에 복사합니다.

    gsutil cp -n d:\sql-server-data\WideWorldImporters-copy.bak "gs://$(gcloud config get-value project)-bucket/"
    
  3. PowerShell을 종료합니다.

    exit
    

Cloud Storage에서 sql-server-test로 백업 파일 복사

  1. sql-server-test 인스턴스에 연결된 RDP 세션에서 Windows PowerShell 창을 엽니다.
  2. 백업 파일을 앞서 만든 Cloud Storage 버킷에 복사합니다.

    gsutil cp "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" d:\sql-server-data\
    
  3. PowerShell을 종료합니다.

    exit
    

데이터베이스의 전체 사본 백업이 테스트 인스턴스의 로컬 디스크에 있습니다.

백업 복원

이제 전체 사본 백업을 sql-server-test 인스턴스의 D 드라이브(data)에 복원할 수 있습니다.

SSMS 마법사

  1. sql-server-test 인스턴스에 연결된 RDP 세션에서 Microsoft SQL Server Management Studio를 열고 sql-server-test 데이터베이스 엔진에 연결합니다.
  2. 객체 탐색기에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭한 다음 데이터베이스 복원을 선택합니다.
  3. 소스에서 기기를 선택한 다음 기기 이름 옆의 [...] 버튼을 클릭합니다.
  4. 백업 기기 선택 대화상자의 백업 미디어 유형 목록에서 파일을 선택한 다음 추가를 클릭합니다.
  5. 파일 선택기에서 D:\sql-server-data로 이동하여 WideWorldImporters-copy.bak 파일을 클릭한 다음 확인을 클릭합니다.
  6. 확인을 클릭하여 백업 기기 선택 대화상자를 닫습니다.

    데이터베이스 복원 대화상자에 WideWorldImporters 데이터베이스 백업에 대한 데이터가 입력됩니다.

  7. 페이지 선택에서 파일을 클릭합니다.

  8. 모든 파일을 폴더로 이동을 선택합니다.

  9. 데이터 파일 폴더로그 파일 폴더 필드에 D:\sql-server-data\wideworldimporters를 입력합니다.

    데이터베이스 복원 대화상자를 보여주는 스크린샷

  10. 복원 작업을 시작하려면 확인을 클릭합니다.

    프로세스가 완료되면 Database 'WideWorldImporters' restored successfully 메시지가 표시됩니다.

Transact-SQL

  1. sql-server-test 인스턴스에 연결된 RDP 세션에서 Microsoft SQL Server Management Studio를 열고 sql-server-test 데이터베이스 엔진에 연결합니다.
  2. 파일 > 새로 만들기 > 현재 연결로 쿼리를 선택하여 새 쿼리 창을 엽니다.
  3. Cloud Storage에서 복사한 백업 파일에서 백업을 시작하려면 다음 T-SQL 명령어를 복사하여 데이터베이스 및 로그 파일을 D:\sql-server-data\wideworldimporters 디렉터리로 복원합니다.

    USE [master]
    GO
    
    RESTORE DATABASE [WideWorldImporters]
      FROM  DISK = N'D:\SQL-SERVER-DATA\WideWorldImporters-copy.bak'
      WITH  FILE = 1,
      MOVE N'WWI_Primary' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.mdf',
      MOVE N'WWI_UserData' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_UserData.ndf',
      MOVE N'WWI_Log' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.ldf',
      MOVE N'WWI_InMemory_Data_1' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_InMemory_Data_1',
      NOUNLOAD,
      STATS = 5
    GO
    
  4. 코드를 마우스 오른쪽 버튼으로 클릭하고 실행을 클릭합니다.

    몇 분 후 데이터베이스 복원이 완료됩니다. 객체 탐색기에서 새로고침 을 클릭하여 데이터베이스가 데이터베이스 트리에 나열되는지 확인할 수 있습니다. 데이터베이스 복원이 완료되면 저장하지 않고 쿼리 창을 닫을 수 있습니다.

데이터베이스가 작동하는지 확인하려면 쿼리를 실행하면 됩니다.

  1. Microsoft SQL Management Studio에서 파일 > 새로 만들기 > 현재 연결로 쿼리를 선택하여 새 쿼리 창을 열고 다음 코드를 복사합니다.

    SELECT top(100)
      i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName,
      i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy
    FROM
      WideWorldImporters.Sales.Invoices i
      JOIN WideWorldImporters.Sales.Customers c
      ON i.CustomerID=c.CustomerID
    WHERE i.ConfirmedDeliveryTime IS NOT NULL
    ORDER BY i.InvoiceDate desc;
    

    이 쿼리는 가장 최근에 전송된 100개의 인보이스에서 요약 정보를 검색합니다.

  2. 쿼리 창을 마우스 오른쪽 버튼으로 클릭하고 실행을 클릭합니다.

    결과 창에 요약 정보가 표시됩니다.

    쿼리에서 샘플 데이터베이스로 결과 창을 보여주는 스크린샷

Cloud SQL을 클론 대상으로 사용

대상 데이터베이스가 Cloud SQL에서 호스팅되고 원본 데이터베이스가 Compute Engine에 있는 경우 지원되는 클론 메커니즘은 데이터베이스를 Cloud Storage로 백업한 후 Cloud SQL로 복원하는 것입니다.

이 튜토리얼에서는 이전 섹션에서 만든 백업을 재사용합니다.

SQL Server용 Cloud SQL 인스턴스를 만듭니다.

  1. Cloud Shell을 엽니다.

    Cloud Shell 열기

  2. sql-server-prod 인스턴스와 동일한 데이터베이스 버전을 실행하는 SQL Server 인스턴스에 대해 Cloud SQL을 만듭니다.

    gcloud sql instances create sqlserver-cloudsql  \
      --database-version=SQLSERVER_2022_STANDARD \
      --cpu=2 \
      --memory=5GB \
      --root-password=sqlserver12@ \
      --region=${REGION}
    

    그러면 sqlserver12@의 비밀번호를 사용하여 sqlserver의 루트 사용자로 인스턴스가 생성됩니다.

객체 권한 업데이트

Cloud SQL 서비스 계정에서 읽을 수 있도록 Cloud Storage 버킷과 백업 객체 모두에 올바른 권한을 설정해야 합니다. 이러한 권한은 Google Cloud 콘솔을 사용하여 객체를 가져올 때 자동으로 설정되거나 gcloud 명령어를 사용하여 이를 설정할 수 있습니다.

  1. Cloud Shell을 엽니다.

    Cloud Shell 열기

  2. Cloud SQL 인스턴스의 서비스 계정 주소가 포함된 환경 변수를 설정합니다.

    CLOUDSQL_SA="$(gcloud sql instances describe sqlserver-cloudsql --format='get(serviceAccountEmailAddress)')"
    
  3. 서비스 계정을 버킷 ACL에 작성자로 추가하고 내보내기 객체에 리더로 추가합니다.

    gsutil acl ch -u "${CLOUDSQL_SA}":W "gs://$(gcloud config get-value project)-bucket/"
    gsutil acl ch -u "${CLOUDSQL_SA}":R \
        "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak"
    

내보낸 데이터베이스 가져오기

  1. Cloud Shell을 엽니다.

    Cloud Shell 열기

  2. 내보낸 파일을 Cloud SQL 인스턴스로 가져옵니다.

    gcloud sql import bak sqlserver-cloudsql \
        "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" \
        --database WideWorldImporters
    

    메시지가 표시되면 y를 입력합니다.

  3. SQL Server 도구 패키지를 설치합니다.

    sudo apt install -y mssql-tools
    

    라이선스 조건에 수락하면 프롬프트가 표시되었을 때 yes를 입력합니다.

    이러한 도구를 사용하여 Cloud SQL 인스턴스에서 쿼리를 실행할 수 있도록 Cloud Shell에서 Cloud SQL에 연결합니다.

  4. Cloud SQL 프록시를 SQL Server 인스턴스에 연결합니다.

    CONNECTION_NAME=$(gcloud sql instances describe sqlserver-cloudsql --format='value(connectionName)')
    cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
    
  5. 클론된 데이터베이스가 작동하는지 확인하려면 쿼리를 실행합니다.

    /opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q \
      'SELECT top(100)
        i.InvoiceDate, i.InvoiceID, i.CustomerID, LEFT(c.CustomerName,20) CustomerName,
        i.ConfirmedDeliveryTime, LEFT(i.ConfirmedReceivedBy,20) ConfirmedReceivedBy
      FROM
        WideWorldImporters.Sales.Invoices i
        JOIN WideWorldImporters.Sales.Customers c
        ON i.CustomerID=c.CustomerID
      WHERE i.ConfirmedDeliveryTime IS NOT NULL
      ORDER BY i.InvoiceDate desc;'
    

    메시지가 표시되면 sqlserver-cloudsql 데이터베이스 서버(sqlserver12@)의 sqlserver 사용자 비밀번호를 입력합니다.

    이 쿼리는 가장 최근에 전송된 100개의 인보이스에서 요약 정보를 검색합니다.

    출력은 다음과 같습니다.

    InvoiceDate      InvoiceID   CustomerID  CustomerName         ConfirmedDeliveryTime                  ConfirmedReceivedBy
    ---------------- ----------- ----------- -------------------- -------------------------------------- --------------------
          2016-05-30       70349         581 Wingtip Toys (Munich            2016-05-31 07:05:00.0000000 Youssef Eriksson
          2016-05-30       70350         123 Tailspin Toys (Roe P            2016-05-31 07:10:00.0000000 Ella Zvirbule
          2016-05-30       70351         175 Tailspin Toys (San A            2016-05-31 07:15:00.0000000 Julio Correa
          2016-05-30       70352        1029 Veronika Necesana               2016-05-31 07:20:00.0000000 Veronika Necesana
          2016-05-30       70353        1014 Narendra Tickoo                 2016-05-31 07:25:00.0000000 Narendra Tickoo
          2016-05-30       70354         930 Shantanu Huq                    2016-05-31 07:30:00.0000000 Shantanu Huq
          2016-05-30       70355         963 Be Trang                        2016-05-31 07:35:00.0000000 Be Trang
          2016-05-30       70356         567 Wingtip Toys (Jerome            2016-05-31 07:40:00.0000000 Severins Polis
          2016-05-30       70357         510 Wingtip Toys (Grabil            2016-05-31 07:45:00.0000000 Manish Ghosh
    ...
    

삭제

이 튜토리얼에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 이 튜토리얼에서 만든 Google Cloud 프로젝트를 삭제하면 됩니다.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

다음 단계