분산 가용성 그룹을 사용하여 자체 관리형 SQL Server에서 마이그레이션

이 가이드에서는 Database Migration Service의 분산 가용성 그룹 (DAG)을 사용하여 비공개 네트워크 연결을 통해 자체 관리형 SQL Server Enterprise 버전 인스턴스에서 SQL Server용 Cloud SQL Enterprise 버전으로 데이터베이스를 마이그레이션하는 방법을 보여줍니다.

DAG 마이그레이션을 사용하면 Database Migration Service가 초기 전체 로드(FULL_DUMP 단계라고 함)와 지속적인 트랜잭션 로그 복제(변경 데이터 캡처 - CDC 단계라고 함)를 소스 가용성 그룹과 대상 SQL Server용 Cloud SQL 가용성 그룹 간의 네트워크를 통해 직접 스트리밍합니다. DAG 마이그레이션의 아키텍처, 기본 요건, 제한사항에 대한 자세한 내용은 분산 가용성 그룹 (DAG) 마이그레이션 정보를 참조하세요. Cloud Storage에 저장된 백업 파일을 사용하여 마이그레이션하려면 SQL Server 데이터베이스를 SQL Server용 Cloud SQL로 마이그레이션을 참조하세요.

분산 가용성 그룹 마이그레이션을 수행하려면 다음과 같은 대략적인 작업을 완료합니다.

  1. SQL Server용 Cloud SQL 대상 인스턴스를 만들고 준비합니다.
  2. 소스 SQL Server 인스턴스 및 가용성 그룹을 준비합니다.
  3. 양방향 비공개 네트워크 연결을 설정하고 연결된 서버를 구성합니다.
  4. 연결 프로필을 만들고 마이그레이션 작업을 실행합니다.
  5. 이전을 모니터링하고 확인합니다.
  6. 마이그레이션을 승격, 장애 복구 또는 완료합니다.

비용

Cloud SQL로의 동종 마이그레이션의 경우 Database Migration Service가 추가 비용 없이 제공됩니다. 하지만 표준 Cloud SQL 및 네트워크 가격 책정이 적용됩니다. 사용 비용을 산출하려면 가격 계산기를 사용하세요.

시작하기 전에

  1. 소스 및 대상 데이터베이스가 분산 가용성 그룹 마이그레이션의 모든 기본 요건 및 제한사항을 충족하는지 확인합니다 (Enterprise Edition 실행, 기본 데이터 디렉터리에 데이터 파일 저장, sa를 데이터베이스 소유자로 사용하지 않음 포함). 분산 가용성 그룹 (DAG) 마이그레이션 정보를 참조하세요.
  2. 마이그레이션할 Google Cloud 리전을 선택합니다. Database Migration Service는 완전한 리전 제품입니다. 마이그레이션과 관련된 모든 항목 (소스 및 대상 연결 프로필, 마이그레이션 작업, 대상 SQL Server용 Cloud SQL 인스턴스)은 동일한 리전에 있어야 합니다.
  3. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  4. Database Migration Service, Compute Engine, Cloud SQL Admin API를 사용 설정합니다.

    API 사용 설정

필요한 역할

Google Cloud 프로젝트에 다음 IAM 역할이 부여되었는지 확인합니다.

역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

대상 SQL Server용 Cloud SQL 인스턴스 만들기 및 준비

이 단계에서는 대상 SQL Server용 Cloud SQL Enterprise 버전 인스턴스를 만들고 연결된 서버에 필요한 데이터베이스 플래그를 사용 설정합니다.

  1. 대상 SQL Server용 Cloud SQL 인스턴스를 만듭니다. 자세한 생성 안내는 SQL Server용 Cloud SQL 인스턴스 만들기를 참조하세요. 인스턴스가 분산 가용성 그룹 마이그레이션에 대한 다음 요구사항을 충족하는지 확인합니다.
    • Enterprise 버전 (버전 2017, 2019, 2022 또는 2025)을 선택합니다.
    • 소스 SQL Server 인스턴스와 대상 SQL Server용 Cloud SQL 인스턴스를 연결하는 방법에 맞게 비공개 네트워킹을 구성합니다. Virtual Private Cloud 피어링을 통해 인스턴스를 연결하려면 비공개 서비스 액세스를 사용 설정하고, 인바운드 Private Service Connect 엔드포인트와 아웃바운드 Private Service Connect 네트워크 연결을 사용하여 인스턴스를 연결하려면 Private Service Connect를 사용합니다.

      동일한 대상 SQL Server용 Cloud SQL 인스턴스에서 비공개 서비스 액세스와 Private Service Connect를 모두 사용 설정하지 마세요. SQL Server용 Cloud SQL은 둘 다 사용 설정된 경우 연결된 서버를 지원하지 않습니다. 전체 네트워킹 설정 세부정보는 양방향 비공개 네트워크 연결 설정을 참조하세요.

    • DAG 마이그레이션 작업을 완료하고 삭제할 때까지 PITR (point-in-time recovery)을 사용 중지된 상태로 유지하고 읽기 복제본을 추가하지 마세요.
    • 소스 데이터베이스가 Windows Active Directory 로그인으로 소유된 경우 마이그레이션하기 전에 소스 데이터베이스 소유자를 SQL 로그인으로 변경하거나 대상 SQL Server용 Cloud SQL 인스턴스를 Active Directory에 조인하여 마이그레이션 작업이 시작될 때 Database Migration Service가 대상 인스턴스에 해당 Windows 로그인을 자동으로 만들 수 있도록 합니다. 자세한 내용은 SQL Server용 Cloud SQL에 관리형 Microsoft AD 구성을 참조하세요.
  2. 대상 SQL Server용 Cloud SQL 인스턴스에서 cloudsql enable linked servers 데이터베이스 플래그를 사용 설정합니다(on로 설정). 플래그 설정에 대한 안내는 연결된 서버 관리 및 데이터베이스 플래그 구성을 참조하세요.

    이 플래그는 이 가이드의 뒷부분에서 대상 SQL Server용 Cloud SQL 인스턴스에서 연결된 서버를 만들고 확인할 때 필요합니다.

소스 SQL Server 인스턴스 준비

이 단계에서는 소스 SQL Server 인스턴스에서 Always On 가용성 그룹을 사용 설정하고, 데이터베이스 미러링 엔드포인트 및 인증서를 만들고, Database Migration Service의 전용 SQL 로그인을 만들고, 소스 가용성 그룹을 준비합니다.

Always On 가용성 그룹 사용 설정

소스 SQL Server 인스턴스에서 Always On 가용성 그룹 기능이 사용 설정되어 있는지 확인합니다.

데이터베이스 미러링 엔드포인트 및 인증서 만들기

SQL Server에서 분산 가용성 그룹은 TCP DATABASE_MIRRORING (DBM) 엔드포인트 (기본 포트 5022)를 통해 인스턴스 간에 데이터 및 트랜잭션 로그를 스트리밍합니다. 자체 관리형 SQL Server 인스턴스와 대상 SQL Server용 Cloud SQL 인스턴스는 독립형 인스턴스이므로 DBM 엔드포인트에서 신뢰를 설정하려면 인증서 기반 상호 인증과 AES 암호화가 필요합니다.

인증서를 만들고 소스 SQL Server 인스턴스의 DATABASE_MIRRORING 엔드포인트에 바인딩하기만 하면 됩니다. 대상 SQL Server용 Cloud SQL 인스턴스에서 인증서 파일을 수동으로 내보내거나 인증서를 만들 필요가 없습니다.

  • 마이그레이션 작업을 시작하면 Database Migration Service가 대상 SQL Server용 Cloud SQL 인스턴스에서 DATABASE_MIRRORING 엔드포인트와 인증서를 자동으로 구성하고 연결된 서버를 사용하여 두 인스턴스 간에 공개 키를 교환합니다.
  • 컷오버를 완료한 후 마이그레이션 작업을 삭제하면 Database Migration Service가 두 인스턴스에서 가져온 인증서를 자동으로 삭제합니다.

소스 SQL Server 인스턴스에 인증서로 인증된 DATABASE_MIRRORING 엔드포인트가 아직 없으면 엔드포인트를 만듭니다.

  1. SQL 클라이언트(예: sqlcmd 유틸리티)를 사용하여 소스 인스턴스에 연결합니다.
  2. 다음 T-SQL 명령어를 실행하여 데이터베이스 마스터 키, 인증서, 선택한 DBM 포트 (기본값 5022)에서 리슨하는 DATABASE_MIRRORING 엔드포인트를 만듭니다.
    USE [master];
    GO
    
    IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
    BEGIN
        CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MASTER_KEY_PASSWORD';
    END
    GO
    
    CREATE CERTIFICATE [SOURCE_CERT_NAME]
        WITH SUBJECT = 'AlwaysOn AG Certificate',
        EXPIRY_DATE = 'CERT_EXPIRY_DATE';
    GO
    
    CREATE ENDPOINT [HADR_ENDPOINT_NAME]
        STATE = STARTED
        AS TCP (LISTENER_PORT = SOURCE_DBM_PORT_NUMBER)
        FOR DATABASE_MIRRORING (
            ROLE = ALL,
            AUTHENTICATION = CERTIFICATE [SOURCE_CERT_NAME],
            ENCRYPTION = REQUIRED ALGORITHM AES
        );
    GO

    다음을 바꿉니다.

    • MASTER_KEY_PASSWORD를 데이터베이스 마스터 키를 암호화할 비밀번호로 바꿉니다.
    • SOURCE_CERT_NAME을 소스 데이터베이스 미러링 인증서의 이름으로 바꿉니다 (예: dbmCertificate).
    • CERT_EXPIRY_DATE를 YYYYMMDD 형식의 인증서 만료일로 바꿉니다.
    • HADR_ENDPOINT_NAME을 데이터베이스 미러링 엔드포인트 이름으로 바꿉니다.
    • SOURCE_DBM_PORT_NUMBER: 데이터베이스 미러링 트래픽의 TCP 포트 번호 (기본값 5022)

전용 Database Migration Service 로그인 및 권한 만들기

Database Migration Service는 소스 연결 프로필에 제공하는 전용 SQL 로그인을 사용하여 연결된 서버를 통해 소스 SQL Server 인스턴스에 연결합니다. sysadmin 서버 역할을 부여하거나 gcp_dms_db 도우미 데이터베이스를 사용하여 최소 권한을 구성하여 이 로그인을 구성할 수 있습니다.

sysadmin 역할 부여

보안 정책에서 마이그레이션 로그인에 sysadmin 서버 역할을 부여하도록 허용하는 경우 다음 T-SQL 명령어를 실행합니다.

USE [master];
GO
CREATE LOGIN [SOURCE_USERNAME] WITH PASSWORD = 'SOURCE_PASSWORD';
CREATE USER [SOURCE_USER] FOR LOGIN [SOURCE_USERNAME];
ALTER SERVER ROLE [sysadmin] ADD MEMBER [SOURCE_USERNAME];
GRANT CONNECT ON ENDPOINT::[HADR_ENDPOINT_NAME] TO [SOURCE_USERNAME];
GO

다음을 바꿉니다.

  • SOURCE_USERNAME을 Database Migration Service에서 소스 인스턴스에 연결하는 데 사용하는 SQL 로그인 이름 (예: cloud_dms_login)으로 바꿉니다.
  • SOURCE_PASSWORD를 SOURCE_USERNAME 로그인 비밀번호로 바꿉니다.
  • SOURCE_USER을 SOURCE_USERNAME에 매핑된 데이터베이스 사용자 이름으로 바꿉니다(예: cloud_dms_user).
  • HADR_ENDPOINT_NAME을 데이터베이스 미러링 엔드포인트의 이름으로 바꿉니다 (예: Hadr_endpoint).

최소 권한 (gcp_dms_db)

보안 정책에서 마이그레이션 로그인에 sysadmin 부여를 금지하는 경우 전용 gcp_dms_db 도우미 데이터베이스(TRUSTWORTHY ON가 있는 sa 소유)를 만들고, Database Migration Service 래퍼 저장 프로시져 3개를 만들고, 마이그레이션 로그인에 세분화된 권한을 부여합니다.

USE [master];
GO

CREATE DATABASE [gcp_dms_db];
GO

ALTER AUTHORIZATION ON DATABASE::[gcp_dms_db] TO [sa];
ALTER DATABASE [gcp_dms_db] SET TRUSTWORTHY ON;
GO

USE [gcp_dms_db];
GO

CREATE OR ALTER PROCEDURE dbo.gcp_dms_set_dag_commit_mode
    @dag_name NVARCHAR(128),
    @source_ag NVARCHAR(128),
    @dest_ag NVARCHAR(128),
    @commit_mode NVARCHAR(30)
WITH EXECUTE AS 'dbo'
AS
BEGIN
    SET NOCOUNT ON;
    IF @commit_mode NOT IN ('SYNCHRONOUS_COMMIT', 'ASYNCHRONOUS_COMMIT')
    BEGIN
        RAISERROR('Invalid commit mode. Must be SYNCHRONOUS_COMMIT or ASYNCHRONOUS_COMMIT.', 16, 1);
        RETURN;
    END
    DECLARE @sql NVARCHAR(MAX);
    SET @sql = N'USE master; ALTER AVAILABILITY GROUP ' + QUOTENAME(@dag_name) +
               N' MODIFY AVAILABILITY GROUP ON ' +
               QUOTENAME(@source_ag, '''') + N' WITH (AVAILABILITY_MODE = ' + @commit_mode + N'), ' +
               QUOTENAME(@dest_ag, '''') + N' WITH (AVAILABILITY_MODE = ' + @commit_mode + N');';
    EXECUTE sp_executesql @sql;
END;
GO

CREATE OR ALTER PROCEDURE dbo.gcp_dms_set_dag_secondary
    @dag_name NVARCHAR(128)
WITH EXECUTE AS 'dbo'
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @sql NVARCHAR(MAX);
    SET @sql = N'USE master; ALTER AVAILABILITY GROUP ' + QUOTENAME(@dag_name) + N' SET (ROLE = SECONDARY);';
    EXECUTE sp_executesql @sql;
END;
GO

CREATE OR ALTER PROCEDURE dbo.gcp_dms_failover_dag
    @dag_name NVARCHAR(128)
WITH EXECUTE AS 'dbo'
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @sql NVARCHAR(MAX);
    SET @sql = N'USE master; ALTER AVAILABILITY GROUP ' + QUOTENAME(@dag_name) + N' FORCE_FAILOVER_ALLOW_DATA_LOSS;';
    EXECUTE sp_executesql @sql;
END;
GO

USE [master];
GO

CREATE LOGIN [SOURCE_USERNAME] WITH PASSWORD = 'SOURCE_PASSWORD';
CREATE USER [SOURCE_USER] FOR LOGIN [SOURCE_USERNAME];
GRANT VIEW SERVER STATE TO [SOURCE_USERNAME];
-- Note: Run GRANT VIEW SERVER PERFORMANCE STATE on SQL Server 2022 and later:
GRANT VIEW SERVER PERFORMANCE STATE TO [SOURCE_USERNAME];
GRANT VIEW ANY DEFINITION TO [SOURCE_USERNAME];
GRANT ALTER ANY AVAILABILITY GROUP TO [SOURCE_USERNAME];
GRANT CONNECT ON ENDPOINT::[HADR_ENDPOINT_NAME] TO [SOURCE_USERNAME];
GRANT CREATE CERTIFICATE TO [SOURCE_USER];
GO

USE [gcp_dms_db];
GO

CREATE USER [SOURCE_USER] FOR LOGIN [SOURCE_USERNAME];
GRANT EXECUTE ON dbo.gcp_dms_set_dag_commit_mode TO [SOURCE_USER];
GRANT EXECUTE ON dbo.gcp_dms_set_dag_secondary TO [SOURCE_USER];
GRANT EXECUTE ON dbo.gcp_dms_failover_dag TO [SOURCE_USER];
GO

-- Repeat the following block for EACH user database in your source Availability Group:
USE [DATABASE_NAME];
GO

CREATE USER [SOURCE_USER] FOR LOGIN [SOURCE_USERNAME];
ALTER ROLE [db_backupoperator] ADD MEMBER [SOURCE_USER];
GO

다음을 바꿉니다.

  • SOURCE_USERNAME을 Database Migration Service에서 소스 인스턴스에 연결하는 데 사용하는 SQL 로그인 이름 (예: cloud_dms_login)으로 바꿉니다.
  • SOURCE_PASSWORD를 SOURCE_USERNAME 로그인 비밀번호로 바꿉니다.
  • SOURCE_USER을 SOURCE_USERNAME에 매핑된 데이터베이스 사용자 이름으로 바꿉니다(예: cloud_dms_user).
  • HADR_ENDPOINT_NAME을 데이터베이스 미러링 엔드포인트의 이름으로 바꿉니다 (예: Hadr_endpoint).
  • DATABASE_NAME을 가용성 그룹에 있는 각 소스 데이터베이스의 이름으로 바꿉니다. 마이그레이션된 각 데이터베이스에 db_backupoperator을 부여하는 것은 Database Migration Service 실행 전 확인에 필요하며 승격 중에 CHECKPOINT로 트랜잭션 로그를 플러시할 수 있습니다.

소스 데이터베이스 및 가용성 그룹 준비

기존 Always On 가용성 그룹에서 데이터베이스를 마이그레이션하거나 새 독립형 가용성 그룹 (CLUSTER_TYPE = NONE)을 만들 수 있습니다. 계속하기 전에 다음 요구사항을 확인하세요.

  • 가용성 그룹의 모든 데이터베이스는 FULL 복구 모델을 사용하고, sa가 소유하지 않으며, 데이터 파일 (.mdf 및 .ndf)을 기본 데이터 디렉터리에 저장합니다.
  • 기존 가용성 그룹을 재사용하는 경우 데이터베이스 미러링 엔드포인트가 포트 5022 (또는 선택한 DBM 포트)에 구성되어 있는지, 승격으로 DAG 역할이 전환된 후에도 보조 데이터베이스가 표준 연결 문자열로 읽기 가능한 상태로 유지되도록 복제본에서 SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)가 사용 설정되어 있는지, 마이그레이션 로그인에 CONNECT ON ENDPOINT가 있는지 확인합니다. 소스 가용성 그룹에 여러 복제본과 가용성 그룹 리스너가 구성된 경우 연결된 서버 및 소스 연결 프로필을 구성할 때 리스너 IP 주소를 <var>SOURCE_HOST_IP_ADDRESS</var>로 사용합니다. 그러면 소스 가용성 그룹에서 장애 조치가 발생할 경우 마이그레이션을 재개할 수 있습니다.

데이터베이스를 준비하고 새 독립형 가용성 그룹(CLUSTER_TYPE = NONE)을 만들려면 다음 T-SQL 명령어를 실행합니다.

USE [master];
GO

ALTER DATABASE [DATABASE_NAME] SET RECOVERY FULL;
GO

-- If the database is owned by 'sa', change the owner to another login:
ALTER AUTHORIZATION ON DATABASE::[DATABASE_NAME] TO [DB_OWNER_LOGIN];
GO

-- Initialize the local SQL Server transaction log chain for the Availability Group:
BACKUP DATABASE [DATABASE_NAME] TO DISK = 'NUL';
GO

CREATE AVAILABILITY GROUP [SOURCE_AVAILABILITY_GROUP_NAME] WITH (CLUSTER_TYPE = NONE)
    FOR REPLICA ON N'SOURCE_SERVER_NAME' WITH (
        ENDPOINT_URL = N'TCP://localhost:SOURCE_DBM_PORT_NUMBER',
        FAILOVER_MODE = MANUAL,
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        SEEDING_MODE = MANUAL,
        PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE),
        SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL)
    );
GO

ALTER AVAILABILITY GROUP [SOURCE_AVAILABILITY_GROUP_NAME] ADD DATABASE [DATABASE_NAME];
GO

다음을 바꿉니다.

  • DATABASE_NAME을 가용성 그룹에 포함할 데이터베이스 이름으로 바꿉니다.
  • DB_OWNER_LOGIN를 데이터베이스를 소유할 sa 이외의 로그인으로 바꿉니다.
  • SOURCE_AVAILABILITY_GROUP_NAME을 소스 가용성 그룹의 이름으로 바꿉니다 (예: source_ag).
  • SOURCE_SERVER_NAME을 소스 SQL Server 인스턴스의 서버 이름으로 바꿉니다(SELECT @@SERVERNAME에서 반환된 값과 일치).
  • SOURCE_DBM_PORT_NUMBER를 데이터베이스 미러링 엔드포인트의 TCP 포트 번호로 바꿉니다 (기본값 5022).

양방향 비공개 네트워크 연결 설정

DAG 마이그레이션의 경우 Database Migration Service는 내부 Google Cloud API를 통해 대상 SQL Server용 Cloud SQL 인스턴스와 통신하고, 대상 SQL Server용 Cloud SQL 인스턴스의 연결된 서버를 통해 소스 SQL Server 인스턴스에서 조정 쿼리를 실행하고, 비공개 네트워크를 통해 두 인스턴스 간에 데이터를 직접 스트리밍합니다. 이 마이그레이션을 수행하려면 가상 프라이빗 클라우드 네트워크를 통해 소스 SQL Server 호스트와 대상 SQL Server용 Cloud SQL 인스턴스 간에 양방향 비공개 IP 연결을 직접 설정해야 합니다. 소스 인스턴스와 대상 인스턴스 간의 공개 IP 연결은 지원되지 않습니다.

필수 포트 및 IP 주소

네트워크 구성은 다음 두 TCP 포트에서 소스 SQL Server 인스턴스와 대상 SQL Server용 Cloud SQL 인스턴스 간의 트래픽을 허용해야 합니다.

포트 방향 목적
SQL Server 데이터베이스 포트 (기본값 1433) 대상 SQL Server용 Cloud SQL 인스턴스에서 소스 SQL Server 인스턴스로 대상 SQL Server용 Cloud SQL 인스턴스의 연결된 서버에서 소스 인스턴스에 대한 프리플라이트 검증, 인증서 교환, DAG 조정 쿼리를 실행하는 데 사용됩니다.
데이터베이스 미러링 (DBM) 포트 (기본값 5022) 소스 SQL Server 인스턴스와 대상 SQL Server용 Cloud SQL 인스턴스 간 양방향 소스 및 대상 가용성 그룹에서 FULL_DUMP 중 초기 전체 로드, CDC 중 진행 중인 데이터베이스 변경사항, FAILBACK 중 역방향 복제를 스트리밍하는 데 사용됩니다.

이 가이드의 뒷부분에서 연결된 서버 및 연결 프로필을 구성할 때 비공개 IP 주소 두 개를 제공합니다.

  • SOURCE_HOST_IP_ADDRESS (연결된 서버 @datasrc 매개변수 및 소스 연결 프로필 --host 플래그에 사용됨)는 대상 SQL Server용 Cloud SQL 인스턴스에서 연결할 수 있는 소스 SQL Server 호스트의 비공개 IP 주소 (또는 다중 복제본 소스 가용성 그룹에 구성된 경우 소스 가용성 그룹에서 장애 조치가 발생하면 마이그레이션을 재개할 수 있도록 선호되는 가용성 그룹 리스너 IP 주소)입니다.
  • DESTINATION_HOST_IP_ADDRESS (대상 연결 프로필 --host 플래그에 사용됨)는 소스 SQL Server 호스트에서 연결할 수 있는 대상 SQL Server용 Cloud SQL 인스턴스 (또는 Private Service Connect 엔드포인트 IP 주소)의 비공개 IP 주소입니다.

비공개 네트워킹 방법 구성

대상 SQL Server용 Cloud SQL 인스턴스에서 사용 설정한 네트워킹 방법 (비공개 서비스 액세스 또는 Private Service Connect)에 대한 네트워크 라우팅 구성을 완료합니다.

비공개 서비스 액세스

비공개 서비스 액세스는 가상 프라이빗 클라우드 네트워크를 대상 SQL Server용 Cloud SQL 인스턴스를 호스팅하는 Google 관리형 서비스 프로듀서 가상 프라이빗 클라우드 네트워크와 피어링합니다.

  1. Virtual Private Cloud 네트워크에 할당된 내부 IPv4 주소 범위가 있고 대상 SQL Server용 Cloud SQL 인스턴스에 비공개 연결(servicenetworking-googleapis-com에 대한 Virtual Private Cloud 피어링)이 사용 설정되어 있는지 확인합니다. 자세한 내용은 SQL Server용 Cloud SQL의 비공개 IP 구성을 참조하세요.
  2. 호스팅 위치에 따라 소스 SQL Server 호스트에 대한 라우팅을 구성합니다.
    • 소스 인스턴스가 동일한 가상 프라이빗 클라우드 네트워크의 Compute Engine 가상 머신에서 실행되는 경우 추가 라우팅이 필요하지 않습니다. 가상 머신과 SQL Server용 Cloud SQL 인스턴스는 가상 프라이빗 클라우드 피어링 연결을 통해 서로의 비공개 IP 주소에 직접 연결할 수 있습니다.
    • 소스 인스턴스가 온프레미스, 다른 클라우드 제공업체 또는 다른 가상 프라이빗 클라우드 네트워크에서 실행되는 경우 다음 단계를 완료하여 전이적 피어링 경계를 넘어 경로가 교환되도록 합니다.
      1. Cloud VPN 또는 Cloud Interconnect를 사용하여 외부 네트워크를 Virtual Private Cloud 네트워크에 연결합니다. 자세한 내용은 외부 소스에서 Cloud SQL 인스턴스에 액세스를 참조하세요.
      2. Cloud Router에서 SQL Server용 Cloud SQL에 할당된 IP 주소 범위를 소스 네트워크에 공지합니다. 자세한 내용은 커스텀 IP 범위 공지를 참조하세요.
      3. 가상 프라이빗 클라우드 네트워크에서 servicenetworking-googleapis-com 피어링 연결을 업데이트하여 커스텀 경로 내보내기를 사용 설정하면 SQL Server용 Cloud SQL 인스턴스가 소스 네트워크에 대한 경로를 학습합니다. 자세한 내용은 피어링 연결 업데이트를 참조하세요.
  3. 마이그레이션의 비공개 IP 주소를 기록합니다.
    • 소스 SQL Server 호스트의 내부 IP 주소를 SOURCE_HOST_IP_ADDRESS로 사용합니다.
    • 대상 SQL Server용 Cloud SQL 인스턴스에 할당된 비공개 IP 주소(인스턴스 개요 페이지에 표시됨)를 DESTINATION_HOST_IP_ADDRESS로 사용합니다.

Private Service Connect

비공개 서비스 액세스 대신 Private Service Connect를 사용하는 경우 인바운드 Private Service Connect 엔드포인트 (소스 인스턴스가 포트 5022에서 SQL Server용 Cloud SQL에 연결할 수 있도록)와 아웃바운드 Private Service Connect 인터페이스 (SQL Server용 Cloud SQL이 포트 1433 및 5022에서 소스 인스턴스에 연결된 서버 및 DAG 연결을 시작할 수 있도록)를 모두 구성해야 합니다.

  1. 대상 SQL Server용 Cloud SQL 인스턴스에 Private Service Connect가 사용 설정되어 있고 (비공개 IP 없음) 허용된 소비자 프로젝트가 지정되어 있는지 확인합니다. 자세한 내용은 Private Service Connect 구성을 참조하세요.
  2. 소스 SQL Server 호스트에서 대상 SQL Server용 Cloud SQL 인스턴스로의 인바운드 연결을 허용하려면 가상 프라이빗 클라우드 서브넷에서 내부 IP 주소를 예약하고 SQL Server용 Cloud SQL 인스턴스의 서비스 연결을 타겟팅하는 Private Service Connect 엔드포인트 (전달 규칙)를 만듭니다. 자세한 내용은 Private Service Connect 엔드포인트 만들기를 참조하세요.
  3. 대상 SQL Server용 Cloud SQL 인스턴스에서 소스 SQL Server 호스트로의 아웃바운드 연결을 허용하려면 (연결된 서버 및 아웃바운드 DAG 연결에 필요) 소스 호스트로 라우팅할 수 있는 서브넷에 가상 프라이빗 클라우드 네트워크 연결을 만들고 대상 SQL Server용 Cloud SQL 인스턴스에서 Private Service Connect 아웃바운드 연결을 구성합니다. 자세한 내용은 네트워크 연결 만들기 및 관리 및 Private Service Connect 아웃바운드 연결 구성을 참조하세요.
  4. 마이그레이션의 비공개 IP 주소를 기록합니다.
    • 소스 SQL Server 호스트의 비공개 IP 주소를 SOURCE_HOST_IP_ADDRESS로 사용합니다.
    • Virtual Private Cloud 네트워크에서 Private Service Connect 엔드포인트 (전달 규칙)의 내부 IP 주소를 DESTINATION_HOST_IP_ADDRESS로 사용합니다.

가상 프라이빗 클라우드(VPC) 및 소스 호스트 방화벽 규칙 구성

  1. Virtual Private Cloud 네트워크에서 데이터베이스 포트(기본값 1433)와 데이터베이스 미러링 포트(기본값 5022) 모두에서 소스 SQL Server IP 주소(SOURCE_HOST_IP_ADDRESS)와 대상 SQL Server용 Cloud SQL IP 범위(또는 Private Service Connect 엔드포인트 및 네트워크 연결 서브넷) 간에 TCP 트래픽을 허용하는 인그레스 및 이그레스 방화벽 규칙을 만듭니다. 방화벽 규칙 만들기에 대한 자세한 내용은 방화벽 규칙 만들기를 참조하세요.
  2. 소스 SQL Server 머신에서 다음 네트워크 및 호스트 방화벽 설정을 확인합니다.
    • TCP/IP는 SQL Server 구성 관리자 (또는 Linux의 mssql-conf)에서 사용 설정되고 인스턴스는 정적 TCP 포트 (기본값 1433)에서 리슨합니다.
    • 운영체제 방화벽 (예: Windows Defender 방화벽 또는 Linux iptables 또는 firewalld)은 데이터베이스 포트 (기본값 1433)와 데이터베이스 미러링 포트 (기본값 5022) 모두에서 인바운드 TCP 연결을 허용하고 포트 5022에서 DESTINATION_HOST_IP_ADDRESS에 대한 아웃바운드 TCP 연결을 허용합니다.

Cloud SQL 연결 테스트로 연결 가능성 확인

연결된 서버를 구성하기 전에 Google Cloud 콘솔에서 SQL Server용 Cloud SQL 인스턴스의 연결 > 연결 테스트 탭에서 연결 테스트를 세 번 실행하는 것이 좋습니다. 연결 테스트를 실행하는 방법에 대한 안내는 연결 테스트 관리를 참조하세요.

  1. 포트 1433에서 아웃바운드 연결된 서버 연결을 테스트하려면 소스를 현재 Cloud SQL 인스턴스로, 대상을 SOURCE_HOST_IP_ADDRESS로, 대상 포트를 1433 (또는 커스텀 데이터베이스 포트)로 설정합니다.
  2. 포트 5022에서 아웃바운드 데이터베이스 미러링 연결을 테스트하려면 소스를 현재 Cloud SQL 인스턴스로, 대상을 SOURCE_HOST_IP_ADDRESS으로, 대상 포트를 5022 (또는 커스텀 DBM 포트)로 설정합니다.
  3. 포트 5022에서 인바운드 데이터베이스 미러링 연결을 테스트하려면 소스를 SOURCE_HOST_IP_ADDRESS로, 대상을 현재 Cloud SQL 인스턴스 (또는 Private Service Connect를 사용하는 경우 DESTINATION_HOST_IP_ADDRESS)로, 대상 포트를 5022 (또는 커스텀 DBM 포트)로 설정합니다.

대상 SQL Server용 Cloud SQL 인스턴스에서 연결된 서버를 만들고 확인합니다.

네트워크 연결이 설정되면 대상 SQL Server용 Cloud SQL 인스턴스에 연결하고 소스 SQL Server 인스턴스를 가리키는 연결된 서버를 만듭니다.

  1. SQL 클라이언트로 Cloud SQL 인스턴스에 연결합니다. 다음 메서드를 사용할 수 있습니다.
    • sqlcmd 클라이언트. 이 방법을 사용하여 인스턴스 비공개 IP에 연결할 수 있지만 Compute Engine 가상 머신을 만들어야 할 수 있습니다.
    • gcloud sql connect 명령어 이 명령어는 공개 IP 주소가 사용 설정된 Cloud SQL 인스턴스에만 작동합니다.
  2. sqlserver 사용자로 로그인하고 대상 SQL Server용 Cloud SQL 버전에 대해 다음 T-SQL 명령어를 실행하여 소스 SQL Server 인스턴스를 가리키는 연결된 서버를 만들고, @locallogin = N'sqlserver'를 소스 마이그레이션 로그인에 매핑하고, rpc out를 사용 설정하고, OPENQUERY로 연결을 테스트합니다(Cloud SQL의 연결된 서버 옵션에 대한 자세한 내용은 연결된 서버 관리 참조).

    SQL Server 2017, 2019, 2022용 Cloud SQL

    USE [master];
    GO
    
    EXEC master.dbo.sp_addlinkedserver
        @server = N'LINKED_SERVER_NAME',
        @srvproduct = N'',
        @provider = N'SQLNCLI',
        @datasrc = N'SOURCE_HOST_IP_ADDRESS,SOURCE_PORT_NUMBER';
    GO
    
    EXEC master.dbo.sp_addlinkedsrvlogin
        @rmtsrvname = N'LINKED_SERVER_NAME',
        @useself = N'False',
        @locallogin = N'sqlserver',
        @rmtuser = N'SOURCE_USERNAME',
        @rmtpassword = N'SOURCE_PASSWORD';
    GO
    
    EXEC master.dbo.sp_serveroption
        @server = N'LINKED_SERVER_NAME',
        @optname = N'rpc out',
        @optvalue = N'TRUE';
    GO
    
    SELECT * FROM OPENQUERY([LINKED_SERVER_NAME], 'SELECT @@VERSION AS SourceServerVersion');
    GO

    SQL Server용 Cloud SQL 2025

    USE [master];
    GO
    
    EXEC master.dbo.sp_addlinkedserver
        @server = N'LINKED_SERVER_NAME',
        @srvproduct = N'',
        @provider = N'MSOLEDBSQL19',
        @datasrc = N'SOURCE_HOST_IP_ADDRESS,SOURCE_PORT_NUMBER',
        @provstr = N'Encrypt=Optional;TrustServerCertificate=Yes;Authentication=SqlPassword;UID=Placeholder;';
    GO
    
    EXEC master.dbo.sp_addlinkedsrvlogin
        @rmtsrvname = N'LINKED_SERVER_NAME',
        @useself = N'False',
        @locallogin = N'sqlserver',
        @rmtuser = N'SOURCE_USERNAME',
        @rmtpassword = N'SOURCE_PASSWORD';
    GO
    
    EXEC master.dbo.sp_serveroption
        @server = N'LINKED_SERVER_NAME',
        @optname = N'rpc out',
        @optvalue = N'TRUE';
    GO
    
    SELECT * FROM OPENQUERY([LINKED_SERVER_NAME], 'SELECT @@VERSION AS SourceServerVersion');
    GO

    다음을 바꿉니다.

    • LINKED_SERVER_NAME을 SQL Server용 Cloud SQL의 연결된 서버 이름으로 바꿉니다 (예: source_sql_linked_server).
    • SOURCE_HOST_IP_ADDRESS: 소스 SQL Server 인스턴스의 비공개 IP 주소 (또는 멀티 복제본 소스 가용성 그룹에 구성된 경우 가용성 그룹 리스너 IP 주소)
    • SOURCE_PORT_NUMBER를 소스 SQL Server 데이터베이스 엔진이 연결을 허용하는 포트 번호로 바꿉니다 (기본값 1433).
    • SOURCE_USERNAME: 전용 Database Migration Service 로그인 및 권한 만들기의 소스 인스턴스에서 만든 전용 SQL 로그인 이름입니다.
    • SOURCE_PASSWORD를 SOURCE_USERNAME 로그인 비밀번호로 바꿉니다.

연결 프로필 만들기 및 마이그레이션 작업 실행

Google Cloud CLI를 사용하여 소스 및 대상 연결 프로필을 만들고, 연속 DAG 마이그레이션 작업을 만들고, 마이그레이션 구성을 확인하고, 마이그레이션 작업을 시작합니다.

  1. 소스 연결 프로필을 만듭니다.
    gcloud database-migration connection-profiles create sqlserver 명령어를 실행합니다 (클릭하여 펼치기).

    gcloud database-migration connection-profiles create sqlserver

    이 샘플에서는 선택적 --no-async 플래그를 사용하므로 모든 작업이 동기식으로 수행됩니다. 즉, 일부 명령어는 완료하는 데 시간이 걸릴 수 있습니다. --no-async 플래그를 건너뛰어 명령어를 비동기식으로 실행할 수 있습니다. 이 경우 gcloud database-migration operations describe 명령어를 사용하여 작업이 성공했는지 확인해야 합니다.

    gcloud database-migration connection-profiles create sqlserver SOURCE_CONNECTION_PROFILE_ID \
        --no-async \
        --display-name=SOURCE_CONNECTION_PROFILE_NAME \
        --region=REGION \
        --role=SOURCE \
        --host=SOURCE_HOST_IP_ADDRESS \
        --port=SOURCE_PORT_NUMBER \
        --dbm-port=SOURCE_DBM_PORT_NUMBER \
        --username=SOURCE_USERNAME \
        --password=SOURCE_PASSWORD

    다음을 바꿉니다.

    • SOURCE_CONNECTION_PROFILE_ID을 소스 연결 프로필의 기계 가독형 식별자로 바꿉니다 (예: sqlserver-dag-source-profile).
    • SOURCE_CONNECTION_PROFILE_NAME을 인간이 읽을 수 있는 소스 연결 프로필 이름으로 바꿉니다. 이 값은 Google Cloud 콘솔의 Database Migration Service에 표시됩니다.
    • REGION을 연결 프로필을 저장할 리전의 식별자로 바꿉니다 (예: us-central1).
    • SOURCE_HOST_IP_ADDRESS: 소스 SQL Server 인스턴스의 비공개 IP 주소 (또는 멀티 복제본 소스 가용성 그룹에 구성된 경우 가용성 그룹 리스너 IP 주소)
    • SOURCE_PORT_NUMBER를 소스 SQL Server 데이터베이스 엔진이 연결을 허용하는 포트 번호로 바꿉니다 (기본값 1433).
    • SOURCE_DBM_PORT_NUMBER를 소스 데이터베이스 미러링 엔드포인트의 TCP 포트 번호로 바꿉니다 (기본값 5022).
    • SOURCE_USERNAME: 전용 Database Migration Service 로그인 및 권한 만들기의 소스 인스턴스에서 만든 전용 SQL 로그인 이름입니다.
    • SOURCE_PASSWORD를 SOURCE_USERNAME 로그인 비밀번호로 바꿉니다.
  2. 대상 연결 프로필을 만듭니다.
    gcloud database-migration connection-profiles create sqlserver 명령어를 실행합니다 (클릭하여 펼치기).

    gcloud database-migration connection-profiles create sqlserver

    이 샘플에서는 선택적 --no-async 플래그를 사용하므로 모든 작업이 동기식으로 수행됩니다. 즉, 일부 명령어는 완료하는 데 시간이 걸릴 수 있습니다. --no-async 플래그를 건너뛰어 명령어를 비동기식으로 실행할 수 있습니다. 이 경우 gcloud database-migration operations describe 명령어를 사용하여 작업이 성공했는지 확인해야 합니다.

    gcloud database-migration connection-profiles create sqlserver DESTINATION_CONNECTION_PROFILE_ID \
        --no-async \
        --display-name=DESTINATION_CONNECTION_PROFILE_NAME \
        --region=REGION \
        --role=DESTINATION \
        --cloudsql-instance=CLOUDSQL_INSTANCE_ID \
        --host=DESTINATION_HOST_IP_ADDRESS \
        --port=DESTINATION_PORT_NUMBER \
        --dbm-port=DESTINATION_DBM_PORT_NUMBER \
        --username=sqlserver \
        --password=CLOUD_SQL_DB_USER_PASSWORD

    다음을 바꿉니다.

    • DESTINATION_CONNECTION_PROFILE_ID을 대상 연결 프로필의 기계 가독형 식별자로 바꿉니다 (예: sqlserver-dag-dest-profile).
    • DESTINATION_CONNECTION_PROFILE_NAME을 인간이 읽을 수 있는 대상 연결 프로필 이름으로 바꿉니다. 이 값은 Google Cloud 콘솔의 Database Migration Service에 표시됩니다.
    • REGION을 연결 프로필을 저장할 리전의 식별자로 바꿉니다.
    • CLOUDSQL_INSTANCE_ID을 대상 SQL Server용 Cloud SQL 인스턴스의 이름으로 바꿉니다.
    • DESTINATION_HOST_IP_ADDRESS: 소스 SQL Server 인스턴스에서 연결할 수 있는 대상 SQL Server용 Cloud SQL 인스턴스의 비공개 IP 주소 (또는 Private Service Connect 엔드포인트 IP 주소)입니다.
    • DESTINATION_PORT_NUMBER을 대상 SQL Server용 Cloud SQL 인스턴스의 데이터베이스 포트 번호(1433)로 바꿉니다.
    • DESTINATION_DBM_PORT_NUMBER을 대상 SQL Server용 Cloud SQL 인스턴스(5022)의 데이터베이스 미러링 포트 번호로 바꿉니다.
    • CLOUD_SQL_DB_USER_PASSWORD: 대상 SQL Server용 Cloud SQL 인스턴스의 sqlserver 사용자의 비밀번호입니다 (--username는 sqlserver로 설정해야 함).
  3. 연속 DAG 마이그레이션 작업을 만듭니다.
    gcloud database-migration migration-jobs create 명령어를 실행합니다 (클릭하여 펼치기).

    gcloud database-migration migration-jobs create

    이 샘플에서는 선택적 --no-async 플래그를 사용하므로 모든 작업이 동기식으로 수행됩니다. 즉, 일부 명령어는 완료하는 데 시간이 걸릴 수 있습니다. --no-async 플래그를 건너뛰어 명령어를 비동기식으로 실행할 수 있습니다. 이 경우 gcloud database-migration operations describe 명령어를 사용하여 작업이 성공했는지 확인해야 합니다.

    gcloud database-migration migration-jobs create MIGRATION_JOB_ID \
        --no-async \
        --display-name=MIGRATION_JOB_NAME \
        --region=REGION \
        --type=CONTINUOUS \
        --source=SOURCE_CONNECTION_PROFILE_ID \
        --destination=DESTINATION_CONNECTION_PROFILE_ID \
        --sqlserver-dag-source-ag=SOURCE_AVAILABILITY_GROUP_NAME \
        --sqlserver-dag-linked-server=LINKED_SERVER_NAME

    다음을 바꿉니다.

    • MIGRATION_JOB_ID: 마이그레이션 작업의 기계 가독형 식별자입니다 (예: sqlserver-dag-job).
    • MIGRATION_JOB_NAME을 마이그레이션 작업의 인간이 읽을 수 있는 이름으로 바꿉니다. 이 값은 Google Cloud 콘솔에 표시됩니다.
    • REGION을 마이그레이션 작업을 만들려는 리전의 식별자로 바꿉니다.
    • SOURCE_CONNECTION_PROFILE_ID를 소스 연결 프로필의 식별자로 바꿉니다.
    • DESTINATION_CONNECTION_PROFILE_ID를 대상 연결 프로필의 식별자로 바꿉니다.
    • SOURCE_AVAILABILITY_GROUP_NAME: 소스 SQL Server 인스턴스의 가용성 그룹 이름
    • LINKED_SERVER_NAME: 대상 SQL Server용 Cloud SQL 인스턴스에서 연결된 서버 만들기 및 확인에서 대상 SQL Server용 Cloud SQL 인스턴스에 구성한 연결된 서버의 이름입니다.
  4. 마이그레이션 작업 구성을 확인합니다.
    DAG 마이그레이션 작업을 시작하기 전에 verify를 실행하여 양방향 네트워크 연결, 연결된 서버 RPC 액세스, gcp_dms_db 권한 (최소 권한을 사용하는 경우), 소스 데이터베이스 소유자(sa가 소유한 데이터베이스가 없는지 확인), 기본 데이터 파일 경로를 검증해야 합니다. gcloud database-migration migration-jobs verify 명령어를 실행합니다 (클릭하여 펼치기).

    gcloud database-migration migration-jobs verify

    gcloud database-migration migration-jobs verify MIGRATION_JOB_ID \
        --region=REGION

    다음을 바꿉니다.

    • MIGRATION_JOB_ID을 마이그레이션 작업의 식별자로 바꿉니다.
    • REGION을 마이그레이션 작업이 저장된 리전의 식별자로 바꿉니다.

    gcloud database-migration operations describe 명령어를 실행하여 확인 작업의 상태를 확인할 수 있습니다.

  5. 마이그레이션 작업을 시작합니다.
    확인이 완료되면 gcloud database-migration migration-jobs start 명령어를 실행합니다 (클릭하여 펼치기).

    gcloud database-migration migration-jobs start

    gcloud database-migration migration-jobs start MIGRATION_JOB_ID \
        --region=REGION

    다음을 바꿉니다.

    • MIGRATION_JOB_ID을 마이그레이션 작업의 식별자로 바꿉니다.
    • REGION을 마이그레이션 작업이 저장된 리전의 식별자로 바꿉니다.

이전 모니터링 및 확인하기

DAG 마이그레이션 작업이 실행되는 동안 Google Cloud 콘솔에서 진행 상황을 모니터링하고, CDC 중에 읽기 전용 모드로 대상 데이터베이스를 쿼리하고, 활성 복제를 관리할 수 있습니다.

Google Cloud 콘솔에서 진행 상황 모니터링

다른 Database Migration Service 마이그레이션 작업과 마찬가지로 Google Cloud 콘솔의 마이그레이션 작업 세부정보 페이지에서 실행 중인 DAG 마이그레이션 작업을 모니터링할 수 있습니다.

  • 마이그레이션 작업 세부정보 페이지의 데이터베이스 테이블에서 가용성 그룹의 각 데이터베이스에 대한 실시간 단계(초기 전체 로드 중 Full dump, 연속 복제 중 CDC, 데이터베이스 수준 오류 메시지)와 복원 지연을 확인합니다.
  • 모니터링 탭에서 복원 지연(datamigration.googleapis.com/migration_job/max_replica_sec_lag, 데이터베이스당 분산 가용성 그룹 복제 지연을 초 단위로 보고) 차트를 확인합니다.

측정항목 및 작업 상태 모니터링에 대한 자세한 내용은 마이그레이션 작업 측정항목 및 마이그레이션 작업 상태 코드를 참조하세요.

CDC 중에 읽기 전용 모드로 마이그레이션된 데이터베이스 확인

승격될 때까지 대상 데이터베이스가 RESTORING 상태로 유지되는 백업 기반 마이그레이션과 달리 분산 가용성 그룹 마이그레이션을 사용하면 대상 SQL Server용 Cloud SQL 데이터베이스가 CDC 단계에 진입하는 즉시 읽기 전용 모드로 쿼리할 수 있습니다.

소스 인스턴스의 SQL 로그인에서 소유한 각 데이터베이스에 대해 Database Migration Service는 gcp_dms_, 6자 식별자, 소스 소유자 이름 (예: gcp_dms_a1b2c3_myowner)이 프리픽스로 추가된 대상 SQL Server용 Cloud SQL 인스턴스에 로그인을 자동으로 만듭니다. 승격 전에 해당 로그인으로 데이터베이스를 쿼리하려면 sqlserver로 대상 SQL Server용 Cloud SQL 인스턴스에 연결하고 sys.server_principals에서 생성된 로그인 이름을 찾은 후 비밀번호를 재설정합니다.

SELECT name FROM sys.server_principals WHERE name LIKE 'gcp_dms_%';
GO
ALTER LOGIN [GENERATED_DMS_OWNER_LOGIN] WITH PASSWORD = 'NEW_OWNER_PASSWORD';
GO

다음을 바꿉니다.

  • GENERATED_DMS_OWNER_LOGIN을 쿼리에서 반환된 생성된 데이터베이스 소유자 로그인 이름으로 바꿉니다.
  • NEW_OWNER_PASSWORD를 로그인의 새 비밀번호로 바꿉니다.

이전된 객체 및 데이터 확인에 대한 자세한 내용은 이전 확인을 참조하세요.

활성 DAG 마이그레이션 작업 관리 (선택사항)

마이그레이션 작업이 CDC 단계에서 실행되는 동안 다음 관리 작업을 수행할 수 있습니다.

  • ALTER AVAILABILITY GROUP ... ADD DATABASE 또는 ALTER AVAILABILITY GROUP ... REMOVE DATABASE를 실행하여 소스 SQL Server 인스턴스의 소스 가용성 그룹에서 데이터베이스를 추가하거나 삭제합니다. Database Migration Service는 다음 폴링 주기에 변경사항을 자동으로 감지하고 대상 SQL Server용 Cloud SQL 인스턴스를 업데이트합니다.
  • gcloud database-migration migration-jobs stop를 실행하여 데이터 복제를 일시적으로 중지합니다. DAG 마이그레이션 작업 중지는 정의된 짧은 기간 동안만 사용해야 합니다. 복제가 중지된 동안 트랜잭션 로그에 업데이트가 계속 누적되어 트랜잭션 로그 디스크가 가득 찰 수 있기 때문입니다. 중지된 상태에서 gcloud database-migration migration-jobs resume를 실행하여 데이터 복제를 재개하거나 gcloud database-migration migration-jobs delete를 실행하여 마이그레이션을 완료하고 필요한 정리를 수행할 수 있습니다.
  • gcloud database-migration migration-jobs restart를 실행하여 실패한 마이그레이션 작업을 다시 시작합니다. DAG 마이그레이션 작업을 다시 시작하면 대상 SQL Server용 Cloud SQL 인스턴스에서 마이그레이션된 데이터베이스가 삭제되고, 분산 가용성 그룹이 다시 생성되며, 네트워크를 통해 초기 전체 로드가 다시 실행됩니다.

마이그레이션 승격, 장애 복구 또는 완료

애플리케이션을 SQL Server용 Cloud SQL로 전환할 준비가 되면 마이그레이션 작업을 승격합니다. DAG 마이그레이션에서 작업을 승격하면 SQL Server용 Cloud SQL이 읽기/쓰기 기본으로 전환되고 마이그레이션 작업이 FAILBACK 단계(Google Cloud CLI 및 API 응답의 PHASE_FAILBACK)로 전환되며 소스 SQL Server 인스턴스로의 활성 역방향 복제가 수행됩니다.

  1. 소스 SQL Server 데이터베이스에 대한 애플리케이션 쓰기를 중지하고 Google Cloud 콘솔에서 복원 지연 측정항목을 확인하여 복제 지연이 0에 도달했는지 확인합니다.
  2. 마이그레이션 작업을 승격하여 Cloud SQL로 전환합니다.
    gcloud database-migration migration-jobs promote 명령어를 실행합니다 (클릭하여 펼치기).

    gcloud database-migration migration-jobs promote

    gcloud database-migration migration-jobs promote MIGRATION_JOB_ID \
        --region=REGION

    다음을 바꿉니다.

    • MIGRATION_JOB_ID을 마이그레이션 작업의 식별자로 바꿉니다.
    • REGION을 마이그레이션 작업이 저장된 리전의 식별자로 바꿉니다.

    승격 중에 Database Migration Service는 다음 작업을 수행합니다.

    • 분산 가용성 그룹을 동기식 커밋으로 설정하고, 모든 소스 데이터베이스에서 CHECKPOINT를 실행하고, 모든 트랜잭션이 데이터 손실 없이 동기화될 때까지 기다린 후, 가용성 그룹 역할을 반전하여 대상 SQL Server용 Cloud SQL 인스턴스가 읽기/쓰기 기본이 되고 원래 소스 SQL Server 인스턴스가 보조가 됩니다.
    • 마이그레이션 작업을 Running 상태로 유지하고 하위 상태를 FAILBACK 단계(Google Cloud CLI 및 API 응답의 PHASE_FAILBACK)로 전환하여 대상 SQL Server용 Cloud SQL의 새 쓰기를 소스 SQL Server 인스턴스에 지속적으로 다시 복제합니다.

    승격이 완료되면 애플리케이션을 새 SQL Server용 Cloud SQL 인스턴스에 연결합니다.

  3. (선택사항) 소스 SQL Server 인스턴스로 장애 복구합니다.
    마이그레이션 작업이 FAILBACK 단계에 있는 동안 애플리케이션을 SQL Server용 Cloud SQL로 전환한 후 문제가 발생하면 SQL Server용 Cloud SQL에서 애플리케이션 쓰기를 중지하고 --failback 플래그를 사용하여 gcloud database-migration migration-jobs promote 명령어를 실행하여 데이터 손실 없이 컷오버를 되돌릴 수 있습니다 (클릭하여 펼치기).

    gcloud database-migration migration-jobs promote --failback

    gcloud database-migration migration-jobs promote MIGRATION_JOB_ID \
        --region=REGION \
        --failback

    다음을 바꿉니다.

    • MIGRATION_JOB_ID을 마이그레이션 작업의 식별자로 바꿉니다.
    • REGION을 마이그레이션 작업이 저장된 리전의 식별자로 바꿉니다.

    FAILBACK 단계에서 --failback 플래그를 사용하여 promote를 실행하면 SQL Server용 Cloud SQL에 기록된 모든 변경사항이 동기화되고, 복제 방향이 다시 전환되어 원래 소스 SQL Server 가용성 그룹이 읽기/쓰기 기본이 되고 SQL Server용 Cloud SQL이 보조가 되며, 마이그레이션 작업이 CDC 단계로 돌아갑니다. --failback는 마이그레이션 작업이 FAILBACK 단계에 있을 때만 유효합니다. FAILBACK 단계에서 --failback 없이 promote를 실행하거나 CDC 단계에서 --failback를 전달하면 FAILED_PRECONDITION 오류와 함께 검증이 실패하고 마이그레이션 작업이 실행 중인 상태로 유지됩니다.

  4. (선택사항) 마이그레이션 작업을 삭제하기 전에 데이터 복제를 중지합니다.
    마이그레이션 작업을 영구적으로 삭제하기 전에 데이터 복제를 중지하려면 gcloud database-migration migration-jobs stop 명령어를 실행합니다 (클릭하여 펼치기).

    gcloud database-migration migration-jobs stop

    gcloud database-migration migration-jobs stop MIGRATION_JOB_ID \
        --region=REGION

    다음을 바꿉니다.

    • MIGRATION_JOB_ID을 마이그레이션 작업의 식별자로 바꿉니다.
    • REGION을 마이그레이션 작업이 저장된 리전의 식별자로 바꿉니다.
  5. 이전을 완료하고 이전 작업을 삭제합니다.
    애플리케이션이 새 SQL Server용 Cloud SQL 대상 인스턴스에서 완전히 작동하고 소스 SQL Server 인스턴스로의 역방향 복제가 더 이상 필요하지 않음을 확인한 후에는 마이그레이션 작업을 삭제하여(Running 또는 Stopped 상태에서) 마이그레이션을 완료하고 필요한 삭제 작업을 수행합니다. gcloud database-migration migration-jobs delete 명령어를 실행합니다 (클릭하여 펼치기).

    gcloud database-migration migration-jobs delete

    이 명령어는 완료하려면 입력이 필요한 대화형 확인 프롬프트를 반환합니다. 선택적 --quiet 플래그를 사용하여 확인 메시지를 건너뛸 수 있습니다.

    gcloud database-migration migration-jobs delete MIGRATION_JOB_ID \
        --region=REGION

    다음을 바꿉니다.

    • MIGRATION_JOB_ID을 마이그레이션 작업의 식별자로 바꿉니다.
    • REGION을 마이그레이션 작업이 저장된 리전의 식별자로 바꿉니다.

    마이그레이션 작업을 삭제하면 마이그레이션이 완료되고, 활성 역방향 복제가 중지되고, 두 인스턴스에서 분산 가용성 그룹 및 데이터베이스 미러링 인증서가 삭제되며, DAG 복제 중에 제한되는 SQL Server용 Cloud SQL 기능 (예: PITR (point-in-time recovery) 또는 읽기 복제본)을 사용 설정할 수 있습니다.

    마이그레이션 작업을 삭제한 후에는 선택적으로 대상 SQL Server용 Cloud SQL 인스턴스에서 cloud sql enable dag support 데이터베이스 플래그를 사용 중지하거나 삭제하고, SQL Server용 Cloud SQL 인스턴스(EXEC master.dbo.sp_dropserver @server = N'LINKED_SERVER_NAME', @droplogins = 'droplogins';)에서 연결된 서버를 삭제하고, 소스 SQL Server 인스턴스에서 gcp_dms_db 도우미 데이터베이스 및 마이그레이션 로그인을 삭제할 수 있습니다.